我在论坛上做了一个研究,我很困惑。我的演示项目是用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");
}
}
你已经从Youtube API得到了JSON答案,现在Miga和Rene给了你提示。
有一些指南,你可能想知道你的JSON对象是什么样子,当从Youtube回来(使用他们的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);
}
从你的TableView
监听click
事件,这样你就可以打开一个新的控制器来播放指定的视频:
$.results.addEventListener('click', function onClick(event) {
var row = event.row,
videoId = row.videoId;
// TODO...
});
祝你好运!
您需要在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();