youtube api - 循环访问大量数据

时间:2012-12-18 09:45:22

标签: youtube-api

我需要检索每个视频频道的“观看次数”,我正在使用此library。 这是我的代码

好的,代码工作正常并打印出视频计数foreach视频,除了我在没有打印视图计数的情况下获得了一些其他视频的警告

遇到严重错误:严重错误:警告消息:

  • simplexml_load_string()[function.simplexml-load-string]:实体: 第547行:解析器错误:属性构造错误
  • 消息: simplexml_load_string()[function.simplexml-load-string]: outube_gdata'/>
  • 消息: simplexml_load_string()[function.simplexml-load-string]:^
  • 消息: simplexml_load_string()[function.simplexml-load-string]:实体: 第547行:解析器错误:找不到“开始标记”链接行547的结尾
  • 消息:simplexml_load_string()[function.simplexml-load-string]: outube_gdata'/>

如何处理大量的视频和频道,而不会导致此警告消息并及时丢失,因为如果我在一个频道上尝试使用相同代码的视频较少而没有错误

$channels=array('google','apple','mac','xyz','abc','test');
for ($j=0; $j<count($channels) $j++)
{

$JSON = file_get_contents("https://gdata.youtube.com/feeds/api/users/".$channels[$j]."/uploads?v=2&alt=jsonc&max-results=0");
$JSON_Data = json_decode($JSON);
    $total_videos = $JSON_Data->{'data'}->{'totalItems'};

    for($i=1; $i<=$total_videos; )
    {
        $this->get_userfeed($channels[$j],$maxresult=20,$start=$i);
        $i+=20;
    }

}

public function get_userfeed($ch_id,$maxresult=10,$start=0,$do=null)
{

    $output = $this->youtube->getUserUploads($ch_id, array('max-results'=>$maxresult,'start-index'=>$start));
    $xml = simplexml_load_string($output);

    // single entry for testing
    foreach($xml->entry as $entry)
    {
    foreach($entry->id as $key=>$val)
    {
    $id = explode('videos/', (string)$val);

    $JSON = file_get_contents("https://gdata.youtube.com/feeds/api/videos/".$id[1]."?v=2&alt=json");
    $JSON_Data = json_decode($JSON);
    $v_count = $JSON_Data->{'entry'}->{'yt$statistics'}->{'viewCount'};
    if($v_count == NULL) $v_count =0;

    echo $v_count;
    // store the v_count into database

    }
    }

}

1 个答案:

答案 0 :(得分:0)

你做错了。

首先,如果您想最大程度地减少您对API所做的调用次数,则应设置max-results=50,这是API支持的最大值。

其次,我不明白为什么你要对http://.../videos/VIDEO_ID进行单独调用以检索每个视频的统计信息,因为该信息已经作为您从{获得的视频条目的一部分返回{1}} Feed。您只需存储该Feed返回的值,并避免进行所有其他调用以检索每个视频。

最后,基本问题几乎肯定是您遇到了配额错误,您可以在http://apiblog.youtube.com/2010/02/best-practices-for-avoiding-quota.html了解更多相关信息

采取我提到的任何步骤都应该减少你正在提出的总要求并可能解决任何配额问题,但是你应该熟悉配额系统。