Обнаружение видео с ограничением воспроизведения Youtube

Я разрабатываю веб-службу с использованием python и хочу отфильтровать видео, которые нельзя воспроизвести за пределами страницы YouTube.

Как и по этой ссылке [https://www.youtube.com/v/SC3pupLn-_8?version=3&f=videos&app=youtube_gdata] вы должны смотреть видео на странице YouTube, есть ли способ отфильтровать, какие видео принадлежат той же категории. Так что я выбираю только те видео, которые можно воспроизводить без каких-либо ограничений.

import gdata.youtube.service
#------------------------------------------------------------------------------ 

yt_service = gdata.youtube.service.YouTubeService()
yt_service.developer_key = 'YOUR API DEVELOPER KEY'

count=0

def PrintEntryDetails(entry):

    if entry.media.category[0].text == "Movies" :
        global count
        count = count + 1
        if  entry.noembed != None:
            print 'Video embedding not enable: %s' % entry.noembed.text
        else :
            print "entry embedable"

        print 'Video title: %s' % entry.media.title.text
        print 'Video category: %s' % entry.media.category[0].text
        print 'Video published on: %s ' % entry.published.text
        print 'Video description: %s' % entry.media.description.text
        if entry.media.private != None :
            print entry.media.private.text
        else :
            print "Right not found"          
        if entry.media.keywords :
            print 'Video tags: %s' % entry.media.keywords.text
        print 'Video watch page: %s' % entry.media.player.url
        print 'Video flash player URL: %s' % entry.GetSwfUrl()
        print 'Video duration: %s' % entry.media.duration.seconds        
        # For video statistics
        if entry.statistics :       
            print 'Video view count: %s' % entry.statistics.view_count
        # For video rating
        if entry.rating  :    
            print 'Video rating: %s' % entry.rating.average
        # show alternate formats
        for alternate_format in entry.media.content:
            if 'isDefault' not in alternate_format.extension_attributes:
                print 'Alternate format: %s | url: %s ' % (alternate_format.type,
                                                     alternate_format.url)
        # show thumbnails
        for thumbnail in entry.media.thumbnail:
            print 'Thumbnail url: %s' % thumbnail.url        
        print "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
    else :
        pass

def PrintVideoFeed(feed):
    counter = 0    
    for entry in feed.entry:        
        PrintEntryDetails(entry)
        counter = counter+1
        #print counter   


def SearchAndPrint():
    max = 20    
    yt_service = gdata.youtube.service.YouTubeService()
    query = gdata.youtube.service.YouTubeVideoQuery()
    # OrderBy must be one of: published viewCount rating relevance 
    query.orderby = "relevance"
    query.racy = 'include'
    query.author = "tseries"
    query.max_results = 50
    index = 01
    for i in (range(max)):        
        query.start_index = index
        index = index + 50
        query.format = "5"
        feed = yt_service.YouTubeQuery(query)    
        PrintVideoFeed(feed)


SearchAndPrint()
print "**********************************************************"
print "Total Movies"
print count

person Community    schedule 21.12.2012    source источник
comment
Есть ли способ узнать, что это видео нельзя воспроизвести за пределами веб-сайта YouTube. Использование python   -  person    schedule 22.12.2012
comment
Видео утверждает, что его можно встроить, и предоставляет встраиваемый URL-адрес SWF. Однако я не могу проверить это, потому что это не для просмотра в США. Можете ли вы найти другой пример, который доступен для просмотра по всему миру, но не может быть встроен во внешнюю страницу или приложение? (PS, имеет ли youtube.com/watch?v=SC3pupLn-_8 ведет себя так же, как полноэкранный URL-адрес приложения, который вы разместили? И тестировали ли вы встраиваемый URL-адрес SWF или какие-либо другие средства встраивания? Что происходит, когда вы его используете?)   -  person abarnert    schedule 22.12.2012
comment
ссылка ссылкаПопробуйте это. URL-адрес, который я упомянул ранее, был для флеш-плеера, и у меня есть альтернативные URL-адреса для этого видео, но их разрешение было очень плохим, они имеют формат 3gp. Пожалуйста, помогите мне...   -  person    schedule 22.12.2012
comment
Второй снова недоступен в США. Но первый говорит, что это видео… запрещено для воспроизведения на определенных сайтах. Смотрите на YouTube. Кажется, это то, что вы ищете. Я посмотрю, если вы можете предоставить соответствующий запрос, который возвращает это...   -  person abarnert    schedule 27.12.2012


Ответы (2)


Насколько я понимаю ваш вопрос, вы ищете app:control/yt:state тег. Например, если видео ограничено для воспроизведения на сайте YouTube, но вы пытаетесь получить к нему доступ через встроенный URL-адрес или через не-браузер, вы получите что-то вроде этого:

<app:control>
    <yt:state name="restricted" reasonCode="limitedSyndication">Syndication of this video was restricted.</yt:state>
</app:control>

Вы можете увидеть это в своем объекте entry как:

entry.control.FindExtensions('state')[0].attributes

Который будет:

{'name': 'restricted', 'reasonCode': 'limitedSyndication'}

Конечно, вам нужно сделать это более надежным — control может быть None, у него может не быть тегов state и т. д. Но вы поняли идею.

Я не думаю, что вы можете напрямую искать наличие или отсутствие или конкретное значение state, но вы можете использовать fields для постфильтрации результатов перед их получением. В документах фактически приведен пример возврата только «записей, которые никак не ограничивают воспроизведение, на что указывает наличие элемента <yt:state>»:

entry[not(app:control/yt:state)]

Я пропустил часть (title,media:group), потому что вам нужны теги по умолчанию, а не ограниченный набор.

По какой-то причине параметр fields не всегда отправляется. Это может быть связано с тем, что, как сказано в документах, "параметр fields в настоящее время используется для экспериментальных только особенности». Но в любом случае вы можете просто получить все и отфильтровать control самостоятельно.

person abarnert    schedule 27.12.2012

Общий ответ заключается в использовании параметра format=5 при выполнении поиска: https://developers.google.com/youtube/2.0/reference#formatsp

Это позволит отфильтровать видео из результатов поиска, в которых полностью отключено встраивание.

При этом есть видео, в которых включено встраивание, но они воспроизводятся только в определенных регионах или при встраивании в определенные домены.

Чтобы справиться с региональными ограничениями, вы должны установить для параметра restriction= значение, подходящее для вашего варианта использования, как описано на странице https://developers.google.com/youtube/2.0/reference#restrictionsp

Однако невозможно исключить видео из результатов поиска с ограничениями на встраивание на уровне домена.

В этом сообщении блога содержится более общая информация о встроенных ограничениях воспроизведения: http://apiblog.youtube.com/2011/12/understanding-playback-restrictions.html

person Jeff Posnick    schedule 28.12.2012