На запрос Google Analytycis API выдается логин - PullRequest
0 голосов
/ 06 сентября 2018

Я получаю данные из Google Analytics API v3

https://www.googleapis.com/analytics/v3/data/ga?ids=ga:181335694&metrics=ga:sessions&start-date=7daysAgo&end-date=today

После запуска браузера выдает ошибку

{
   "error":{
      "errors":[
         {
            "domain":"global",
            "reason":"required",
            "message":"Login Required",
            "locationType":"header",
            "location":"Authorization"
         }
      ],
      "code":401,
      "message":"Login Required"
   }
}

Как устранить эту ошибку?

Как только я запускаю код Python, я получаю API Google Analytics, но я запускаю в браузере, выдает ошибку для входа в систему, как ее решить.

1 Ответ

0 голосов
/ 06 сентября 2018

Существует два типа данных, когда мы говорим об API Google.

Публичные данные, которые никому не принадлежат и на которые каждый может посмотреть Личные данные, которыми владеет пользователь, и вы должны иметь разрешение на доступ к ним.

«Требуется вход в систему»,

Точно означает, что вы должны пройти аутентификацию для доступа к данным, к которым вы пытаетесь получить доступ. Вам нужно разрешение владельца этих данных. Вы не можете просто взять эту строку и запустить ее в браузере, для этого вам нужен токен доступа. Вы получаете токен доступа из потока аутентификации.

Поскольку вы упомянули Python, вы должны следовать руководству по hello analytics , которое покажет вам, как настроить ваш проект и аутентифицировать ваш скрипт, чтобы вы могли получить доступ к нужным вам данным.

import argparse

from apiclient.discovery import build
import httplib2
from oauth2client import client
from oauth2client import file
from oauth2client import tools


def get_service(api_name, api_version, scope, client_secrets_path):
  """Get a service that communicates to a Google API.

  Args:
    api_name: string The name of the api to connect to.
    api_version: string The api version to connect to.
    scope: A list of strings representing the auth scopes to authorize for the
      connection.
    client_secrets_path: string A path to a valid client secrets file.

  Returns:
    A service that is connected to the specified API.
  """
  # Parse command-line arguments.
  parser = argparse.ArgumentParser(
      formatter_class=argparse.RawDescriptionHelpFormatter,
      parents=[tools.argparser])
  flags = parser.parse_args([])

  # Set up a Flow object to be used if we need to authenticate.
  flow = client.flow_from_clientsecrets(
      client_secrets_path, scope=scope,
      message=tools.message_if_missing(client_secrets_path))

  # Prepare credentials, and authorize HTTP object with them.
  # If the credentials don't exist or are invalid run through the native client
  # flow. The Storage object will ensure that if successful the good
  # credentials will get written back to a file.
  storage = file.Storage(api_name + '.dat')
  credentials = storage.get()
  if credentials is None or credentials.invalid:
    credentials = tools.run_flow(flow, storage, flags)
  http = credentials.authorize(http=httplib2.Http())

  # Build the service object.
  service = build(api_name, api_version, http=http)

  return service


def get_first_profile_id(service):
  # Use the Analytics service object to get the first profile id.

  # Get a list of all Google Analytics accounts for the authorized user.
  accounts = service.management().accounts().list().execute()

  if accounts.get('items'):
    # Get the first Google Analytics account.
    account = accounts.get('items')[0].get('id')

    # Get a list of all the properties for the first account.
    properties = service.management().webproperties().list(
        accountId=account).execute()

    if properties.get('items'):
      # Get the first property id.
      property = properties.get('items')[0].get('id')

      # Get a list of all views (profiles) for the first property.
      profiles = service.management().profiles().list(
          accountId=account,
          webPropertyId=property).execute()

      if profiles.get('items'):
        # return the first view (profile) id.
        return profiles.get('items')[0].get('id')

  return None


def get_results(service, profile_id):
  # Use the Analytics Service Object to query the Core Reporting API
  # for the number of sessions in the past seven days.
  return service.data().ga().get(
      ids='ga:' + profile_id,
      start_date='7daysAgo',
      end_date='today',
      metrics='ga:sessions').execute()


def print_results(results):
  # Print data nicely for the user.
  if results:
    print 'View (Profile): %s' % results.get('profileInfo').get('profileName')
    print 'Total Sessions: %s' % results.get('rows')[0][0]

  else:
    print 'No results found'


def main():
  # Define the auth scopes to request.
  scope = ['https://www.googleapis.com/auth/analytics.readonly']

  # Authenticate and construct service.
  service = get_service('analytics', 'v3', scope, 'client_secrets.json')
  profile = get_first_profile_id(service)
  print_results(get_results(service, profile))


if __name__ == '__main__':
  main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...