7

I'm getting most of the music on Rap Exegesis from YouTube (in the form of embedded players). Unfortunately, there's always the risk that one of the videos I'm using will be taken down (due to copyright issues or whatever), thereby breaking the corresponding page on my site.

Ideally I would have a cronjob that would check (nightly say) whether any videos had been removed and notify me. What's the best way to do this?

4

4 回答 4

15

The information you need is available via the YouTube API, specifically in the yt:state tag

Depending what language you are programming in there is lots of code around for interacting with the YouTube API.

Post here with more details if you are still having issues getting this to work.

于 2009-10-19T21:41:21.470 回答
4

与“yt:state tag”一样,视频的 OP 可能不允许嵌入它。例如,如果首页上的歌曲列表来自您在 YouTube 上维护的播放列表,那么确保您没有获得不可嵌入的歌曲的一种方法是包含“&format=5”参数检索您的列表时。例如

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

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

请参阅“开发人员指南:数据 API 协议 – API 查询参数”。

于 2009-10-20T04:01:33.823 回答
1

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

哈基,但我敢打赌它会起作用。

于 2009-10-19T21:45:23.703 回答
0

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

要获得这种 XML 表示,您需要 GET http://gdata.youtube.com/feeds/api/videos/VIDEO_ID更多详细信息请点击此处)。所以实现这个检查应该很简单:

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
于 2010-05-17T19:55:22.813 回答