Rap Exegesisのほとんどの音楽は、YouTube から (埋め込みプレーヤーの形で) 入手しています。残念ながら、私が使用しているビデオの 1 つが (著作権の問題などにより) 削除され、それによって私のサイトの対応するページが壊れてしまうリスクが常にあります。
理想的には、ビデオが削除されたかどうかをチェックして (毎晩)、通知する cronjob が必要です。これを行う最善の方法は何ですか?
Rap Exegesisのほとんどの音楽は、YouTube から (埋め込みプレーヤーの形で) 入手しています。残念ながら、私が使用しているビデオの 1 つが (著作権の問題などにより) 削除され、それによって私のサイトの対応するページが壊れてしまうリスクが常にあります。
理想的には、ビデオが削除されたかどうかをチェックして (毎晩)、通知する cronjob が必要です。これを行う最善の方法は何ですか?
必要な情報は、YouTube API、特にyt:stateタグから入手できます。
プログラミングしている言語に応じて、YouTubeAPIを操作するためのコードがたくさんあります。
これを機能させるのにまだ問題がある場合は、詳細をここに投稿してください。
「yt:stateタグ」と同様に、動画のOPでは埋め込みが許可されていない場合があります。たとえば、フロントページの曲のリストがYouTubeで管理しているプレイリストからのものである場合、埋め込みできない曲を取得しないようにする方法は、「&format=5」パラメータを含めることです。リストを取得するとき。例えば
http://gdata.youtube.com/feeds/api/playlists/8BCDD04DE8F771B2?v=2&format=5
また、国レベルの制限が心配な場合は、「&restriction=[2文字の国コード]」パラメーターを使用してください。
「開発者ガイド:データAPIプロトコル–APIクエリパラメータ」を参照してください。
それを行うためのハッキーな方法は、CURLを使用して、疑問に思っているページ/ビデオのhtmlを取得し、ビデオが削除されたことを示す上部に表示されるエラーボックスDIVを探すことです。存在し、表示されている場合は、動画が削除されている可能性があります。
ハッキーですが、うまくいくと思います。
@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/MX6rC1krGp0yt: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