Pergunta

Estou tentando construir um aplicativo da web que pegue informações de esportes de fantasia da API do Yahoo. Eu sei que isso requer o uso do OAuth para falar com a API. Ele está sendo criado usando o Flask e será executado no Google App Engine.

Eu tenho tentado usar o Python-OAuth2 do pessoal da Simplegeo e continuo recebendo o mesmo erro exato ao tentar fazer o trabalho de desenvolvimento. Aqui está um trecho de código:

import oauth2 as oauth

consumer = oauth.Consumer(key=settings.OAUTH_CONSUMER_KEY, secret=settings.OAUTH_SHARED_SECRET)
request_token_url = "https://api.login.yahoo.com/oauth/v2/get_request_token"
client = oauth.Client(consumer)

resp, content = client.request(request_token_url, "GET")

Aqui está a resposta de erro que estou recebendo:

{'status': '401', 'codificação de transferência': 'chunked', 'conexão': 'feche', 'date': 'ter, 26 de outubro de 2010 18:24:16 gmt', 'p3p': ' PolicyRef = "http://info.yahoo.com/w3c/p3p.xml", cp = "cao dsp cor cur adm dev tai psa psd ivai ivdi coni telOtpi nossa deli sami otri untri pubi indicl uni pur fin com COM COM Nav int Dem Cnt Sta Pol Hea Proc Gov "',' Content-Type ':' Application/X-Www-Form-Urlencoded ',' Www-Authenticate ':' Oauth Oauth_problem = Consumer_key_rejected '}

Agora, li a documentação disponível via Yahoo e estou perplexo porque (a) parece tudo tão direto e (b) não consigo descobrir onde estou errado. Estou usando a chave do consumidor e o segredo compartilhado fornecido a mim pelo Yahoo.

Esta é a minha primeira experiência com a OAuth e qualquer ajuda seria muito apreciada.

Foi útil?

Solução

Como Kanaka apontou, a chamada get_access_token do Yahoo exige o OAuth_Callback, e o SimpleGeo/OAuth2 não permite que você o especifique facilmente.

Aqui estão algumas soluções alternativas:

Em vez de Simplegeo/Python-OAuth2, pegue o Zbowling/Python-Oauth2 (que é um garfo de Simplegeo, mas com um bom código novo e bugs), e adicione um parâmetro extra:

parameters={'oauth_callback': 'http://example.com/callback/'}

para a chamada client.request. Igual a:

client = Client(consumer)
client.request('https://api.login.yahoo.com/oauth/v2/get_request_token',
               method='GET',
               parameters={'oauth_callback': 'http://example.com/callback/'})

Se você insistir em trabalhar com Simplegeo/Python-OAuth2, confira a discussão detalhada sobre problemas com Simplegeo/OAuth2 e Yahoo Oauth, em esta página. Possui alguns fragmentos de código que você pode usar.

Outras dicas

Eu apenas tentei usar o Python-OAuth2 (Simplegeo's) e tive o mesmo problema.

Um problema com a implementação da Simplegeo é que o OAuth_Callback é fácil de fornecer na solicitação de token de solicitação e, de acordo com isso, é necessário: http://developer.yahoo.com/oauth/guide/oauth-requesttoken.html

Mas mesmo quando eu forço isso a 'oob', ainda tenho o problema.

Você pode experimentar a própria biblioteca Python do Yahoo e ver se isso ajuda (e depois postar aqui o que você encontrou): http://github.com/yahoo/yos-social-python. Eu descobri isso daqui: http://developer.yahoo.com/social/sdk/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top