2009-10-19 2 views
6

Я получаю большую часть музыки на Rap Exegesis с YouTube (в виде встроенных проигрывателей). К сожалению, всегда существует риск того, что одно из видео, которое я использую, будет снято (из-за проблем с авторским правом или что-то еще), тем самым нарушив соответствующую страницу на моем сайте.Программно определить, было ли снято видео Youtube.

В идеале у меня был бы cronjob, который бы проверял (ночевали), были ли удалены какие-либо видео и уведомить меня. Каков наилучший способ сделать это?

+0

Вы когда-нибудь получали эту работу? – robjmills

+0

У меня еще не было возможности установить это, но когда я это сделаю, я, скорее всего, пойду с хакерским решением CURL @ Jakobud (я не хочу читать какую-либо документацию по API) –

+0

достаточно справедливо. на каком языке вы это делаете? вероятно, что маршрут API так же краток, как и маршрут cURL, если не более того, и, конечно же, будет более точным. – robjmills

ответ

14

Нужная информация доступна через YouTube API, в частности, в yt:state tag

В зависимости от того, что язык, который вы программируете в есть много кода вокруг для взаимодействия с API YouTube.

Отправьте сюда более подробную информацию, если у вас по-прежнему возникают проблемы с тем, чтобы это работало.

+0

Чтобы быть конкретным, вам нужно искать тег yt: state в документе XML, расположенном по адресу http: // gdata.youtube.com/feeds/api/videos/# {video_id} " –

+0

На самом деле это не работает - например, это видео: http://www.youtube.com/watch?v=MX6rC1krGp0 играет и вставляет хорошо, и все же соответствующий фид (http://gdata.youtube.com/feeds/api/videos/MX6rC1krGp0) имеет этот тег : ' Синдикация этого видео была ограничена его владелец. ' –

1

Хакерный способ сделать это - использовать CURL, чтобы получить html страницы/видео, о которой вам интересно, а затем найти окно с ошибкой DIV, отображающее вверху, в котором говорится, что видео было удален. Если он существует и его видимость, видео, вероятно, было удалено.

Хакки, но я уверен, что это сработает.

+3

Ну, это сработало бы сегодня. Но не создавайте что-то, что полагается на тег div, если только YouTube не говорит, что вы можете доверять ему. Мне кажется, что это слишком легко для меня. Я определенно рекомендую использовать API. – marcc

+0

Я определенно согласен. Просто хотел выбросить еще один вариант, хотя его общий взлом. –

4

Как и «ярлык yt: state», OP видео может не допускать его встраивания. Если список песен на первой странице поступает из списка воспроизведения, который вы поддерживаете на YouTube, например, то, чтобы убедиться, что вы не получаете песни, которые не встраиваются, следует включить « format = 5», параметр при получении списка. Например.

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

Кроме того, если вы беспокоитесь об ограничениях на уровне страны, а затем использовать «= [две буквы кода страны] & ограничения» параметр.

См. «Developer's Guide: Data API Protocol – API Query Parameters».

0

Как @seengee говорит, «правильный» способ сделать это, чтобы искать yt:state тега в XML-представлении видео YouTube через API YouTube

Чтобы получить этот XML-представление, вы получите http://gdata.youtube.com/feeds/api/videos/VIDEO_ID (more 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 
Смежные вопросы