3

可能重复:
检查 Youtube 和 Vimeo 剪辑是否有效

我有一个网站链接到很多 YouTube 视频,但很多时候这些视频被用户或 YouTube 删除。这意味着我的网站上有很多死视频,而且有很多,手动检查它们将是一场噩梦。

所以我正在寻找一种方法来使用 PHP 检查 YouTube 视频是否仍然有效。我看到很多人问同样的问题,但我无法让任何已发布的解决方案发挥作用。

4

4 回答 4

8

使用 youtube V3 API 检查视频是否可以访问。有关更多信息,请参阅以下文档

https://developers.google.com/youtube/v3/docs/videos/list

基本上,使用您的 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;
}
于 2012-04-15T11:41:25.813 回答
5

您可以简单地检查返回值http://gdata.youtube.com/feeds/api/videos/$id

例如你回来

  • 私人视频
  • 无效的 ID
  • 找不到视频

所以最简单的检查是:

if (file_get_contents('http://gdata.youtube.com/feeds/api/videos/'.$videoId) == 'Video not found') {
  echo 'Video deleted';
}
于 2012-04-15T11:42:51.947 回答
2

使用 youtube api,您可以检查 yt:state 属性: https ://developers.google.com/youtube/2.0/reference#youtube%5Fdata%5Fapi%5Ftag%5Fyt%3Astate

于 2012-04-15T11:44:53.180 回答
0

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 状态代码。

于 2012-04-15T11:48:55.490 回答