2014-01-22 204 views
1

我想創建一個腳本,使用YouTube Data API v3將YouTube視頻添加到我的頻道的播放列表中。我試着用的this question的幫助和寫了這個代碼的給定Here使用YouTube中的YouTube Data API v3將youtube視頻添加到播放列表

import httplib2 
    import os 
    import sys 

    from apiclient.discovery import build 
    from apiclient.errors import HttpError 
    from oauth2client.client import flow_from_clientsecrets 
    from oauth2client.file import Storage 
    from oauth2client.tools import argparser, run 


    # The CLIENT_SECRETS_FILE variable specifies the name of a file that contains 
    # the OAuth 2.0 information for this application, including its client_id and 
    # client_secret. You can acquire an OAuth 2.0 client ID and client secret from 
    # the Google Cloud Console at 
    # https://cloud.google.com/console. 
    # Please ensure that you have enabled the YouTube Data API for your project. 
    # For more information about using OAuth2 to access the YouTube Data API, see: 
    # https://developers.google.com/youtube/v3/guides/authentication 
    # For more information about the client_secrets.json file format, see: 
    # https://developers.google.com/api-client-library/python/guide/aaa_client_secrets 

    CLIENT_SECRETS_FILE = "client_secrets.json" 

    # This variable defines a message to display if the CLIENT_SECRETS_FILE is 
    # missing. 
    MISSING_CLIENT_SECRETS_MESSAGE = """ 
    WARNING: Please configure OAuth 2.0 

    To make this sample run you will need to populate the client_secrets.json file 
    found at: 

    %s 

    with information from the Cloud Console 
    https://cloud.google.com/console 

    For more information about the client_secrets.json file format, please visit: 
    https://developers.google.com/api-client-library/python/guide/aaa_client_secrets 
    """ % os.path.abspath(os.path.join(os.path.dirname(__file__), 
           CLIENT_SECRETS_FILE)) 

    # This OAuth 2.0 access scope allows for full read/write access to the 
    # authenticated user's account. 
    YOUTUBE_SCOPE = "https://www.googleapis.com/auth/youtube" 
    YOUTUBE_API_SERVICE_NAME = "youtube" 
    YOUTUBE_API_VERSION = "v3" 


    def get_authenticated_service(): 
     flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE, scope=YOUTUBE_SCOPE, 
     message=MISSING_CLIENT_SECRETS_MESSAGE) 

     storage = Storage("%s-oauth2.json" % sys.argv[0]) 
     credentials = storage.get() 

     if credentials is None or credentials.invalid: 
      credentials = run(flow, storage) 

     return build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, 
      http=credentials.authorize(httplib2.Http())) 


    def add_video_to_playlist(youtube,videoID,playlistID): 
     add_video_request=youtube.playlistItem().insert(
     part="snippet", 
     body={ 
      'snippet': { 
       'playlistId': playlistID, 
       'resourceId': { 
         'kind': 'youtube#video', 
        'videoId': videoID 
       } 
      #'position': 0 
      } 
    } 
).execute() 

    if __name__ == '__main__': 
    youtube = get_authenticated_service() 
     add_video_to_playlist(youtube,"yszl2oxi8IY","PL2JW1S4IMwYubm06iDKfDsmWVB-J8funQ") 

,但我得到的錯誤示例代碼的幫助,我無法弄清楚

[email protected]:~/exp/python/youtube$ python playlist.py 
    Traceback (most recent call last): 
     File "playlist.py", line 83, in <module> 
     add_video_to_playlist(youtube,"yszl2oxi8IY","PL2JW1S4IMwYubm06iDKfDsmWVB-J8funQ") 
     File "playlist.py", line 67, in add_video_to_playlist 
     add_video_request=youtube.playlistItem().insert(
    AttributeError: 'Resource' object has no attribute 'playlistItem' 

任何人都可以告訴我在哪裏我錯了?

回答

1

的方法是「playlistItems()」(以「S」)

(我假設你的縮進只是錯在這裏的問題,而不是在你的實際代碼)

+0

謝謝,這是拼寫錯誤:) – user3214243

0

代碼是正確的,只有拼寫錯誤。 playlistItem()應該playlistItems()

正確的代碼是:

import httplib2 
    import os 
    import sys 

    from apiclient.discovery import build 
    from apiclient.errors import HttpError 
    from oauth2client.client import flow_from_clientsecrets 
    from oauth2client.file import Storage 
    from oauth2client.tools import argparser, run 


    # The CLIENT_SECRETS_FILE variable specifies the name of a file that contains 
    # the OAuth 2.0 information for this application, including its client_id and 
    # client_secret. You can acquire an OAuth 2.0 client ID and client secret from 
    # the Google Cloud Console at 
    # https://cloud.google.com/console. 
    # Please ensure that you have enabled the YouTube Data API for your project. 
    # For more information about using OAuth2 to access the YouTube Data API, see: 
    # https://developers.google.com/youtube/v3/guides/authentication 
    # For more information about the client_secrets.json file format, see: 
    # https://developers.google.com/api-client-library/python/guide/aaa_client_secrets 

    CLIENT_SECRETS_FILE = "client_secrets.json" 

    # This variable defines a message to display if the CLIENT_SECRETS_FILE is 
    # missing. 
    MISSING_CLIENT_SECRETS_MESSAGE = """ 
    WARNING: Please configure OAuth 2.0 

    To make this sample run you will need to populate the client_secrets.json file 
    found at: 

    %s 

    with information from the Cloud Console 
    https://cloud.google.com/console 

    For more information about the client_secrets.json file format, please visit: 
    https://developers.google.com/api-client-library/python/guide/aaa_client_secrets 
    """ % os.path.abspath(os.path.join(os.path.dirname(__file__), 
           CLIENT_SECRETS_FILE)) 

    # This OAuth 2.0 access scope allows for full read/write access to the 
    # authenticated user's account. 
    YOUTUBE_SCOPE = "https://www.googleapis.com/auth/youtube" 
    YOUTUBE_API_SERVICE_NAME = "youtube" 
    YOUTUBE_API_VERSION = "v3" 


    def get_authenticated_service(): 
     flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE, scope=YOUTUBE_SCOPE, 
     message=MISSING_CLIENT_SECRETS_MESSAGE) 

     storage = Storage("%s-oauth2.json" % sys.argv[0]) 
     credentials = storage.get() 

     if credentials is None or credentials.invalid: 
      credentials = run(flow, storage) 

     return build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, 
      http=credentials.authorize(httplib2.Http())) 


    def add_video_to_playlist(youtube,videoID,playlistID): 
     add_video_request=youtube.playlistItem().insert(
     part="snippet", 
     body={ 
      'snippet': { 
       'playlistId': playlistID, 
       'resourceId': { 
         'kind': 'youtube#video', 
        'videoId': videoID 
       } 
      #'position': 0 
      } 
    } 
    ).execute() 

    if __name__ == '__main__': 
    youtube = get_authenticated_service() 
     add_video_to_playlist(youtube,"yszl2oxi8IY","PL2JW1S4IMwYubm06iDKfDsmWVB-J8funQ") 
相關問題