Доступ API Google Analytics без локального браузера в python

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

Мой script работает отлично, когда я запускаю его на своей локальной машине для разработчиков (Mac). Когда я запускаю script, открывается мой браузер, и мне предлагается предоставить доступ к моим данным Google Analytics из приложения. Впоследствии я могу запустить script так часто, как хочу, и получить доступ к моим данным.

На моем сервере (Ubuntu, доступен только терминал) открывается браузер w3m, но я не могу получить доступ к своей учетной записи Google. Я могу выйти только w3m и убить программу с помощью Ctrl-C. Появляется сообщение об ошибке вроде:

Ваш браузер открыт для посещения:

https://accounts.google.com/o/oauth2/auth?scope=some_long_url&access_type=offline

Если ваш браузер находится на другом компьютере, выйдите из него и запустите его повторно приложение с параметром командной строки

- noauth_local_webserver

Однако, когда я запускаю свой script с параметром --noauth_local_webserver, я получаю те же результаты - w3m открывается, и я не могу аутентифицироваться.

Как я могу заставить --noauth_local_webserver работать? У меня есть другой способ аутентификации без локального браузера на одной машине?

Ответ 1

Когда вы используете FLAGS = gflags.FLAGS, вам действительно нужно передать аргументы командной строки на FLAGS (это может быть, возможно, тоже не сработало:)). См. здесь для ориентированного на Google Analytics примера того, как это сделать (код ниже, поскольку ссылки, как правило, уходят через некоторое время). Общая идея заключается в том, что аргументы argv передаются в переменную FLAGS, которая затем становится доступной для других модулей.

# From samples/analytics/sample_utils.py in the google-api-python-client source

def process_flags(argv):
  """Uses the command-line flags to set the logging level.

  Args:
    argv: List of command line arguments passed to the python script.
  """

  # Let the gflags module process the command-line arguments.
  try:
    argv = FLAGS(argv)
  except gflags.FlagsError, e:
    print '%s\nUsage: %s ARGS\n%s' % (e, argv[0], FLAGS)
    sys.exit(1)

  # Set the logging according to the command-line flag.
  logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level))

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

Ответ 2

вы также можете использовать GA в качестве сервисного API: https://developers.google.com/analytics/devguides/reporting/core/v3/quickstart/service-py это работает отлично. Просто remmeber для преобразования p12 в незашифрованный PEM файл с помощью openssl $ openssl pkcs12 -in client_secrets.p12 -nodes -nocerts > client_secrets.pem пароль импорта распечатывается при загрузке P12 из консоли разработчика Google.

Ответ 3

Я столкнулся с той же проблемой и сумел решить ее SSHing на моем сервере. Пример:

ssh -L 8080:127.0.0.1:8080 <server-name>

Затем я запустил script через SSH. Когда мне представили URL-адрес (https://accounts.google.com/o/oauth2/auth?scope=some_long_url&access_type=offline), я скопировал и вставил в браузер на моей машине, чтобы завершить поток аутентификации.