尝试将多个视频从.csv文件添加到YouTube播放列表



我正在尝试使用以下youtube-api.将存储在.csv文件中的视频 ID 列表添加到播放列表中

我已经添加了单个视频,但是我正在努力导入存储在CSV文件中的视频ID列表。

因此,在此代码段中,我想将视频ID替换为指向CSV文件的链接:

def add_video_to_playlist(youtube, videoID, playlistID):
    add_video_request = youtube.playlistItems().insert(
    part = "snippet",
    body = {
             'snippet': {
              'playlistId': 'PLpB9AHGzZKOugx13Kwkj47mro_PftxSE9',
              'resourceId': {
                  'kind': 'youtube#video',
                  'videoId': 'tcJ4eVVK640'`

据我所知,这是完整的代码:

import httplib2
import os
import sys
import csv
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 containsthe 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_ID = ''
CLIENT_SECRETS_FILE = ""
# 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.playlistItems().insert(
        part = "snippet",
               body = {
                   'snippet': {
                       'playlistId': 'PlayistId',
                       'resourceId': {
                           'kind': 'youtube#video',
                           '     videoId': 'VideoId'
                       }
                       #'position': 0
                   }
               }
    ).execute()
if __name__ == '__main__':
    youtube = get_authenticated_service()
    add_video_to_playlist(youtube, "yszl2oxi8IY", "PL2JW1S4IMwYubm06iDKfDsmWVB-    J8funQ")

如果您添加一个视频的方法有效,则应保持原样。无需在这方面重写它。相反,您基本上将遍历videoID列表并多次调用add_video_to_playlist

为此,基本概念是:

 for video_id in list_of_video_ids:
      add_video_to_playlist(youtube,video_id,playlistID)

从那里,您可以向后工作并通过循环访问 csv 文件的行来构建list_of_video_ids

 import csv
 with open('path/to/file.csv', 'w') as file:
      reader = csv.reader(file)
      list_of_video_ids = []
      for row in reader:
           list_of_video_ids.append(row[0]) # assuming your video IDs
                                            # are in the first column
                                            # of each row
 for video_id in list_of_video_ids:
      ... # so on and so forth

csv.reader()创建一个读取器对象。通过循环访问此对象,您可以按顺序访问文件的每一行,并使用编号索引抓取每一列。

您也可以使用 csv.DictReader() .遍历此内容会将行创建为字典,文件第一行中的值是这些列的键。因此,如果列中的第一个单元格标题为 video_id ,您将使用 row['video_id'] 访问该单元格。

如果您正在寻找更具体的内容,请告诉我。这是一个一般概述。

这段代码对我有用:

#!/usr/bin/python
import argparse
import httplib2
from oauth2client import tools
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_flow

# 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 Developers Console at
# https://console.developers.google.com/.
# 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 OAuth 2.0 access scope allows for full read/write access to the
# authenticated user's account.
YOUTUBE_READ_WRITE_SCOPE = "https://www.googleapis.com/auth/youtube"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
# 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 Developers Console
https://console.developers.google.com/
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))

def get_authenticated_service(flags):
    flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE,
                                   scope=YOUTUBE_READ_WRITE_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(flow, storage, flags)
    return build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,
                 http=credentials.authorize(httplib2.Http()))

def list_playlist_items(youtube, playlistID):
    playlistitems_list_request = youtube.playlistItems().list(
        playlistId=playlistID,
        part="snippet",
        maxResults=50
    )
    while playlistitems_list_request:
        playlistitems_list_response = playlistitems_list_request.execute()
        # Print information about each video.
        for playlist_item in playlistitems_list_response["items"]:
            title = playlist_item["snippet"]["title"]
            video_id = playlist_item["snippet"]["resourceId"]["videoId"]
            print "%s (%s)" % (title, video_id)
        playlistitems_list_request = youtube.playlistItems().list_next(
            playlistitems_list_request, playlistitems_list_response)

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

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter,
        parents=[tools.argparser])
    flags = parser.parse_args()
    youtube = get_authenticated_service(flags)
    playlistID = "YOUR PLAYLIST ID"
    videoIDs = [
        "-xhJx6UR4Vw", "04mfKJWDSzI", "MORE VIDEO IDS"
    ]
    for videoID in videoIDs:
        add_video_to_playlist(youtube, videoID, playlistID)
    list_playlist_items(youtube, playlistID)

请注意,您需要在 Google 开发者控制台中创建一个项目,启用 YouTube 数据 API,添加新凭据(类型为 OAuth 2.0 客户端 ID --> Web 应用程序,授权重定向网址为 http://localhost:8080/添加),下载 client_secrets.json 文件并将其放在同一目录中。

祝你好运:)

相关内容

  • 没有找到相关文章

最新更新