我的应用程序主要使用youtube视频,现在我的任务是消除不播放的youtube视频,i。E、私人或被用户删除等…所以我写了这样一个脚本:
function badvideos()
{
$ids=array();
$query=$this->db->query("select Id,VideoUrl from VideoTable where Status=1"); //Status=1 means active videos
$res=$query->result();
foreach($res as $val)
{
$status="";
$videoid=$val->VideoUrl; //getting each video videourl
$videoid=explode('=',$videoid);
$videoid=$videoid[1]; //getting videoid
$videourl="https://www.googleapis.com/youtube/v3/videos?
part=status&videoSyndicated=true&type=video&id=".$videoid."&key=Myapikey";
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,$videourl);
$output=curl_exec($ch); //curl execution
$response = json_decode($output, TRUE);
foreach($response['items'] as $value)
{
$status=$value['status']['uploadStatus'];
}
if($status!="processed") //if bad video
{
$ids[]=array("id"=>$val->Id,"videourl"=>$val->VideoUrl);
}
}
echo json_encode($ids); //showing json response of bad videos 'videourls
}
代码运行正常,当我必须执行100条记录或更少…3000条记录花了我20分钟....但是如果我必须在50,000条记录上运行....
是否有一种方法可以优化代码以获得更好的性能,或者可以从数据库中扫描数千条记录并检查其'uploadstatus'......
我建议并行运行CURL以同时获取多个请求,
这可以通过Curl Multi实现来完成
参见示例代码
请注意,您不必通过身份验证就可以知道哪些视频已被删除,因此可以使用此链接代替
http://gdata.youtube.com/feeds/api/videos/{$videoId}
并节省一些认证时间