我正在通过他们的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团队的开发人员有一个答案,他们对此并不十分关注。
有人试过这个吗?有没有可能的解决方案?
提前致谢并原谅我的英语。
答案 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; ....
问候