以编程方式确定Youtube视频是否已被删除

时间:2009-10-19 21:34:48

标签: youtube youtube-api

我从YouTube上以Rap Exegesis获得大部分音乐(以嵌入式播放器的形式)。不幸的是,我正在使用的其中一个视频将被删除(由于版权问题或其他原因),从而打破了我网站上的相应页面。

理想情况下,我会有一个cronjob可以检查(每晚说)是否有任何视频被删除并通知我。最好的方法是什么?

4 个答案:

答案 0 :(得分:15)

您需要的信息可通过YouTube API获取,特别是yt:state tag

根据您编程的语言,有很多代码可以与YouTube API进行交互。

如果您仍然无法解决此问题,请在此处发布更多详细信息。

答案 1 :(得分:4)

除了“yt:state tag”之外,视频的OP可能不允许嵌入它。例如,如果首页上的歌曲列表来自您在YouTube上保留的播放列表,那么确保您没有收到不可嵌入的歌曲的方法就是包含“& format = 5 “检索列表时的参数。 E.g。

http://gdata.youtube.com/feeds/api/playlists/8BCDD04DE8F771B2?v=2&format=5

此外,如果您担心国家/地区级别的限制,请使用“& restriction = [双字母国家/地区代码]”参数。

请参阅“Developer's Guide: Data API Protocol – API Query Parameters”。

答案 2 :(得分:1)

一个hacky方法是使用CURL获取你想知道的页面/视频的html,然后查找顶部显示的错误框DIV,表示视频已被删除。如果它存在且可见,则视频可能已被删除。

Hacky,但我认为它会起作用。

答案 3 :(得分:0)

正如@seengee所说,“正确”的方法是通过YouTube API在YouTube视频的XML表示中查找yt:state标记

要获得此XML表示,您需要获取http://gdata.youtube.com/feeds/api/videos/VIDEO_IDmore details here)。因此,实施此检查应该像以下一样简单:

def valid_embed_link?
  doc = Hpricot(open("http://gdata.youtube.com/feeds/api/videos/#{youtube_video_id}"))
  doc.at('yt:state').blank?
end

不幸的是,这会产生误报。例如,http://www.youtube.com/watch?v=MX6rC1krGp0播放正常,但http://gdata.youtube.com/feeds/api/videos/MX6rC1krGp0包含yt:state标记。因此,我已经采用了这种更为粗俗的方法:

def valid_embed_link?
  doc = Hpricot(open("http://www.youtube.com/watch?v=#{youtube_video_id}"))
  return doc.at('.yt-alert-content').blank?
end
相关问题