【问题标题】:How can i capture the secret token to post users tweet - KeyError at / 'oauth_token_secret'我如何捕获秘密令牌以发布用户推文 - KeyError at / 'oauth_token_secret'
【发布时间】:2015-10-21 04:32:53
【问题描述】:

我已经构建了一个带有文本区域的 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

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

【问题讨论】:

    标签: django twitter twitter-oauth tweepy twython


    【解决方案1】:

    答案是 oauth 令牌和秘密位于二维字典的第二维中。字典的密钥称为“access_token”,它包含五个带有密钥的 KV 对:“oauth_token”、“oauth_token_secret”、“x_auth_expires”、“user_id”和“screen_name”。

    因此,这就是您使用 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

    【讨论】:

      猜你喜欢
      • 2013-10-11
      • 1970-01-01
      • 2012-04-28
      • 2014-01-27
      • 2019-02-11
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      相关资源
      最近更新 更多