Tumblr使用PHP的OAuth类的OAuth
问题描述:
好吧,我迷上了这个。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);
}
?>
任何提示都十分赞赏
答
我已经找到了答案。
的问题就在这里:
所有的$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
也不要忘了在授权获取调用之前调用setToken方法。 – JacopKane 2012-06-13 12:55:22