我有一个网站链接到很多 YouTube 视频,但很多时候这些视频被用户或 YouTube 删除。这意味着我的网站上有很多死视频,而且有很多,手动检查它们将是一场噩梦。
所以我正在寻找一种方法来使用 PHP 检查 YouTube 视频是否仍然有效。我看到很多人问同样的问题,但我无法让任何已发布的解决方案发挥作用。
我有一个网站链接到很多 YouTube 视频,但很多时候这些视频被用户或 YouTube 删除。这意味着我的网站上有很多死视频,而且有很多,手动检查它们将是一场噩梦。
所以我正在寻找一种方法来使用 PHP 检查 YouTube 视频是否仍然有效。我看到很多人问同样的问题,但我无法让任何已发布的解决方案发挥作用。
使用 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)。
注意:YouTube 数据 API (v2) 已于 2014 年 3 月 4 日正式弃用。有关更多信息,请参阅我们的弃用政策。请使用 YouTube 数据 API (v3) 进行新的集成,并将仍然使用 v2 API 的应用程序也迁移到 v3 API。
向此 URL 发送请求,以验证视频是否存在
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;
}
您可以简单地检查返回值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';
}
使用 youtube api,您可以检查 yt:state 属性: https ://developers.google.com/youtube/2.0/reference#youtube%5Fdata%5Fapi%5Ftag%5Fyt%3Astate
Youtube 返回 HTTP 状态代码 404 是视频不存在。 例如,请参阅这个组成的 url。
具体的错误信息有所不同,但重要的是返回了非 200 代码。
所以在 PHP 中使用 Curl 来获取 url,然后检查返回的状态码。您可以通过以下方式从 Curl 获取状态代码:
$http_status = curl_getinfo( $handle, CURLINFO_HTTP_CODE );
您可以在数据库中存储每个 url 的 last_checked 时间戳,然后每 N 分钟运行一次 cronjob 以检查少量 url,并在完成后更新时间戳。确保也将状态代码存储在数据库中。
然后,在显示 url 时,您可以在代码中处理您喜欢的非 200 状态代码。