Python& tumblr API:无法登录我自己的tumblr来创建帖子

时间:2013-05-13 08:44:03

标签: python tumblr pytumblr

所以我有来自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?

1 个答案:

答案 0 :(得分:1)

tl; dr 此变通方法指示用户检索interactive_console.py生成的oauth令牌并对令牌值进行硬编码,而不是以编程方式检索它们。

注意:我确信这种解决方法在某种程度上违反了oauth背后的原则,但我无法弄清楚为什么原始方法无法正常工作。非常感谢那些比我更了解的人的意见 - 1.为什么这个解决方法不理想2.我如何修复原始方法所以我不必这样做

解决方法:

  1. 获取您的消费者密钥'和消费者秘密'来自API console page
  2. 运行interactive_console.py并按照指示
  3. 如果一切顺利,你的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)
    >>>
    
  4. 退出python控制台,因为你不需要它(键入' exit()')

  5. 从〜/ .tumblr

  6. 检索您的oauth令牌
  7. 将您的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
    
  8. 希望这有助于某人!