以编程方式确定是否已录制Youtube视频

以编程方式确定是否已录制Youtube视频,youtube,youtube-api,Youtube,Youtube Api,我从YouTube上获得了大部分音乐(以嵌入式播放器的形式)。不幸的是,我正在使用的一个视频总是有被删除的风险(由于版权问题或其他原因),从而破坏我网站上相应的页面 理想情况下,我会有一个cronjob来检查(每晚说)是否有任何视频被删除并通知我。执行此操作的最佳方法是什么?您需要的信息可通过,特别是在 根据您使用的编程语言,有很多代码可用于与YouTube API交互 如果您仍然无法正常工作,请在此发布更多详细信息。一种黑客方法是使用CURL获取您感兴趣的页面/视频的html,然后查找顶部显示

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


理想情况下,我会有一个cronjob来检查(每晚说)是否有任何视频被删除并通知我。执行此操作的最佳方法是什么?

您需要的信息可通过,特别是在

根据您使用的编程语言,有很多代码可用于与YouTube API交互


如果您仍然无法正常工作,请在此发布更多详细信息。

一种黑客方法是使用CURL获取您感兴趣的页面/视频的html,然后查找顶部显示的错误框DIV,该DIV表示视频已被删除。如果它存在且可见,则视频可能已被删除

Hacky,但我确信它会起作用。

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

此外,如果您担心国家级别的限制,请使用“&restriction=[two-letter country code]”参数

请参见“”。

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

要获得此XML表示,您需要
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
不幸的是,这会产生误报。例如,播放正常,但包含
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

嗯,今天就行了。但是不要构建依赖于div标签的东西,除非YouTube说你可以信任它。这似乎太容易改变了。我绝对推荐使用API,我绝对同意。我只是想扔掉另一个选项,尽管它是一个完全的黑客。你有没有这样做过?我还没有机会设置它,但当我这样做的时候,我可能会使用@Jakobud的hacky CURL解决方案(我不想阅读任何API文档)。你用什么语言做这个?API路由可能与cURL路由一样简洁,如果不是更简洁的话,而且肯定会更准确Ruby(在Rails上)--是的,也许我会仔细查看API路由这里有一些代码可能有助于具体说明,您必须在位于“{video_id}”的XML文档中查找yt:state标记实际上这不起作用——例如,这个视频:plays&Embeddes fine,但是相应的提要()有这样一个标签:
这个视频的联合受到其所有者的限制。