Most popular youtube videos from Youtube API

匿名 (未验证) 提交于 2019-12-03 01:06:02

问题:

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='') 

How do I save the result in csv format? I tried the following code but got an error:

Data = json.loads(str(response,'utf-8'))

NameError: name 'response' is not defined

回答1:

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.

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.

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(...)).

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.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!