我已经构建了一个带有文本区域的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
我确信这两个库都可以帮助我,但是无法解决如何将它应用到我的代码中。来自其中一个社区的人是否能够给我一个示例,说明如何修改此内容,以便从用户帐户发送推文?
答案 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