【问题标题】:Titanium Appcelerator parse Youtube JSON with APITitanium Appcelerator 使用 API 解析 Youtube JSON
【发布时间】:2015-11-03 08:07:54
【问题描述】:

我对论坛进行了研究,但我感到困惑。我的演示项目是使用 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>

视频.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");
}

}

【问题讨论】:

    标签: javascript json youtube-api titanium appcelerator


    【解决方案1】:

    现在 MigaRene 为您提供了提示,您已经从 Youtube API 获得了 JSON 答案。
    您可能想阅读一些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);
    }
    

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

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

    祝你好运!

    【讨论】:

      【解决方案2】:

      我不确定您使用什么库来获取 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();
      

      【讨论】:

        【解决方案3】:

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

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

        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 示例,因为它使用了 $ 和 .最后连接。

        【讨论】:

        • 非常感谢您的快速响应。正如你提到的,我还修改了我的查询字符串,因为我使用了一个 php 示例。不幸的是,我没有让它工作。
        • 如果您告诉我们错误是什么或卡在哪里会有所帮助
        • 我没有收到任何错误,但是当我在模拟器上运行它时什么也没有出现。对不起这个愚蠢的问题。我需要其他东西来将 JSON 解析为我的 XML 中的 TableView 吗?
        • 还有很多缺失。看看docs.appcelerator.com/platform/latest/#!/api/… 有一些代码如何创建 tableviewrows 以及如何添加它们。您应该在输出控制台中看到 api-response 的内容,以检查 api 调用是否正常
        猜你喜欢
        • 2011-12-02
        • 1970-01-01
        • 1970-01-01
        • 2011-11-30
        • 1970-01-01
        • 2012-11-27
        • 1970-01-01
        • 2011-09-05
        • 2014-07-21
        相关资源
        最近更新 更多