Как получить oauth2-токен для API отчетов Google Analytics (метод REST) ​​в Python - PullRequest
0 голосов
/ 26 февраля 2019

Я хочу направить свой запрос API отчетности Google Analytics (код будет в AWS Lambda ) через шлюз, который принимает только конечную точку REST.Поскольку я не могу использовать метод пакета клиента при взаимодействии со шлюзом, мне нужно запросить API как конечную точку с полным REST.

В официальном документе говорится об этом ( Ссылка ):

Authorization: Bearer {oauth2-token}

GET https://www.googleapis.com/analytics/v3/data/ga
  ?ids=ga:12345
  &start-date=2008-10-01
  &end-date=2008-10-31
  &metrics=ga:sessions,ga:bounces

Я не знаю, чтобы создать токен oauth2 в Python.Я создал учетную запись службы и имею secretts_json, который включает в себя идентификатор клиента и секретный ключ.Затем работает метод клиентского пакета, указанный в этой ссылке .Но мне нужен только метод Rest!

Используя их, как я могу создать токен oauth2?

1 Ответ

0 голосов
/ 27 февраля 2019

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

Oauth2 в основном состоит из трех вызовов.Я могу дать вам HTTP-вызовы, я позволю вам работать с Python Google 3 Legged OAuth2 Flow

Аутентификация и авторизация

Первоевам нужно разрешение пользователя.Для этого вы строите ссылку на сервере авторизации.Это HTTP-запрос на получение, вы можете поместить его в обычное окно браузера, чтобы проверить его.

GET https://accounts.google.com/o/oauth2/auth?client_id={clientid}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/analytics.readonly&response_type=code

Примечание по перенаправлению URI.Если вы запускаете это на сервере или что-то еще, тогда используйте urn:ietf:wg:oauth:2.0:oob. По сути, он сообщает серверу, чтобы он возвращал код туда, откуда он пришел, если вы используете веб-сайт, вы можете указать URL-адрес страницы, которая будет обрабатываться.ответ.

Если пользователь примет вышеуказанное, у вас будет код авторизации.

Код обмена

Что вам нужно сделать дальшеобменяйте код авторизации, полученный в ответе выше, и запросите токен доступа и токен обновления.Это http post call

POST https://accounts.google.com/o/oauth2/token
code=4/X9lG6uWd8-MMJPElWggHZRzyFKtp.QubAT_P-GEwePvB8fYmgkJzntDnaiAI&client_id={ClientId}&client_secret={ClientSecret}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code

Параметр body должен быть таким, как я показал, разделенным символом &, а тип содержимого запроса: application/x-www-form-urlencoded

Response

{
"access_token" : "ya29.1.AADtN_VSBMC2Ga2lhxsTKjVQ_ROco8VbD6h01aj4PcKHLm6qvHbNtn-_BIzXMw",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "1/J-3zPA8XR1o_cXebV9sDKn_f5MTqaFhKFxH-3PUPiJ4"
}

Токен доступа можно использовать во всех ваших запросах к API, добавив либо токен носителя заголовка авторизации с токеном доступа, либо отправив access_token = в качестве параметра в ваших запросах.

Обновить токен доступа

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

POST https://accounts.google.com/o/oauth2/token
client_id={ClientId}&client_secret={ClientSecret}&refresh_token=1/ffYmfI0sjR54Ft9oupubLzrJhD1hZS5tWQcyAvNECCA&grant_type=refresh_token

ответ

{
"access_token" : "ya29.1.AADtN_XK16As2ZHlScqOxGtntIlevNcasMSPwGiE3pe5ANZfrmJTcsI3ZtAjv4sDrPDRnQ",
"token_type" : "Bearer",
"expires_in" : 3600
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...