2012-02-03 119 views
3

好吧,我迷上了這個。Tumblr使用PHP的OAuth類的OAuth

我最近下載並安裝了PHP的OAuth庫在這裏:http://us3.php.net/manual/en/book.oauth.php

利用這一點,我創建了一些測試代碼來嘗試連接到我的Tumblr帳戶並崗位。

我能夠獲得RequestToken和Authorize。但是,當我做出實際要求我得到一個錯誤:

Invalid auth/bad request (got a 404, expected HTTP/1.1 20X or a redirect) 

我的請求URL是在http://api.tumblr.com/v2/blog/account/post正確的格式。我正在發一個POST請求。所以,我不知道爲什麼它返回一個404

這裏是我的代碼:

<?php 
$req_url = 'http://www.tumblr.com/oauth/request_token'; 
$authurl = 'http://www.tumblr.com/oauth/authorize'; 
$acc_url = 'http://www.tumblr.com/oauth/access_token'; 

$conskey = '123'; 
$conssec = '456'; 

session_start(); 

// In state=1 the next request should include an oauth_token. 
// If it doesn't go back to 0 
if(!isset($_GET['oauth_token']) && $_SESSION['state']==1) $_SESSION['state'] = 0; 
try { 
    $oauth = new OAuth($conskey,$conssec); 
    $oauth->enableDebug(); 
    if(!isset($_GET['oauth_token']) && !$_SESSION['state']) { 
    $request_token_info = $oauth->getRequestToken($req_url, 'http://www.domain.com/oauth.php'); 
    $_SESSION['secret'] = $request_token_info['oauth_token_secret']; 
    $_SESSION['state'] = 1; 

    //Make authorize request with oauth_token 
    header('Location: '.$authurl.'?oauth_token='.$request_token_info['oauth_token']); 
    exit; 
    } else if($_SESSION['state']==1) { 

    //Callback code 

    $oauth->setToken($_GET['oauth_token'],$_SESSION['secret']); 
    $access_token_info = $oauth->getAccessToken($acc_url); 
    $_SESSION['state'] = 2; 
    $_SESSION['token'] = $access_token_info['oauth_token']; 
    $_SESSION['secret'] = $access_token_info['oauth_token_secret']; 

    } 

    //Make tumblr post request 
    $oauth->setToken($_SESSION['token'],$_SESSION['secret']); 
    $oauth->fetch("http://api.tumblr.com/v2/blog/account/post", null, OAUTH_HTTP_METHOD_POST, array('type'=>'text', 'body'=>'this is a test')); //error happens here 
    $json = json_decode($oauth->getLastResponse()); 
    print_r($json); 
} catch(OAuthException $E) { 
    print_r($E); 
} 
?> 

任何提示都十分讚賞

回答

8

我已經找到了答案。

的問題就在這裏:

所有的
$oauth->fetch("http://api.tumblr.com/v2/blog/account/post", null, OAUTH_HTTP_METHOD_POST, array('type'=>'text', 'body'=>'this is a test')); //error happens here 

首先,對於帳戶,我只是有我的博客的名稱。事實上,tumblr api中描述的基本主機名需要採用'blogname.tumblr.com'格式。不只是'博客名稱',因爲我有它。這將給400.

其次,提取參數的順序是錯誤的。正確的順序是這樣的:

string $protected_resource_url [, array $extra_parameters [, string $http_method [, array $http_headers ]]] 

其中在翻譯我的例子是...

$oauth->fetch("http://api.tumblr.com/v2/blog/blogname.tumblr.com/post", array('type'=>'text', 'body'=>'this is a test'), OAUTH_HTTP_METHOD_POST); 

我寫上得到這個教程工作here

+0

也不要忘了在授權獲取調用之前調用setToken方法。 – JacopKane 2012-06-13 12:55:22