Titanium Appcelerator 用 API 解析 Youtube JSON

Titanium Appcelerator parse Youtube JSON with API

我在论坛上做了一个研究,我感到很困惑。我的演示项目是使用 Alloy MVC 创建的。我想从 Youtube API 中解析一个 JSON 与顶级相关的烹饪视频,例如,并将它们显示在 TableView 中。 任何人都可以告诉我如何去做吗? 我是新人。

这是我到目前为止所做的代码:

视频XML

<Alloy>
<Window class="container">
<View id="main" onClick="youtubeFeed">
   <Label class="header">YouTube Channel</Label>
            <TableView id="results">

            </TableView>            
        </View>
    </Window>
</Alloy>

Videos.js

function youtubeFeed () {

var apiKey = 'MY_API_KEY';
var perPage = 6;
var search = "Cooking";
var description;
var val;
var id;
var category = "News";

var query = 'https://www.googleapis.com/youtube/v3/search?part=snippet&q=search&maxResults=per_page&videoCategoryId=category&safesearch=strict&key=apikey';
var response = JSON.parse(this.responseText);

require("/api").create({
    url: query,
    type: "GET",
    success: onSuccess,
    error: onError
});

function onSuccess(e){
    console.log(e.data);
}

function onError(e){
    console.log("error");
}

}

你需要在xhr的帮助下调用实际的API url。首先看看 https://github.com/m1ga/titanium-libraries/blob/master/api.js

在您的 projectname/app/ 文件夹中创建一个 lib 文件夹,并将 js 文件放在那里,然后在您的函数中这样调用它:

require("/api").create({
    url: query,
    type: "GET",
    success: onSuccess,
    error: onError
});

function onSuccess(e){
    console.log(e.data);
}

function onError(e){
    console.log("error");
}

并确保您的查询字符串正确。看起来您采用了 php 示例,因为它使用 $ 和 a 。最后连接。

我不确定您使用哪个库来获取 JSON,但是在您获取它之前解析 JSON 不起作用。

这是它应该如何工作的一个基本示例:

var url = 'https://www.googleapis.com/youtube/v3/search?part=snippet&q=search&maxResults=per_page&videoCategoryId=category&safesearch=strict&key=apikey';
var xhr = Titanium.Network.createHTTPClient({
    onload: function() {
        var response = JSON.parse(this.responseData);
        // you've got your JSON here, after the API call succeeded
    },
    timeout: timeout
});
xhr.open('GET', url);
xhr.send();

你已经从 Youtube API 得到了你的 JSON 答案,现在 MigaRene 给出了你提示。
您可能想阅读一些 guides 以了解从 Youtube 返回时您的 JSON 对象的样子(使用他们的 API 资源管理器)。

阅读 Titanium.UI.TableView 文档,您应该为 response.items 中的每个元素添加一个 TableViewRow:

for (var i=0; i<response.items.length; i++){
    var video, row, videoTitle;

    video = response.items[i];

    row = Ti.UI.createTableViewRow({
        width: Ti.UI.FILL,
        height: 100
    }),

    videoTitle = Ti.UI.createLabel({
        text: video.snippet.title,
        videoId: video.id.videoId, // custom prop
        width: Ti.UI.SIZE,
        height: 80
    });
    row.add(videoTitle);

    $.results.appendRow(row);
}

监听来自您的 TableViewclick 事件,以便您可以打开一个新的控制器来播放指定的视频:

$.results.addEventListener('click', function onClick(event) {
    var row = event.row,
        videoId = row.videoId;
    // TODO...
});

祝你好运!