所以我有来自tumblr的消费者密钥和消费者秘密,我有以下代码允许我进行Oauth身份验证,但我不知道如何通过python和/或pytumblr实际登录到我自己的tumblr。成功使用Oauth后,我无法发布到我的tumblr。我应该通过API登录我的tumblr,或者只是通过http使用python定期登录然后使用API?自2012年9月以来,旧的tumblr API还没有工作我相信,所以here的python-tumblr从我能说的不再起作用了。相反,我使用here中的pytumblr。
这是我的代码:
import urlparse
import oauth2
import pytumblr
REQUEST_TOKEN_URL = 'http://www.tumblr.com/oauth/request_token'
AUTHORIZATION_URL = 'http://www.tumblr.com/oauth/authorize'
ACCESS_TOKEN_URL = 'http://www.tumblr.com/oauth/access_token'
CONSUMER_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'
CONSUMER_SECRET = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'
def Test():
consumer = oauth2.Consumer(CONSUMER_KEY, CONSUMER_SECRET)
client = oauth2.Client(consumer)
resp, content = client.request(REQUEST_TOKEN_URL, "GET")
request_token = dict(urlparse.parse_qsl(content))
oauthToken = request_token['oauth_token']
oauthSecret = request_token['oauth_token_secret']
print "Request Token:\n"
print " - oauth_token = " + oauthToken + "\n"
print " - oauth_token_secret = " + oauthSecret + "\n"
pytumblrClient = pytumblr.TumblrRestClient(CONSUMER_KEY, CONSUMER_SECRET, oauthToken, oauthSecret)
response = pytumblrClient.create_text("mytumblr.tumblr.com", body="test")
print response
正如您所看到的,我的tumblr没有密码被发送到任何地方,并且没有任何文档告诉我在哪里发送我的密码。运行代码后,我得到了一个未经授权的响应:
{u'meta': {u'status': 401, u'msg': u'Not Authorized'}, u'response': []}
有没有办法使用tumblr API发布到我自己的tumblr?
答案 0 :(得分:1)
tl; dr 此变通方法指示用户检索interactive_console.py生成的oauth令牌并对令牌值进行硬编码,而不是以编程方式检索它们。
注意:我确信这种解决方法在某种程度上违反了oauth背后的原则,但我无法弄清楚为什么原始方法无法正常工作。非常感谢那些比我更了解的人的意见 - 1.为什么这个解决方法不理想2.我如何修复原始方法所以我不必这样做
解决方法:强>
如果一切顺利,你的oauth令牌现在都存储在〜/ .tumblr(pytumblr README)中,你应该到达一个交互式的python控制台
Python 2.7.11 (default, May 19 2016, 13:11:38)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
退出python控制台,因为你不需要它(键入' exit()')
从〜/ .tumblr
将您的oauth令牌硬编码到您正在使用的任何内容中,始终如一地返回401' Unauthorized'错误。对我来说,看起来像这样:(注意<<>>)
import urlparse
import oauth2
import pytumblr
REQUEST_TOKEN_URL = 'http://www.tumblr.com/oauth/request_token'
AUTHORIZATION_URL = 'http://www.tumblr.com/oauth/authorize'
ACCESS_TOKEN_URL = 'http://www.tumblr.com/oauth/access_token'
CONSUMER_KEY = '<<REDACTED>>'
CONSUMER_SECRET = '<<REDACTED>>'
# don't need this b/c we're not retrieving oauth tokens programmatically anymore
'''
consumer = oauth2.Consumer(CONSUMER_KEY, CONSUMER_SECRET)
client = oauth2.Client(consumer)
resp, content = client.request(REQUEST_TOKEN_URL, "GET")
request_token = dict(urlparse.parse_qsl(content))
oauthToken = request_token['oauth_token']
oauthSecret = request_token['oauth_token_secret']
'''
# original API call with oauth tokens retrieved programmatically
#pytumblrClient = pytumblr.TumblrRestClient(CONSUMER_KEY, CONSUMER_SECRET, oauthToken, oauthSecret)
# NEW API call with oauth tokens hard-coded
pytumblrClient = pytumblr.TumblrRestClient(CONSUMER_KEY, CONSUMER_SECRET,
'<<HARD_CODED_OAUTH_TOKEN>>', '<<HARD_CODED_OAUTH_TOKEN_SECRET>>')
response = pytumblrClient.create_text("selfiesindumbo", body="TESTING VIA API")
print response
希望这有助于某人!