提醒:本文最后更新于 3278 天前,文中所描述的信息可能已发生改变,请仔细核实。

2017年6月底7月,微博开放平台正式变更接口。通过微博API介绍页面可以看到变更后结果,可笑的是微博API更新日志只字未提。
原来的普通写入(statuses/update)及高级写入(statuses/upload)等写入接口全部废弃,取而代之的是分享接口(statuses/share)。
分享接口(statuses/share)全面代替之前的写入接口,调用方法基本与之前的高级写入接口一致,但是它有一个变态之处,就是status参数必须包含至少一个第三方分享到微博的网页URL,且该URL只能是该第三方(调用方)绑定域下的URL链接。
也就是你发送的微博,必须至少含一个你的应用链接。不过还好对我没什么大碍,我本来就含了链接。但对那些,拿来纯发微博状态,就有点无语了。
或者那些用根域名绑定的微博应用,却用子域名作为博客的用户,也会非常无奈,只能去微博开放平台修改来源域名,不然就甩出:
![]()
为了方便大家,我截了个图,给你们看看。

至于里面所说的“绑定域在我的应用 - 应用信息 - 基本应用信息编辑 - 安全域名里设置。”,我是没看到这个所谓安全域名,反正我简单理解成对应应用的域名链接,希望没错。
好,那么新版,在Wordpress如何方便的使用呢?
很简单,我把代码发出来,自己改下代码里的“应用密匙”即可。
add_action('publish_post', 'new_post_weibo', 1);
function new_post_weibo($post_ID, $debug = false) {
global $post;
if (!wp_is_post_revision($post_ID) && $post->post_status != "publish" || $debug == true){
if (isset($post) && $post->post_type != "post") return;
$access_token = "应用密匙";
$headers = array();
$headers[] = "Authorization: OAuth2 ".$access_token;
$url = 'https://api.weibo.com/2/statuses/share.json';
$status = "我刚刚发布了新文章《".get_the_title($post_ID)."》,快来看看吧。详细内容请点击:".get_permalink($post_ID);
if (has_post_thumbnail()) {
$post_thumbnail_id = get_post_thumbnail_id($post_ID);
$img_src = wp_get_attachment_url( $post_thumbnail_id );
}else{
$content = get_post( $post_ID )->post_content;
preg_match_all('/<img.*?(?: |\\t|\\r|\\n)?src=[\'"]?(.+?)[\'"]?(?:(?: |\\t|\\r|\\n)+.*?)?>/sim', $content, $strResult, PREG_PATTERN_ORDER);
$img_src = $strResult[1][0];
}
if(!empty($img_src)) {
$picfile = str_replace(home_url(),$_SERVER["DOCUMENT_ROOT"],$img_src);
if(!empty($picfile)){
$filecontent = file_get_contents($picfile);
}else{
$filecontent = file_get_contents($img_src);
}
$array = explode('?', basename($img_src));
$filename = $array[0];
$boundary = uniqid('------------------');
$MPboundary = '--'.$boundary;
$endMPboundary = $MPboundary. '--';
$multipartbody = '';
$multipartbody .= $MPboundary . "\r\n";
$multipartbody .= 'Content-Disposition: form-data; name="pic"; filename="' . $filename . '"' . "\r\n";
$multipartbody .= "Content-Type: image/unknown\r\n\r\n";
$multipartbody .= $filecontent. "\r\n";
$multipartbody .= $MPboundary . "\r\n";
$multipartbody .= 'content-disposition: form-data; name="status' . "\"\r\n\r\n";
$multipartbody .= urlencode($status)."\r\n";
$multipartbody .= $endMPboundary;
$headers[] = "Content-Type: multipart/form-data; boundary=" . $boundary;
$data = $multipartbody;
}else{
$data = "status=" . urlencode($status);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$curlResponse = curl_exec($ch);
curl_close($ch);
$output = json_decode($curlResponse);
if($debug){
var_dump($output);
echo '<hr />';
var_dump($data);
}
}
}
以上,便解决前几天说道的“Insufficient app permissions”问题(错误代码:10014)。
不加话题的原因是,微博会忽略话题标签,那就没什么必要了。。
知道问题,还是不难解决的。至于其他我就不多说什么了。
上面代码简单可靠,不用用什么所谓SDK,满足功能就行了。
旧版新文章同步微博介绍见:《WordPress 新文章同步微博(带文章特色图片)》。
PS: Unix时间截在今天10:40:00已经以1500000000开始了。
PS2: 后续在平台公告中看到《平台分享到微博接口升级公告》,里面提到此事。
官方博客的链接有点意思,中文就算了,还缺字。。。
既然写了,就再多写几句,难得有时间在博客上写点东西。
最近因为知乎专栏的一篇文章,使得博客访问量比较大,我很开心,虽然只持续一天多。
最多一天显示来自知乎有2W2+的唯一IP来访问,大多来自中国,也有少许日本、台湾及美国英国(来自Google Analytics的数据)。
这几天,这篇文章一共受到近4W次访问,如果你有关注我的最近动态应该会发现到,确实很热门,也有很多交流。这篇文章就是:《免费申请Google Voice美国电话号码》。
可能一些原因使得大家对这种带有一点隐私性,类似小号的电话号码有所青睐,加上这篇文章当时写的也比较详细(感觉我一般都写得蛮详细的),所以被推荐了一波。
这年头,无广告,不瞎BB的技术博客应该少了不少,希望我还能给你们带来一点资讯和一些便捷。
最后,谢谢各位朋友的支持,如果你觉得文章不错的话,帮我多宣传一下。
各位有心的看官,也欢迎赞助下我,非常感谢。
转载请注明转自: kn007的个人博客 的《[全新接口]WordPress 新文章带图片同步微博》

我已经懒得搭理新浪微博的东西了!自以为很了不起的样子!
@明月登楼: 这跟这貌似没直接关系吧。
从开发角度来看,只是现在文档、SDK更新不到位而已。其他没看到哪里自以为了不起这些。
@kn007: kn00的回复比较理性,是个搞技术的人;来这里的人就不要多考虑sina weibo现在有多少人用这种非技术因素。
新浪最坑爹的是把删除微博的API也给停了,现在只能发不能删……
@Wis Chu:
这样子吗?
有个朋友那天清了weibo
@kn007: destroy的API停了,删不了了 orz
@Wis Chu: 真是悲伤的消息
其实即便这个同步微博可以非常方便地一键同步我也不太希望同步。。感觉博客比较私人。。微博的人不想让他们看到我的另一面。。
@whuted: 每个人想法不一样啦。我生活文少,无所谓一点。
你好你好!我想问一下,现在只有分享接口(statuses/share),怎么完成转发功能呀?
@ACT-ZH: 转发微博吗?
这还真不知道,你得问问微博的人。
@kn007: 联系了的,就回答说使用share,具体怎么弄没有说。好的,谢谢了
@ACT-ZH: share的参数没有可用于设定原始微博的啊。。
不客气,没帮上忙。
你好,请问一下这个安全域名应该 填的是? 有什么规则吗? 麻烦举个例子,我现在填写了。。报{"error":"text not find domain!","error_code":10017,"request":"/2/statuses/share.json"}
@法的空间: 这个提示是你发送的内容没有你的域名网址。文章应该有说清楚,就是你应用绑定的域名
@法的空间: 不在电脑前,截不了图你。
你自己进微连接,我的应用看看。
你当时绑定的域名,是什么就要什么。
@kn007: 带图片的时候可以成功,不带图片就死活 说找不到domain。。问微博官方的人说接口修复了。。还是不行啊。。无语死了
@法的空间: 额,我之前试了是正常的,不带图片。
你status参数带了链接了吗?
@法的空间: 确实无语,很弱智的感觉。
@kn007: 带了的啊。跟图片的那种一样。。差别就是pic有没有。。
@法的空间: 那可能是才不行的吧,我之前试过没问题。
他那个域名的判断是单域名型,不是泛域名的,主要是这点。
比如你绑定了kn007.net,那么www.kn007.net、static.kn007.net都是不行的,必须kn007.net的链接才行。
@kn007: 现在的问题是。。带pic的可以。。不带不可以。。这个有点扯。。错误消息还是 说text not find domain。。没法理解。。干掉旧接口,上新接口也不好好测试一下。。我绑定的是www.xxxx.com.cn和xxxx.com.cn 这种有问题吗??
@法的空间: 只能绑一种啊。。。
他那个报错,跟傻蛋一样。
@kn007: 可以有多个。。用的时候必须加上 http:// 是吧?不然也报错。。( ╯□╰ )
@法的空间: 诶,感觉很狗屎。难怪很多人都不看微博了。
@kn007: 话说我是做UWP window10的。。只有安卓ios的sdk,也是很悲催的。。哎

@法的空间: 囧
我前段时间正好在找这类解决办法。问题是,好像微博要求你的网站要备案然后才会给你应用审核通过和应用密钥。。于是我就不了了之了,我的站不方便备案。
@料神Sam: 如果你不考虑第三方,又有刚需,可以再买个域名,备案后申请。到时新域名跳转老域名就行了
@料神Sam: 不备案也可以申请吧,我自己的博客并没有备案,服务器也不再境内,刚刚也审核通过了。
很久都难得上一次微博了!
试了一下,带图片的文章同步没问题,可以没有图片有文章同步不了,debug 也没返回信息。
@Lee: 测试正常,可以发。
debug没信息是不可能的。。因为代码在启用debug后,不但有远端信息,也有post内容。
@kn007: 谢谢,我再试试看,debug 远端信息怎么看呀?
@Lee: 一起输出的
@kn007: 重新复制了一次代码,没图片也发成功了!可能是我代码复制的问题!
不过 debug 页面返回一个错误:
Warning: Cannot modify header information - headers already sent by (output started at .../functions.php:498)
498 行代码是:var_dump($output);
@Lee: 这个没关系。
@kn007: 好的,感谢
问下这个应用密钥是怎么获取??
请问如何发送多图片,像页面发送那样可以文字加最多9张图片那种
@Super_Tang: 多个头就行了。
@kn007: "请问如何发送多图片,像页面发送那样可以文字加最多9张图片那种" 多个头怎么加,我试了好长时间,没有效果,大神给给例子代码吧。
