听说Tumblr在国内貌似解禁了(还是神壕告诉我的),他的API看起来算是比较健全,不过真到好好研究的时候发现,果然还是渣浪的比较好用。然后想吐槽一下点点,果然是照抄Tumblr的……做了好几个DEMO,发现文字没问题,发图片URL也没问题,就是无法上传图片……在谷歌娘上找了许久,也找了好多教程,发现看了好多篇都搞不懂……于是废话也不多说了,放上源码才是正道
config.php:
<?php
/**************************************************
# Tumblr-uploader © kagami.me
# config.php Created on 2013.08.06
# Weibo: http://weibo.com/614520789
***************************************************/
//你的博客地址,可以是自定义域名
blogname = "spoonwep.tumblr.com";api_key = "GqxrJaz7dJHEubpTEsmUeM5d0m8NYpTVWnArGbP9pyCjigv3gm";
?>
tumblr.class.php:
upload.php:
<?php
/**************************************************
# tumblr-uploader © kagami.me
# upload.php Created on 2013.08.06
# Weibo: http://weibo.com/614520789
***************************************************/
include('tumblr.class.php');
include('config.php');
function curl_data(url,data){
curl = curl_init();
curl_setopt(curl, CURLOPT_URL, url);
curl_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt(curl, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt(curl, CURLOPT_USERAGENT, _SERVER['HTTP_USER_AGENT']);
curl_setopt(curl, CURLOPT_POST, 1);
curl_setopt(curl, CURLOPT_POSTFIELDS,data);
curl_setopt(curl, CURLOPT_TIMEOUT, 30);
curl_setopt(curl, CURLOPT_HEADER, 0);
curl_setopt(curl, CURLOPT_RETURNTRANSFER, 1);tmpInfo = curl_exec(curl);
curl_close(curl);
return tmpInfo;
}
if(isset(_FILES['data']['tmp_name'])){
route=_FILES['data']['tmp_name'];
headers = array("Host" => "http://api.tumblr.com/", "Content-type" => "application/x-www-form-urlencoded", "Expect" => "");params = array("data" => array(file_get_contents("route"), file_get_contents("route")),"type" => "photo");
oauth_gen("POST", "http://api.tumblr.com/v2/blog/blogname/post",params, headers);ch = curl_init();
curl_setopt(ch, CURLOPT_URL, "http://api.tumblr.com/v2/blog/blogname/post");
curl_setopt(ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt(ch, CURLOPT_HTTPHEADER, array(
"Authorization: " . headers['Authorization'],
"Content-type: " .headers["Content-type"],
"Expect: ")
);
params = http_build_query(params);
curl_setopt(ch, CURLOPT_POST, 1);
curl_setopt(ch, CURLOPT_POSTFIELDS, params);response = curl_exec(ch);form = "api.tumblr.com/v2/blog/".blogname."/posts/photo?api_key=".api_key."";
var = '';json = curl_data(form,var);
form_url_info = json_decode(json,true);
//echo form."<br>";
echo '<img src="'.form_url_info["response"]["posts"]["0"]["photos"][0]["original_size"]["url"].'">';
//print $response;
}
?>
说明一下:
1、貌似Tumblr的API只能用文件流的方式上传,所以只能用file_get_contents的方式,把图片文件强制转换为字符串然后上传,所以导致的结果就是:不适合上传很大的图片。
2、本人PHP新手,对于这个程序,必须要php.ini中设置 register_globals = On,如果你看到这篇文章,希望能指导我一下怎么才能不使用这个注册全局变量的功能,感谢!另外,php版本5.2/5.3测试通过,其他没有测试,如果有条件可以自己测试一下
经测试,只要在index.php加上”session_start();”就行了……为此还头痛了好久,不过上传图片还是有可能失败,应该是file_get_contents函数的限制吧
放上DEMO:
https://sell.moe/demos/tumblr/index.php
这是测试图片存放的博客:
代码托管到了Git:








这篇文章还没有评论