我怎样才能将秘密令牌捕获到 post 用户推文 - KeyError at / 'oauth_token_secret'

How can i capture the secret token to post users tweet - KeyError at / 'oauth_token_secret'

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

我已经能够 post 使用我自己的帐户(使用开发人员凭据),但是我无法提取用户的秘密令牌(使用 python 社交身份验证登录后获得) , 没有这个他们就做不出 post。

问题似乎是在保存此信息的字典中找不到秘密令牌。请记住,通过 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

我相信这两个库都能为我提供帮助,但无法弄清楚如何将其应用到我的代码中。来自这些社区之一的人能否给我一个例子,说明我如何修改它以便它从用户帐户发送推文?

答案是 oauth 令牌和密码在二维字典的第二维内。字典的键称为 'access_token' 它包含五个键值对:'oauth_token'、'oauth_token_secret'、'x_auth_expires'、'user_id' 和 'screen_name' .

因此,这就是您 post 使用 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 与上面的问题没有变化。如果您想查看登录时返回的推特数据,您可以创建一个打印出所有数据的自定义管道(这就是我解决问题的方法)。在不将其变成管道教程的情况下,我在下面添加了一些有用的链接。

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