我有一个链接到很多YouTube视频的网站,但很多时候用户或YouTube都删除了这些视频。这意味着我的网站上有很多死视频,而且手动检查所有这些都是一场噩梦。
所以我正在寻找一种方法来检查YouTube视频是否仍然有效使用PHP。我看到很多人都在问同样的问题,但我无法让任何已发布的解决方案起作用。
答案 0 :(得分:8)
使用youtube V3 API检查视频是否可访问。有关详细信息,请参阅以下文档
基本上,使用您的API密钥发出GET请求
GET https://www.googleapis.com/youtube/v3/videos?part=id&id={VIDEO_ID}&key={YOUR_API_KEY}
您将收到如下样本回复:
{ "kind": "youtube#videoListResponse", "etag": "\"sZ5p5Mo8dPpfIzLYQBF8QIQJym0/N6KWrfNRyfPOarHfhvNS7j4jfxM\"", "pageInfo": { "totalResults": 0, "resultsPerPage": 0 }, "items": [] }*
如果在items
的响应中获得空数组,则无法访问该视频。
以下说明API的V2,现已弃用。 (https://developers.google.com/youtube/2.0/developers_guide_protocol_video_entries)。
注意:截至2014年3月4日,YouTube Data API(v2)已正式弃用。有关详细信息,请参阅我们的弃用政策。请使用YouTube Data API(v3)进行新的集成,并将仍在使用v2 API的应用程序迁移到v3 API。
向此网址发送请求,以验证是否存在视频
http://gdata.youtube.com/feeds/api/videos/<videoid>
以下是它的用法。
$headers = get_headers('http://gdata.youtube.com/feeds/api/videos/' . $videoId);
if (!strpos($headers[0], '200')) {
echo "The YouTube video you entered does not exist";
return false;
}
答案 1 :(得分:5)
您只需检查http://gdata.youtube.com/feeds/api/videos/$id
你回来了例如
所以最简单的检查是:
if (file_get_contents('http://gdata.youtube.com/feeds/api/videos/'.$videoId) == 'Video not found') {
echo 'Video deleted';
}
答案 2 :(得分:2)
使用youtube api,你可以检查yt:state属性: https://developers.google.com/youtube/2.0/reference#youtube%5Fdata%5Fapi%5Ftag%5Fyt%3Astate
答案 3 :(得分:0)
Youtube返回HTTP状态代码404,视频不存在。 例如See this made up url。
特定错误消息有所不同,但重要的是返回非200代码。
因此在PHP中使用Curl来获取url,然后检查返回的状态代码。 您可以使用以下内容从Curl获取状态代码:
$http_status = curl_getinfo( $handle, CURLINFO_HTTP_CODE );
您可以将每个网址的last_checked时间戳存储在数据库中,然后每隔N分钟运行一次cronjob以检查少量网址,并在完成后更新时间戳。确保将状态代码也存储在数据库中。
然后,您可以在显示网址时在代码中处理非200状态代码。