Ответ 1
Грег,
Если вы уже используете библиотеку gdata-python-client, это относительно легко сделать, если вы являетесь единственным пользователем, которому будет разрешено ваше приложение.
Общие механизмы были подробно описаны в сообщении в блоге в сентябре 2011 года, но я опишу их здесь для полноты.
Часть 1. Перейдите в консоль API и запустите новый проект.
Часть 2. Из проекта перейдите в раздел "Услуги" и включите "API Google Analytics"
Часть 3. Из проекта перейдите к "Доступ к API" и нажмите "Создать идентификатор клиента OAuth 2.0..." (вам нужно указать имя продукта, хотя значение вы предоставляете не имеет значения). При запросе типа приложения выберите "Установленное приложение", а затем "Создать идентификатор клиента". Поскольку вы будете единственным пользователем, вам понадобится только один токен обновления, и вы можете получить это, авторизуясь из настольного приложения за один раз.
Часть 4. Получите идентификатор клиента и клиентский секрет из консоли API, а затем создайте пустой токен:
import gdata.gauth
CLIENT_ID = 'id-from-apis-console'
CLIENT_SECRET = 'secret-from-apis-console'
SCOPE = 'https://www.google.com/analytics/feeds/' # Default scope for analytics
token = gdata.gauth.OAuth2Token(
client_id=CLIENT_ID,
client_secret=CLIENT_SECRET,
scope=SCOPE,
user_agent='application-name-goes-here')
Я получил область из Часто задаваемых вопросов GData, хотя я не уверен, что это правильно.
Часть 5. Используйте маркер для создания URL-адреса авторизации для посещения:
url = token.generate_authorize_url(redirect_uri='urn:ietf:wg:oauth:2.0:oob')
Поскольку ваше приложение является "Установленным приложением", ваш URI перенаправления является значением по умолчанию 'urn:ietf:wg:oauth:2.0:oob'
. (Также обратите внимание: сообщение в блоге имело опечатку и использовало аргумент ключевого слова redirect_url
.)
Часть 6. Посетите URL-адрес и авторизуйте свое приложение, чтобы делать запросы от имени вашей учетной записи. После авторизации вы будете перенаправлены на страницу с кодом на ней. Этот код будет использоваться для обмена токеном доступа и долгоживущим токеном обновления. Код имеет срок службы 10 минут, а токен доступа - один час. Токен обновления позволит вам получить новые токены доступа для подписи запросов на неограниченном времени (или до тех пор, пока вы не аннулируете разрешение вашей учетной записи).
Часть 7. Используйте код для получения токена доступа:
code = 'random-string-from-redirected-page'
token.get_access_token(code) # This returns the token, but also changes the state
Это опять немного отличается от сообщения в блоге, потому что мы используем установленное приложение.
Часть 8. Теперь с помощью токена вы можете сделать все запросы, которые хотите сделать клиенту аналитики:
import gdata.analytics.client
client = gdata.analytics.client.AnalyticsClient()
token.authorize(client)
Это большие деньги прямо здесь. Когда токен доступа истекает, запросы API, подписанные с этим токеном, отклоняются. Однако, авторизуя клиента, как указано выше, когда указанные запросы терпят неудачу, token
пытается использовать токен обновления для получения нового токена доступа. Если он успешно получит новый токен доступа, клиент повторно отправит исходный запрос API, подписанный с новым токеном доступа.
Я ничего не знаю об API Google Analytics, поэтому я не буду предоставлять более подробную информацию.
Использование в будущем Примечание 1: сохранение информации для будущего использования. Вы можете повторно использовать это из разных мест и после этого использовать очень легко. Существуют методы, называемые token_to_blob
и token_from_blob
, предоставляемые библиотекой, которые позволяют превратить токен в строку и преобразовать из строки:
saved_blob_string = gdata.gauth.token_to_blob(token)
Как только вы это сделаете, вы можете сохранить строку в файле и убить ваш запущенный процесс Python. Если вы хотите снова использовать его:
saved_blob_string = retrieve_string_from_file() # You'll need to implement this
token = gdata.gauth.token_from_blob(saved_blob_string)
Будущее использование Примечание 2. Этот токен будет использоваться для авторизации клиента и выполнения всех ваших магов снова и снова, если у вас есть токен обновления. Если по какой-то причине вы захотите снова получить токен доступа, не вызвав token.generate_authorize_url
, вам нужно вручную установить это на объекте:
token.redirect_uri = 'urn:ietf:wg:oauth:2.0:oob'
Будущее использование Примечание 3. Кроме того, если вы потеряете токен обновления и хотите получить еще один, не переходя в браузер, отменить, вы можете использовать параметр approval_prompt
, чтобы получить новый токен обновления, посетив url, сгенерированный:
url = token.generate_authorize_url(
redirect_uri='urn:ietf:wg:oauth:2.0:oob',
approval_prompt='force')