Форум сайта python.su
Совершенно не получается джангой авторизоваться в твиттере и авторизацию эту забить в сессию. Доки tweepy по oauth читал. На десктопном приложении всё прекрасно работает. А вот в django это перенести никак не получается…
Объясните уж, пожалуйста, совсем на пальцах. И, желательно, с наглядными примерами:)
Заранее спасибо!
Офлайн
Что конкретно не получается? Какие ошибки? Как вы диагностировали?
Офлайн
DaevaornВ общем, добрался я в итоге до вот такого кода:
Что конкретно не получается? Какие ошибки? Как вы диагностировали?
def authorisation(request):
CONSUMER_KEY =
CONSUMER_SECRET =
CALLBACK_URL = 'http://127.0.0.1:8000/info/'
# процесс авторизации
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET, CALLBACK_URL)
auth_url = auth.get_authorization_url()
return redirect(auth_url)
verifier = request.GET.get('oauth_verifier')
auth.get_access_token(verifier)
request.session['token'] = auth
def info(request):
old_token = request.session.get('token')
if not old_token:
return HttpResponse("Something went wrong! Tokens do not match")
else:
user = api.get_user(user)
max_pages = tweet_count / 100 + 1
return render_to_response('info.html', locals())
Офлайн
Сохранять в сессию надо access_token, что и написаер в документации
http://joshthecoder.github.com/tweepy/docs/auth_tutorial.html#oauth-authentication
It is a good idea to save the access token for later use. You do not need to re-fetch it each time.
Офлайн
DaevaornЧитал. Но всё равно не понял:( можно показать на примере текущего кода?
Сохранять в сессию надо access_token, что и написаер в документацииhttp://joshthecoder.github.com/tweepy/docs/auth_tutorial.html#oauth-authentication
It is a good idea to save the access token for later use. You do not need to re-fetch it each time.
Офлайн
Вам надо вот эти два значения добавить:
auth.access_token.key
auth.access_token.secret
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(key, secret)
api = tweepy.API(auth)
api.update_status('tweepy + oauth!')
Офлайн
Daevaorn, так, спасибо, сейчас попробую:)
Офлайн
Хм. Всё равно не получается. Вот полный код views.py:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.shortcuts import render_to_response, redirect
import tweepy
CONSUMER_KEY = ''
CONSUMER_SECRET = ''
CALLBACK_URL = 'http://127.0.0.1:8000/'
def hello(request):
return HttpResponse('Hello!')
def auth(request):
# процесс авторизации
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET, CALLBACK_URL)
auth_url = auth.get_authorization_url()
return redirect(auth_url)
verifier = request.GET.get('oauth_verifier')
auth.get_access_token(verifier)
session.set('token', (auth.access_token.key, auth.access_token.secret))
#request.session['token'] = auth
def main(request):
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token('token', 400001)
api = tweepy.API(auth)
# Если раскомментировать следующую строку, то появляется ошибка "argument 2 to map() must support iteration". Какой ещё вообще map()? Если не раскомментировать, то всё нормально, но переменной token_info передаётся None. Т.е. получается, что эта долбаная сессия всё-таки пустая??
# user = api.get_user(user)
# tweet_count = user.statuses_count
token_info = request.session.get('token')
return render_to_response('main.html', locals())
from django.conf.urls.defaults import *
from back2tweet.views import *
urlpatterns = patterns('',
(r'^$', main),
(r'^auth/$', auth),
(r'^hello/$', hello),
Отредактировано (Окт. 7, 2010 09:59:54)
Офлайн
Код я немного переписал и, кажется, даже получилось локализовать место одной из ошибок:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.shortcuts import render_to_response, redirect
import tweepy
CONSUMER_KEY = 'QQNHQPSoOSWzBwNWMu4G2w'
CONSUMER_SECRET = 'B97Fnf7Cf8qfU15WyP1TmTnKVBDAtBH8UGUbGgPWe0'
CALLBACK_URL = 'http://127.0.0.1:8000/'
def hello(request):
return HttpResponse('Hello!')
def auth(request):
# процесс авторизации
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET, CALLBACK_URL)
try:
auth_url = auth.get_authorization_url()
except tweepy.TweepError:
return HttpResponse('Error! Failed to get request token.')
request.session['request_token'] = (auth.request_token.key, auth.request_token.secret)
return redirect(auth_url)
verifier = request.GET.get('oauth_verifier')
token = request.session.get('request_token')
del request.session["request_token"]
auth.set_request_token(token[0], token[1])
try:
auth.get_access_token(verifier)
except tweepy.TweepError:
print 'Error! Failed to get access token.'
request.session['access_token'] = (auth.access_token.key, auth.access_token.secret)
def main(request):
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token('access_token', 400001)
api = tweepy.API(auth)
# Если раскомментировать следующую строку, то появляется ошибка "argument 2 to map() must support iteration". Какой ещё вообще map()?
# user = api.get_user('4umak')
# tweet_count = user.statuses_count
tweet_count = request.session.get('access_token')
return render_to_response('main.html', locals())
auth.get_access_token(verifier)
Отредактировано (Окт. 8, 2010 21:25:08)
Офлайн