2016-03-31 2 views
3

Я следую инструкциям, указанным здесь: https://api.stackexchange.com/docs/authenticationКак использовать oauth2 для доступа к API StackExchange?

Но, поскольку кода нет, я не могу правильно понять поток.

Я пытался получить часть аутентификации, используя два метода ниже, но я ударил по ошибке.

1)

import requests 
from pprint import pprint 

resp = requests.get('https://stackexchange.com/oauth/dialog?client_id=6667&scope=private_info&redirect_uri=https://stackexchange.com/oauth/login_success/') 
pprint(vars(resp)) 

2)

import oauth2 as oauth 
from pprint import pprint 

url = 'https://www.stackexchange.com' 
request_token_url = '%s/oauth/' % url 
access_token_url = '%s/' % url 

consumer = oauth.Consumer(key='mykey', 
          secret='mysecret') 

client = oauth.Client(consumer) 


response, content = client.request(request_token_url, 'GET') 

print(response, content) 

Я не уверен, как идти вперед отсюда? Мне нужно использовать маркер доступа, который возвращается, и использовать его для запроса API. Пример кода действительно поможет! Благодарю.

EDIT: Это код, я использую в настоящее время:

from requests_oauthlib import OAuth2Session 
from pprint import pprint 

client_id = 'x' 
client_secret = 'x' 
redirect_uri = 'https://stackexchange.com/oauth/login_success' 
scope = 'no_expiry' 

oauth = OAuth2Session(client_id, redirect_uri=redirect_uri, scope=scope) 

pprint(vars(oauth)) 

authorization_url, state = oauth.authorization_url('https://stackexchange.com/oauth/dialog') 

print(authorization_url) 

Вместо того, чтобы нажать на authorization_url и получить маркер, есть способ, которым я могу непосредственно принести маркер внутри самого сценария ?

ответ

2

Из двух методов, которые вы использовали, первым является рекомендуемый метод для настольных приложений. Вероятно, это правильно.

OAuth предназначен для принуждения пользователя перейти на определенную веб-страницу и признать, что они дают разрешение (обычно с помощью нажатия кнопки) для приложения для доступа к их данным. Выбранные HTTP-ответы - это просто веб-страница, на которую пользователь должен нажать кнопку «Принять».

Чтобы получить представление о потоке, поместите первый адрес (https://stackexchange.com/oauth/dialog?client_id=6667&scope=&redirect_uri=https://stackexchange.com/oauth/login_success/) в адресную строку и нажмите «Принять» на загруженной странице. После этого будет указан URL-адрес access_token.

Если вы создаете приложение только для себя, access_token может быть скопирован в ваш скрипт Python. Срок действия токена истекает через один день; если это слишком коротко, добавьте no_expire в scope, чтобы сделать его навсегда. НЕ ДЕЛАЙТЕ токен с кем-либо еще, так как он дает им доступ к деталям вашей учетной записи! Каждый пользователь сценария должен генерировать свой собственный токен.

Проверьте access_token, вставив в вашем приложении key и access_token вы только что полученная в URL: https://api.stackexchange.com/2.2/me?key=key&site=stackoverflow&order=desc&sort=reputation&access_token=&filter=default

Если вам нужно более автоматизированное, интегрированное, удобное решение, я бы смотреть на selenium webdriver, чтобы открыть браузера и получить результирующие учетные данные.

+0

Большое вам спасибо за это! Можете ли вы проверить мое редактирование в OP? Как я могу автоматизировать процесс получения токена? – 90abyss

+0

Как я уже говорил, я бы посмотрел на selenium webdriver, чтобы его автоматизировать. Я отсылаю вас к вопросу SO на [PhantomJS via selenium] (http://stackoverflow.com/questions/13287490/is-there-a-way-to-use-phantomjs-in-python), который описывает аналогичную ситуацию. Если вам нужна дополнительная информация, я считаю, что это должно быть в новом вопросе. Не забудьте указать ваши требования: он должен быть полностью безголовый или разрешен GUI? Можно ли установить дополнительное программное обеспечение, или же он должен быть чистым Python? –

Смежные вопросы