加载时,YouTube API检索数据会显着降低我的网站速度

时间:2012-02-18 00:14:28

标签: php api youtube

我正在使用YouTube的api来加载用户在Facebook等网站上分享的视频的当前数据,问题是它减慢了我的网站数量,每组数据大约2-4秒,所以如果我有一个视频2-4秒,那么2个视频4-8秒等等。所以我的问题是有没有办法不用这个检索所有的数据,并加快速度。 (当用户分享视频时,我将视频的标题和描述存储在我自己的数据库中,但我不能存储其他数据。这是我的代码:

 $JSON = file_get_contents("http://gdata.youtube.com/feeds/api/videos?q={$videoID}&alt=json");
 $JSON_Data = json_decode($JSON);
 $ratings = $JSON_Data->{'feed'}->{'entry'}[0]->{'gd$rating'}->{'average'};
 $totalRatings = number_format($JSON_Data->{'feed'}->{'entry'}[0]->{'gd$rating'}->{'numRaters'});
 $views = number_format($JSON_Data->{'feed'}->{'entry'}[0]->{'yt$statistics'}->{'viewCount'});

我还加载缩略图,我可以回去在提交时保存服务器上的缩略图,但似乎并没有减慢它的速度,因为当我删除它时仍然需要很长一段时间。

 $thumbnail = "http://img.youtube.com/vi/".$videoID."/2.jpg";

2 个答案:

答案 0 :(得分:0)

据我所知,这通常是PHP不太擅长的事情。

它根本不支持多线程,并且线程正是您想要做的(同时执行所有http请求,以便合并它们的延迟)。

也许你可以通过使用javascript将这部分逻辑移到浏览器中? JavaScript中的XMLHTTPRequest对象支持多线程。

据我所知,在PHP中使用原始套接字(fsockopen(); fwrite(); fread(); fclose();)的唯一方法是使用原始套接字({{1}}),但这不是为了佯装...你需要熟悉使用HTTP规范。

最后,内容变化多少了?也许您可以在数据库中拥有html的本地缓存,以及可以重建缓存的cron作业(可能每30秒运行一次)?这可能违反谷歌的服务条款。

真正最好的解决方案是与其他语言进行服务器通信,支持线程,并使用PHP脚本与之交谈。我可能会使用Ruby。

答案 1 :(得分:0)

你可以使用CURL,file_get_contents .....这不是重点。

重点是:快速响应!

使用memcached,文件系统,数据库或任何但从不在页面加载时调用API

相关问题