我需要为每个视频频道检索'视图计数',并且我正在使用此库。这是我的代码
好吧,代码正常,并打印我的视图for foreach视频,除了我在没有打印视图计数的情况下收到了其他一些视频的警告
遇到了严重性的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
}
}
}
你做错了什么。
首先,如果要最大程度地减少您对API的电话数量,则应设置max-results=50
,这是API支持的最大值。
第二,我不明白您为什么要对http://.../videos/VIDEO_ID
进行单独的电话来检索每个视频的统计信息,因为该信息已经作为您从http://.../users/USER_ID/uploads
feed获得的视频条目的一部分返回。您只需存储该提要返回的值,而避免必须进行所有其他调用以检索每个视频。
最后,基本问题几乎可以肯定是您正在遇到配额错误,并且您可以在http://apiblog.youtube.com/2010/02/best-practices-for-avoiding--crop-com.com.com/apiblog.youtube.com上阅读更多有关它们的信息。quenta.html
采取我提到的任何步骤都应减少您要提出的总请求并有可能解决任何配额问题,但无论如何您都应该熟悉配额系统。