Доступ 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), я скопировал и вставил в браузер на моей машине, чтобы завершить поток аутентификации.