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