我正在尝试自动将消息发布到我的 Tumblr 博客(该博客将通过 Cron 每天运行)
我在这里使用官方 Tumblr PHP 库: https://github.com/tumblr/tumblr.php
并使用此处详细说明的身份验证方法: https://github.com/tumblr/tumblr.php/wiki/Authentication (或其中的一部分,因为我不需要用户输入!)
我有以下代码
require_once('vendor/autoload.php');
// some variables that will be pretttty useful
$consumerKey = 'MY-CONSUMER-KEY';
$consumerSecret = 'MY-CONSUMER-SECRET';
$client = new Tumblr\API\Client($consumerKey, $consumerSecret);
$requestHandler = $client->getRequestHandler();
$blogName = 'MY-BLOG-NAME';
$requestHandler->setBaseUrl('https://www.tumblr.com/');
// start the old gal up
$resp = $requestHandler->request('POST', 'oauth/request_token', array());
// get the oauth_token
$out = $result = $resp->body;
$data = array();
parse_str($out, $data);
// set the token
$client->setToken($data['oauth_token'], $data['oauth_token_secret']);
// change the baseURL so that we can use the desired Methods
$client->getRequestHandler()->setBaseUrl('http://api.tumblr.com');
// build the $postData into an array
$postData = array('title' => 'test title', 'body' => 'test body');
// call the creatPost function to post the $postData
$client->createPost($blogName, $postData);
但是,这给了我以下错误:
致命错误:未捕获 Tumblr\API\RequestException:[401]:不是 授权投入 /home///*/供应商/tumblr/tumblr/lib/Tumblr/API/Client.php 426号线
我可以通过以下方式检索博客文章和其他数据(示例):
echo '<pre>';
print_r( $client->getBlogPosts($blogName, $options = null) );
echo '</pre>';
看来这只是发了一个我无法管理的帖子。
老实说,我不太了解 OAuth 身份验证,因此我使用的是更有价值的编码人员免费提供的代码:-) 我认为我可以编辑掉 https://github.com/tumblr/tumblr.php/wiki/Authentication 的部分内容,因为我不需要用户输入,因为这只是直接运行的代码我的服务器(通过 Cron)
我花了几天时间在互联网上寻找一些答案(已经进一步了解了),但我完全陷入了这个问题......
非常感谢任何建议!
您在代码中删除的部分似乎与所需操作所需的 OAuth 流程的一部分相关。
// exchange the verifier for the keys
您可以尝试运行身份验证示例本身并删除已删除的代码部分,直到它不再起作用。这将缩小导致问题的范围。我个人对 OAuth 不太熟悉,但这看起来似乎是问题的一部分,因为您取出的主要部分之一是围绕 OAuth 流程交换 OAuth 密钥的验证程序。
function upload_content(){
// Authorization info
$tumblr_email = '[email protected]';
$tumblr_password = 'secret';
// Data for new record
$post_type = 'text';
$post_title = 'Host';
$post_body = 'This is the body of the host.';
// Prepare POST request
$request_data = http_build_query(
array(
'email' => $tumblr_email,
'password' => $tumblr_password,
'type' => $post_type,
'title' => $post_title,
'body' => $post_body,
'generator' => 'API example'
)
);
// Send the POST request (with cURL)
$c = curl_init('api.tumblr.com/v2/blog/gurjotsinghmaan.tumblr.com/post');
//api.tumblr.com/v2/blog/{base-hostname}/post
//http://www.tumblr.com/api/write
//http://api.tumblr.com/v2/blog/{base-hostname}/posts/text?api_key={}
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $request_data);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($c);
$status = curl_getinfo($c, CURLINFO_HTTP_CODE);
curl_close($c);
// Check for success
if ($status == 201) {
echo "Success! The new post ID is $result.\n";
} else if ($status == 403) {
echo 'Bad email or password';
} else {
echo "Error: $result\n";
}
}