尝试从.csv文件向youtube播放列表添加多个视频

时间:2015-02-02 02:21:08

标签: python csv youtube youtube-api

我尝试使用.csv

youtube-api.文件中存储的视频ID列表添加到播放列表

我已经添加了一个视频,但我正在努力导入存储在csv中的视频列表。

因此,在此代码段中,我想用一个csv文件的链接替换videoid

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

2 个答案:

答案 0 :(得分:0)

如果您添加一个视频的方法有效,您应该保持原样。无需在前面重写它。相反,您基本上会遍历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()。对此进行迭代会创建行作为dicts,文件第一行中的值是这些列的键。因此,如果列中的第一个单元格标题为video_id,则可以使用row['video_id']访问单元格。

如果您正在寻找更具体的内容,请与我们联系。这是概述。

答案 1 :(得分:0)

此代码对我有用:

#!/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 Developer Console中创建项目,启用YouTube数据API,添加新凭据(类型为OAuth 2.0客户端ID - > Web应用程序,授权重定向网址为{ {3}}已添加),下载client_secrets.json文件并将其放在同一目录中。

祝你好运:)