4

Pythonを使用してWebサービスを開発していますが、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
4

2 に答える 2

4

一般的な答えはformat=5、検索を実行するときにパラメータを使用することです:https ://developers.google.com/youtube/2.0/reference#formatsp

これにより、埋め込みが完全に無効になっている検索結果から動画が除外されます。

そうは言っても、埋め込みが有効になっているが、特定の地域で、または特定のドメインに埋め込まれている場合にのみ再生できるビデオがあります。

地域の制限を処理するには、 https://developers.google.com/youtube/2.0/reference#restrictionsprestriction=で説明されているように、パラメータをユースケースに適したものに設定する必要があります

ただし、ドメインレベルの埋め込み制限がある検索結果から動画を除外する方法はありません。

このブログ投稿には、埋め込まれた再生制限に関するより一般的な情報があります:http: //apiblog.youtube.com/2011/12/understanding-playback-restrictions.html

于 2012-12-28T16:44:29.543 に答える
1

私があなたの質問を理解しているなら、あなたは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'}

もちろん、これをより堅牢にする必要があります。<code> controlはNoneの場合もあれば、stateタグがない場合もあります。しかし、あなたはその考えを理解します。

の有無や特定の値を直接検索することはできないと思いますがstate、パラメータを使用してfields、結果を取得する前に結果をポストフィルタリングすることができます。<yt:state>ドキュメントには、実際には「要素の存在によって示される、再生を制限しないエントリ」のみを返す例が示されています。

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

(title,media:group)限定されたセットではなく、デフォルトのタグが必要なため、この部分は省略しました。

何らかの理由で、fieldsパラメータが常に送信されるとは限りません。これは、ドキュメントに記載されているように、「fieldsパラメータは現在実験的な機能にのみ使用されている」ためである可能性があります。しかしとにかく、すべてを取得してcontrol自分でフィルタリングすることができます。

于 2012-12-27T19:29:03.717 に答える