/ does multipart has image

坑爹的新浪微博开放平台

先吐槽,再说技术。

但是本人不善吐槽,只好引用他人的话……以下内容引用自Wangling博客:

新浪微博很火,开放平台很火,开发者很“火”。

开发者火是因为新浪微博开放平台对开发者很不友好,其 API 从实现到文档都很粗糙。

API 实现不标准还能忍,但是文档不说明清楚,要开发者自己摸索就离谱了。1看来新浪尚未有暇顾及第三方开发者,开放平台现在也只是“开门放出来”而已。结果就是开发者在很多毫无意义的事情上折腾,浪费时间!

我只能说+10010……

吐槽完毕……

本文主题是:如何使用PHP调用API发送一条带图片的微博,也就是PHPSDK中所提供的upload函数。

以下内容引用自微博PHPSDK:

/**

* 发表图片微博

*

* 发表图片微博消息。目前上传图片大小限制为<5M。

*
注意:lat和long参数需配合使用,用于标记发表微博消息时所在的地理位置,只有用户设置中geo_enabled=true时候地理位置信息才有效。

*
对应API:{@link http://open.weibo.com/wiki/2/statuses/upload statuses/upload}

*

* @access public

* @param string $status 要更新的微博信息。信息内容不超过140个汉字, 为空返回400错误。

* @param string $pic_path 要发布的图片路径, 支持url。[只支持png/jpg/gif三种格式, 增加格式请修改get_image_mime方法]

* @param float $lat 纬度,发表当前微博所在的地理位置,有效范围 -90.0到+90.0, +表示北纬。可选。

* @param float $long 可选参数,经度。有效范围-180.0到+180.0, +表示东经。可选。

* @return array

*/

function upload( $status, $pic_path, $lat = NULL, $long = NULL )

{

过程省略……

}

 
 

还是忍不住说两句,在官方API文档里(传送门:http://open.weibo.com/wiki/2/statuses/upload),说那个pic参数是binary类型,SDK里面却说支持url,这你让我信哪个?

于是我两个都试了下,结果尼玛都报错!!!!

20007:does multipart has image ?

以下我的代码:

1.binary型

if ($_SESSION['access_token']) { $c = new SaeTClientV2( WB_AKEY , WB_SKEY , $_SESSION['access_token']); $ms = $c->home_timeline(); // done move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]); $hanle = fopen($_FILES["file"]["name"],'rb'); $buf = fread($hanle,filesize($_FILES["file"]["name"])); fclose($hanle); $re = $c->upload($_POST['status'],$buf); print_r($re); } else { echo "请先登陆新浪微博。"; }

2.url型

if ($_SESSION['access_token']) { $c = new SaeTClientV2( WB_AKEY , WB_SKEY , $_SESSION['access_token']); $ms = $c->home_timeline(); // done move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]); $buf = "http://www.*****.cn/weibo/picstatuses/".$_FILES["file"]["name"]; echo $buf; $re = $c->upload($_POST['status'],$buf); print_r($re); } else { echo "请先登陆新浪微博。"; }

我只能说跪得很彻底,第一次遇到官方API和SDK不统一,第一次遇到使用官方SDK报错……

好吧不说了,给出解决方案,SDK里面说的url,居然是特么的相对路径!!!!

if ($_SESSION['access_token']) { $c = new SaeTClientV2( WB_AKEY , WB_SKEY , $_SESSION['access_token']); $ms = $c->home_timeline(); // done $buf = "img/".$_FILES["file"]["name"]; move_uploaded_file($_FILES["file"]["tmp_name"], $buf); $re = $c->upload($_POST['status'],$buf); print_r($re); } else { echo "请先登陆新浪微博。"; }

坑爹的新浪微博开放平台
Share this