【问题标题】:Check if a YouTube video has been removed using PHP? [duplicate]检查是否已使用 PHP 删除了 YouTube 视频? [复制]
【发布时间】:2012-04-27 01:11:08
【问题描述】:

可能重复:
Check if Youtube and Vimeo-clips are valid

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

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

【问题讨论】:

  • 请提供一些已删除视频的链接示例(或您用来识别的链接)以及一些仍在使用的视频。

标签: php youtube


【解决方案1】:

使用 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,该 API 现在已弃用。 (https://developers.google.com/youtube/2.0/developers_guide_protocol_video_entries)。

注意:YouTube 数据 API (v2) 已于 2014 年 3 月 4 日正式弃用。有关详细信息,请参阅我们的弃用政策。请使用 YouTube Data 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;
}

【讨论】:

  • @Downvoter,你不能在投反对票的同时发表评论吗?
  • 如果我在每次网页浏览时都执行此请求(我的意思是,每次用户尝试访问网络时)youtube api 是否有可能阻止我?
  • 这还能用吗?即使是有效的 youtube 视频 ID,我也会收到“视频不再可用”
  • @Sudar,是的,这个答案中的方法已被弃用。我已经更新了使用新 API 版本的指南。
【解决方案2】:

您可以简单地查看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';
}

【讨论】:

  • Dan Lee 先生,请注意您的语言。它是关于一个没有重复答案的干净帖子。考虑到你的答案质量很差。
【解决方案3】:

【讨论】:

【解决方案4】:

Youtube 返回 HTTP 状态代码 404,表示视频不存在。 以See this made up url 为例。

具体的错误信息不同,但重要的是返回了一个非200代码。

所以在 PHP 中使用 Curl 来获取 url,然后检查返回的状态码。 您可以通过以下方式从 Curl 获取状态代码:

$http_status = curl_getinfo( $handle, CURLINFO_HTTP_CODE );

您可以在数据库中存储每个 url 的 last_checked 时间戳,然后每隔 N 分钟运行一次 cronjob 以检查少量 url,并在完成后更新时间戳。确保将状态码也存储在数据库中。

然后,当显示 url 时,您可以在代码中随意处理非 200 状态代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-01
    • 2018-04-18
    • 2015-07-23
    • 2018-01-07
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 2010-11-25
    相关资源
    最近更新 更多