2013-05-13 69 views
3

所以我有一個消費者密鑰和消費者的祕密從tumblr,我有以下代碼允許我做Oauth身份驗證,但我不知道如何實際上通過python和/或pytumblr登錄到我自己的tumblr。成功使用Oauth後,我無法發佈到我的tumblr。我是否應該通過API登錄到我的tumblr,或者只是使用python和THEN使用API​​定期登錄?舊的tumblr API自2012年9月份以來一直沒有工作,我相信,所以Python-tumblr在here不能從我能說的更多。相反,我使用的是來自here的pytumblr。Python&tumblr API:無法登錄到我自己的tumblr創建帖子

這裏是我的代碼:

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

我有同樣的問題。 – Glycan 2014-11-01 06:26:00

回答

0

TL;博士此替代方法指示用戶通過interactive_console.py檢索所產生的OAuth符和硬編碼的標記值,而不是編程檢索它們。

注意:我相信這種解決方法在某種程度上違反了oauth的整個原則,但我不明白爲什麼原始方法不起作用。非常感謝鄉親從輸入超過見地我爲 - 1。爲什麼這種解決方法是不理想的2如何解決原來的方法,所以我不必做這種方式


替代方法:

  1. 讓你的「消費重點」和「消費者的祕密」從API console page
  2. 運行interactive_console.py,並按照指示
  3. 如果都去ES好,無論您的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. 將退出蟒控制檯的,因爲你不會需要它(鍵入「exit()」)

  5. 從成任何你使用的是一貫地返回401「未經授權」的錯誤〜/ .tumblr

  6. 硬編碼您的OAuth令牌檢索您的OAuth令牌。對我來說,是這樣的:(注意< < >>)

    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 
    

希望這可以幫助別人!