【问题标题】:Adding youtube video to playlist using YouTube Data API v3 in Python在 Python 中使用 YouTube Data API v3 将 youtube 视频添加到播放列表
【发布时间】:2014-02-12 04:03:52
【问题描述】:

我想创建一个脚本,使用 YouTube Data API v3 将 youtube 视频添加到我的频道中的播放列表中。我在this question 的帮助下尝试过,并在Here 给出的示例代码的帮助下编写了这段代码

    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")

但我遇到了我无法弄清楚的错误

    alok@alok:~/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'

谁能告诉我哪里错了?

【问题讨论】:

    标签: python youtube-api


    【解决方案1】:

    代码是正确的,只有拼写错误。 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")
    

    【讨论】:

      【解决方案2】:

      方法是“playlistItems()”(带有“s”)

      (我假设您的缩进只是错误的问题,而不是您的实际代码)

      【讨论】:

        猜你喜欢
        • 2014-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-09
        • 2022-01-08
        • 2019-01-26
        • 2018-06-11
        • 2014-01-06
        相关资源
        最近更新 更多