Youtube API批量请求BUG?

时间:2012-08-21 10:27:47

标签: api youtube-api gdata gdata-api

我正在通过他们的API从Youtube(用户和视频)中检索大量数据,但它变得越来越慢,因为我的需求正在逐渐增加,而且请求显然必须单独进行:

  

http://gdata.youtube.com/feeds/api/users/ID   https://gdata.youtube.com/feeds/api/videos/ID

所以我决定试一下批处理,你能不能“理论上”以50个包的方式做同样的事情,以节省大量的执行时间。

  

https://developers.google.com/youtube/2.0/developers_guide_protocol_batch_processing

我当然也成功了,但我遇到了问题,数据又回来了,但并不完全,有些信息丢失了(yt:statistics node),所以我上网寻找修复,我发现谷歌上的这个帖子:

  

https://groups.google.com/forum/?fromgroups=#!topic/youtube-api-gdata/YHopv4yJQzk

Youtube API团队的开发人员有一个答案,他们对此并不十分关注。

有人试过这个吗?有没有可能的解决方案?

提前致谢并原谅我的英语。

1 个答案:

答案 0 :(得分:1)

我发现我的问题出在XML解析而不是API输出上。我试图将XML输出转换为JSON / Array以提供更简单的数据操作,但由于节点名称和嵌套中的冒号,我遇到了困难,而且我在互联网上找到的任何函数都无法像这样解析XML数据。

我提供了一些代码,以防它可能对某人有用:

    public static function generarXMLBatch($listaIdsYoutube)
    {
       $version = "2";
       $batchUrl = "https://gdata.youtube.com/feeds/api/users/batch?v=".$version;
       $entryUrl = "https://gdata.youtube.com/feeds/api/users/";


       $xmlDoc = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?>
                    <feed xmlns="http://www.w3.org/2005/Atom"
                            xmlns:media="http://search.yahoo.com/mrss/"
                                  xmlns:batch="http://schemas.google.com/gdata/batch"
                                  xmlns:yt="http://gdata.youtube.com/schemas/2007">
                                   <batch:operation type="query"/></feed>');

       foreach($listaIdsYoutube as $idYoutube) {
           $xmlDoc->addChild("entry")->addChild("id", $entryUrl.$idYoutube["perfilYoutube"]."?v=".$version);
       }

       //SimpleXML to String
       $xmlDoc = $xmlDoc->saveXML();
       //XML string to CURL
       $xmlDoc = My_Funciones::cURL_XML($batchUrl, $xmlDoc);
       //XML string CURL output to SimpleXML
       $xmlDoc = new SimpleXMLElement($xmlDoc);

       return $xmlDoc;
   }

此功能接收Youtube ID列表,生成XML Batch查询(您可以同时查询多达50个视频/用户...),并以SimpleXML格式返回查询后的输出,以便您可以通过:

$ xmlDoc-&GT;入门&GT; ....

问候