2014-01-22 209 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") 
相关问题