Скачиваем Youtube впечатления без повторной авторизации - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть этот фрагмент кода, чтобы извлечь некоторые метрики о моем канале YouTube и создать из них pandas dataframe.

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
import json

SCOPES = ['https://www.googleapis.com/auth/yt-analytics.readonly']
API_SERVICE_NAME = 'youtubeAnalytics'
API_VERSION = 'v2'
CLIENT_SECRETS_FILE = 'client_secrets.json'

def get_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 execute_api_request(client_library_function, **kwargs):
  response = client_library_function(
    **kwargs
  ).execute()
  with open('data.json', 'w') as fp:
    json.dump(response, fp)

if __name__ == '__main__':
  # Disable OAuthlib's HTTPs verification when running locally.
  # *DO NOT* leave this option enabled when running in production.
  os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'


  youtubeAnalytics = get_service()
  execute_api_request(
      youtubeAnalytics.reports().query,
      ids='channel==MINE',
      startDate='2014-01-01',
      endDate='2019-02-26',
      metrics='averageViewDuration,views,likes,dislikes,subscribersGained,subscribersLost',
      dimensions='day',
      sort='day',
      filters = 'country==US'
  )

## Now, convert the json to dataframe

import json
import pandas as pd

with open('data.json') as json_data:
    d = json.load(json_data)
colnames = [d['columnHeaders'][i]['name'] for i in range(0,len(d['columnHeaders']))]

Results = pd.DataFrame(d['rows'],columns  = colnames)
Results.to_csv("Youtube_data.csv")

При запуске этого кода открывается окно с просьбой войти в youtube изатем предоставьте мне код авторизации.Ввод этого кода авторизации завершает работу вышеуказанной программы на Python.Однако вам следует повторять этот процесс авторизации каждый раз, когда вы запускаете эту программу.

Есть ли способ обойти эту повторную авторизацию, чтобы этот процесс можно было автоматизировать?

1 Ответ

0 голосов
/ 18 апреля 2019

Вам нужно использовать класс oauth2client.file.Storage для хранения и извлечения объекта учетных данных, как (плохо) объяснено здесь: https://developers.google.com/api-client-library/python/guide/aaa_oauth

Вам нужно будет изменить вашу функцию get_serviceс чем-то вроде этого:

from oauth2client import client, file

def get_service():
  flow = client.flow_from_clientsecrets(CLIENT_SECRETS_FILE, SCOPES)
  storage = file.Storage(API_SERVICE_NAME + '.dat')
  credentials = storage.get()

  http = credentials.authorize(http=httplib2.Http())

  service = build(API_SERVICE_NAME, API_VERSION, http=http)

  return service

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...