0

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

好的,代码可以正常工作并打印我每个视频的观看次数,除了我在其他一些视频中收到这些警告而没有打印观看次数

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

  • 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

    }
    }

}
4

1 回答 1

0

你做错了几件事。

首先,如果您想尽量减少对 API 的调用次数,您应该设置max-results=50,这是 API 支持的最大值。

其次,我不明白您为什么要单独调用以http://.../videos/VIDEO_ID检索每个视频的统计信息,因为该信息已作为您从http://.../users/USER_ID/uploads提要中获取的视频条目的一部分返回。您可以只存储该提要返回的值,而不必进行所有这些额外的调用来检索每个视频。

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

采取我提到的任何步骤都应该减少您提出的总请求并可能解决任何配额问题,但无论如何您都应该熟悉配额系统。

于 2012-12-18T19:00:51.490 回答