Как получить 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 шт):
Так как я очень долго разбирался с этим, приведу здесь инструкцию, может быть кому-то поможет.
создайте приложение:
Обратите внимание:
- в поле OAuth Domain нужно ввести именно
stackexchange.com; - включите Enable Client Side OAuth Flow.
- в поле OAuth Domain нужно ввести именно
перейдите на страницу только что созданного приложения из списка ваших приложений и скопируйте поле Client Id (ID вашего приложения):
перейдите по ссылке
https://stackexchange.com/oauth/dialog?client_id=<ID ПРИЛОЖЕНИЯ>&redirect_uri=https://stackexchange.com/oauth/login_success/, вставив скопированный ID приложения.нажмите Approve
теперь адрес примет вид
https://stackexchange.com/oauth/login_success/#access_token=<ACCESS TOKEN>&expires=86400скопируйте access token из адреса, теперь он ваш!
А теперь, как его использовать:
скопируйте ключ со страницы вашего приложения:
в 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-запросы (например, написать комментарий). Чтобы получить разрешение на это, нужно
- при правке приложения в поле Stack Apps Post начните вводить заголовок вопроса о вашем приложении на сайте StackApps, при вводе будут предлагаться подходящие варианты - просто щёлкните на нужном, и поле заполнится, при этом, вопрос должен иметь метки либо
app, либоscript. Важно: этот вопрос должен быть именно вашим, но можно создать просто что-то вроде https://stackapps.com/q/10459/116701. - при получении токена в адрес нужно добавить
&scope=write_access.



