我正在尝试使用以下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 文件并将其放在同一目录中。
祝你好运:)