1

我正在通过他们的 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 团队的一位开发者有一个回答,他们对此似乎不是很在意。

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

在此先感谢并原谅我的英语。

4

1 回答 1

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->entry->....

问候

于 2012-08-29T15:38:16.817 回答