问题描述
我正在尝试使用python获取受欢迎的YouTube视频数据。虽然我可以成功下载数据,但是我无法将其存储或以csv格式保存。这是我使用的代码:
I am trying to get popular YouTube videos data using python. While I can successfully download the data, I cannot store it or save it in csv format. Here is the code I used:
# -*- coding: utf-8 -*-
import os
import google.oauth2.credentials
import google_auth_oauthlib.flow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from google_auth_oauthlib.flow import InstalledAppFlow
CLIENT_SECRETS_FILE = "client_secret.json"
SCOPES = ['https://www.googleapis.com/auth/youtube.force-ssl']
API_SERVICE_NAME = 'youtube'
API_VERSION = 'v3'
def get_authenticated_service():
flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPES)
credentials = flow.run_console()
return build(API_SERVICE_NAME, API_VERSION, credentials = credentials)
def print_response(response):
print(response)
def build_resource(properties):
resource = {}
for p in properties:
prop_array = p.split('.')
ref = resource
for pa in range(0, len(prop_array)):
is_array = False
key = prop_array[pa]
# For properties that have array values, convert a name like
# "snippet.tags[]" to snippet.tags, and set a flag to handle
# the value as an array.
if key[-2:] == '[]':
key = key[0:len(key)-2:]
is_array = True
if pa == (len(prop_array) - 1):
# Leave properties without values out of inserted resource.
if properties[p]:
if is_array:
ref[key] = properties[p].split(',')
else:
ref[key] = properties[p]
elif key not in ref:
# For example, the property is "snippet.title", but the resource does
# not yet have a "snippet" object. Create the snippet object here.
# Setting "ref = ref[key]" means that in the next time through the
# "for pa in range ..." loop, we will be setting a property in the
# resource's "snippet" object.
ref[key] = {}
ref = ref[key]
else:
# For example, the property is "snippet.description", and the resource
# already has a "snippet" object.
ref = ref[key]
return resource
# Remove keyword arguments that are not set
def remove_empty_kwargs(**kwargs):
good_kwargs = {}
if kwargs is not None:
for key, value in kwargs.iteritems():
if value:
good_kwargs[key] = value
return good_kwargs
def videos_list_most_popular(client, **kwargs):
# See full sample for function
kwargs = remove_empty_kwargs(**kwargs)
response = client.videos().list(
**kwargs
).execute()
return print_response(response)
if __name__ == '__main__':
# When running locally, disable OAuthlib's HTTPs verification. When
# running in production *do not* leave this option enabled.
os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'
client = get_authenticated_service()
videos_list_most_popular(client,
part='snippet,contentDetails,statistics',
chart='mostPopular',
regionCode='US',
videoCategoryId='')
如何将结果保存为csv格式?我尝试了以下代码,但遇到错误:
How do I save the result in csv format? I tried the following code but got an error:
NameError:未定义名称'response'
NameError: name 'response' is not defined
推荐答案
NameError表示变量 response
不在您运行它的上下文中。我不知道该行在代码中的位置,但是您调用了 videos_list_most_popular
函数,该函数不会返回任何数据。
NameError means that the variable response
isn't in the context where you are running it. I don't know where you put that line in the code, but you call the videos_list_most_popular
function which will not return any data.
videos_list_most_popular
返回 print_response
函数的结果。但是由于该函数仅输出响应,并且实际上不返回任何内容,因此它将返回 None
,然后返回执行 videos_list_most_popular 结果将为None。
The
videos_list_most_popular
returns the result of the print_response
function. But since that function only prints the response, and not actually returns anything it will return None
and then down below where you execute videos_list_most_popular
the result will be None.
它也将消失,因为您没有将该函数的结果分配给任何东西(如下所示:
响应= videos_list_most_popular(...)
)。
And it will also dissappear because you don't assign the result of that function to anything (which would look like:
response = videos_list_most_popular(...)
).
您需要更改
videos_list_most_popular
,因此它返回 response
,然后像上面一样分配返回值。然后,您可以执行您编写的行。
You will need to change
videos_list_most_popular
so it returns response
and then assign that return value like I did above. Then you can execute the line you wrote.
这篇关于Youtube API上最受欢迎的youtube视频的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!