Попытка получить доступ к данным Youtube учетной записи через API отчетности YouTube приводит к HttpError 403: «Вызывающий не имеет разрешения» - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь использовать API отчетности YouTube для доступа к данным моей компании и анализа их.Однако, когда я запускаю пример сценария, предоставленный Google, я получаю следующее сообщение об ошибке:

HttpError: <HttpError 403 when requesting https://youtubereporting.googleapis.com/v1/media/%20?alt=json returned "The caller does not have permission">

Я создал идентификатор клиента Oauth 2.0, загрузил файл секретов клиента и указал на него сценарий.,Меня также перенаправляют на страницу авторизации Google, где я вхожу в учетную запись Youtube, с которой пытаюсь получить данные и авторизовать скрипт.Для справки, я использую область действия:

https://www.googleapis.com/auth/yt-analytics-monetary.readonly

Я впервые пытаюсь использовать API Google, так что я уверен, что что-то упустил, но я не могу понять этоиз.Если бы кто-нибудь мог предложить какое-то руководство, я бы очень признателен

Редактировать: я включил код, который я использую из примера скрипта Google ниже.

import urllib
import json
import os
from io import FileIO

import google.oauth2.credentials
import google_auth_oauthlib.flow
from oauth2client import client
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.http import MediaIoBaseDownload

def get_service():
    flow = InstalledAppFlow.from_client_secrets_file(client_secrets_file=client_secrets, scopes=scope)
    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()

    print(response)

scope = ['https://www.googleapis.com/auth/yt-analytics-monetary.readonly']
api_service_name = 'youtubereporting'
api_version = 'v1'
client_secrets = 'client_secret_397754690264-ba1rtbpi731qkveqb11361q4ggui2bmd.apps.googleusercontent.com.json'

youtube_analytics = get_service()
youtube_analytics.jobs().create(body={'reportTypeId':'channel_combined_a2', 'name':'test_job'}).execute()

# this lists all the reports that are generated after you've created a job
# so it might take a while before you're able to get list a report
youtube_analytics.jobs().reports().list(jobId = job_id).execute()

# this uses a reportId from one of the reports that are listed above
report_url = youtube_analytics.jobs().reports().get(jobId = job_id, reportId = 'REPORTIDGOESHERE').execute()['downloadUrl']

request = youtube_analytics.media().download(resourceName = " ")
request.uri = report_url

fh = FileIO('yt_test.txt', mode='wb')
downloader = MediaIoBaseDownload(fh, request, chunksize=-1)

done = False
while done is False:
    status, done = downloader.next_chunk()
    if status:
        print('Download %d%%.' % int(status.progress() * 100))
print('Download Complete!')

Редактировать # 2: Просто хотел обновить это решение, которое я нашел длялюбой, кто может наткнуться на это.

Проблема заключалась в том, что я не устанавливал URI запроса с URL-адресом отчета, который создается при создании задания, которое, в свою очередь, создает отчет.Я предполагал, что это был собственный отчет, но на самом деле это всего лишь метод загрузки указанных отчетов.Итак, я пошел дальше и создал работу, которая создала отчет.Затем я взял «downloadUrl» из метаданных отчетов, установил URI запроса в качестве URL-адреса и запустил загрузчик как обычно.Я обновил код выше, чтобы отразить это.

1 Ответ

0 голосов
/ 30 октября 2018

Добавление этого, чтобы я мог пометить его как ответивший.Мое решение ниже:

Проблема заключалась в том, что я не устанавливал URI запроса с URL-адресом отчета, который создается при создании задания, которое, в свою очередь, создает отчет.Я предполагал, что это был собственный отчет, но на самом деле это всего лишь метод загрузки указанных отчетов.Итак, я пошел дальше и создал работу, которая создала отчет.Затем я взял «downloadUrl» из метаданных отчетов, установил URI запроса в качестве URL-адреса и запустил загрузчик как обычно.Я обновил код выше, чтобы отразить это.

...