如何捕获秘密令牌以发布用户推文 - KeyError at /'oauth_token_secret'

时间:2015-07-30 00:12:42

标签: django twitter twitter-oauth tweepy twython

我已经构建了一个带有文本区域的Django网页,我希望该网站的用户能够发布文本区域的内容。

我已经能够在我自己的帐户上发布(使用开发人员凭据),但是我无法提取用户的秘密令牌(使用python social auth登录后获得),如果没有这个,他们就无法发帖。

问题似乎是在保存此信息的字典中找不到秘密令牌。请记住,通过OAuth登录正常工作;什么是过去这一点,我没有做,或做错了,这意味着'oauth_secret_token'无法找到/不存在?

views.py

def form_handle(request):
    form = MyForm()
    if request.method=='POST':
        form = MyForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            text = cd.get('text')
            if 'tweet' in request.POST:
                user = request.user
                soc = user.social_auth.get(provider='twitter')
                access_token = soc.extra_data['access_token'] 
                access_secret = soc.extra_data['oauth_token_secret'] <-- error generated here.
                post_tweets().post_my_tweet(text, access_token, access_secret)
                form = MyForm()
                return render(request, 'hello.html',{'form':form})
    else:
        form = MyForm()
        return render(request, 'hello.html',{'form':form}) 

twitter_posting.py

from twitter import *
class post_tweets():
    ckey= "XXXXXXXXXXXXX"
    csecret= "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

    def post_my_tweet(self, tweet, atoken, asecret):
        t = Twitter(auth=OAuth(atoken, asecret, self.ckey, self.csecret))
        t.statuses.update(status= str(tweet))  

修改

我在这里阅读了Tweepy文档:http://docs.tweepy.org/en/v3.2.0/auth_tutorial.html

这里有Twython文档:https://twython.readthedocs.org/en/latest/usage/basic_usage.html#updating-status

我确信这两个库都可以帮助我,但是无法解决如何将它应用到我的代码中。来自其中一个社区的人是否能够给我一个示例,说明如何修改此内容,以便从用户帐户发送推文?

1 个答案:

答案 0 :(得分:0)

答案是oauth令牌和秘密在2d字典的第二维内。字典的关键是“访问权限”和“访问权限”。它拥有五个KV对,包括:&#39; oauth_token&#39;,&#39; oauth_token_secret&#39;,&#39; x_auth_expires&#39;,&#39; user_id&#39;和&#39; screen_name& #39 ;.

因此,这是您使用django从用户帐户发布到Twitter的方式:

views.py

def form_handle(request):
form = MyForm()
if request.method=='POST':
    form = MyForm(request.POST)
    if form.is_valid():
        cd = form.cleaned_data
        text = cd.get('text')
        if 'tweet' in request.POST:
            user = request.user
            soc = user.social_auth.get(provider='twitter')
            access_token = soc.extra_data['access_token'] ['oauth_token'] <-- changed
            access_secret = soc.extra_data['access_token']['oauth_token_secret'] <-- changed
            post_tweets().post_my_tweet(text, access_token, access_secret)
            form = MyForm()
            return render(request, 'hello.html',{'form':form})
else:
    form = MyForm()
    return render(request, 'hello.html',{'form':form}) 

twitter_posting.py与上述问题相同。如果您想查看登录时返回的Twitter数据,您可以创建一个打印出所有数据的自定义管道(这就是我解决问题的方法)。如果不将其转变为管道教程,我在下面添加了一些有用的链接。

http://psa.matiasaguirre.net/docs/pipeline.html https://github.com/omab/python-social-auth/tree/master/social/pipeline