2012-02-03 120 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