Как получить access token к StackExchange API?

В StackExchange API некоторые методы требуют аутентификации, например, получить мой аккаунт - /me (документация - https://api.stackexchange.com/docs/me).

Каждому такому методу нужен access_token:

>>> import requests
>>> response = requests.get('https://api.stackexchange.com/2.3/me?site=stackoverflow')
>>> response.text
{
  "error_id": 401,
  "error_message": "This method requires an access_token",
  "error_name": "access_token_required"
}

- пишет, что "This method requires an access_token" - нужен access token.

Только вот вопрос: как его получить?


Ответы (1 шт):

Автор решения: wchistow

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

  1. создайте приложение:

    введите сюда описание изображения

    Обратите внимание:

    • в поле OAuth Domain нужно ввести именно stackexchange.com;
    • включите Enable Client Side OAuth Flow.
  2. перейдите на страницу только что созданного приложения из списка ваших приложений и скопируйте поле Client Id (ID вашего приложения):

    введите сюда описание изображения

  3. перейдите по ссылке https://stackexchange.com/oauth/dialog?client_id=<ID ПРИЛОЖЕНИЯ>&redirect_uri=https://stackexchange.com/oauth/login_success/, вставив скопированный ID приложения.

  4. нажмите Approve

    введите сюда описание изображения

  5. теперь адрес примет вид https://stackexchange.com/oauth/login_success/#access_token=<ACCESS TOKEN>&expires=86400

  6. скопируйте access token из адреса, теперь он ваш!


А теперь, как его использовать:

  1. скопируйте ключ со страницы вашего приложения:

    введите сюда описание изображения

  2. в API нужно передавать и ключ, и access token, пример:

    >>> import requests
    >>> response = requests.get('https://api.stackexchange.com/2.3/me?site=stackoverflow&access_token=<ACCESS TOKEN>&key=<КЛЮЧ>')
    >>> response.text
    {
      "items": [
        {
          ...
          "display_name": "wchistow"  # это действительно я!
        }
      ],
      "has_more": false,
      "quota_max": 10000,
      "quota_remaining": 9999
    }
    

PS: полученный по этой инструкции токен доступа не имеет разрешения на запись, т. е. с его помощью нельзя отправлять POST-запросы (например, написать комментарий). Чтобы получить разрешение на это, нужно

  1. при правке приложения в поле Stack Apps Post начните вводить заголовок вопроса о вашем приложении на сайте StackApps, при вводе будут предлагаться подходящие варианты - просто щёлкните на нужном, и поле заполнится, при этом, вопрос должен иметь метки либо app, либо script. Важно: этот вопрос должен быть именно вашим, но можно создать просто что-то вроде https://stackapps.com/q/10459/116701.
  2. при получении токена в адрес нужно добавить &scope=write_access.
→ Ссылка