3

所以我有一个来自 tumblr 的消费者密钥和消费者秘密,并且我有以下代码允许我进行 Oauth 身份验证,但我不知道如何通过 python 和/或 pytumblr 实际登录到我自己的 tumblr。成功使用 Oauth 后,我无法在我的 tumblr 上发帖。我应该通过 API 登录到我的 tumblr,还是只是通过 http 和 python 定期登录,然后使用 API?我相信旧的 tumblr API 自 2012 年 9 月以来就没有工作过,所以据我所知,这里的 python-tumblr 不再工作了。相反,我从这里使用 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?

4

1 回答 1

2

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

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


解决方法:

  1. 从API 控制台页面获取您的“Consumer Key”和“Consumer Secret”
  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 检索您的 oauth 令牌

  6. 将您的 oauth 令牌硬编码到您使用的始终返回 401“未授权”错误的任何内容中。对我来说,看起来像这样:(注意 << >>)

    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
    

希望这对某人有帮助!

于 2016-05-31T14:16:14.167 回答