kn007的个人博客
♥ You are here: Home > 软件与网络 > php > [全新接口]WordPress 新文章带图片同步微博

[全新接口]WordPress 新文章带图片同步微博

by | 72 Comments

提醒:本文最后更新于 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 新文章带图片同步微博

donate
有所帮助?
Comments
72 Comments立即评论
  1. 像我这种回调地址在 api.lwl12.com 的瞬间就傻逼了…… :roll:

    1. MOD回复

      @liwanglin12: 不用回调啊。
      我回调地址是localhost。。。 :oops:

    2. MOD回复

      @liwanglin12: 来源地址符合就行了~

  2. weibo api 上线要备案的吧?

    1. MOD回复

      @大喇叭: 是要备案。 :!:

    2. @kn007: 天朝备案就省的玩了。。 :o :o :o :o

    3. MOD回复

      @大喇叭: 有张良民证,好认真干活啊~ :???:

    4. MOD回复

      @大喇叭: 如果把备案想成是资质或者是证书,估计就没那么难受了。。 :grin:

  3. LV2回复

    整这么麻烦……IFTTT一键搞定…… ;-)

    1. MOD回复

      @老虎: IFTTT能带微博小尾巴?! :sad:
      5eb52ad7185f6e9b2c041bdd9481e924.png

    2. LV2回复

      @kn007: 好吧,胜在简单,哈哈 :mrgreen:

    3. MOD回复

      @老虎: 微软系邮箱会进Junk,麻烦加下白名单。。谢谢 :???:

      这一说法可以谷歌验证:hotmail emails marked as spam。
      一般来说,第一条搜索结果是:Make Sure Windows Hotmail Doesn't Spam Important Mail
      随便的,其他链接的文章也提到:I would like to point out that, yes, hotmail (as well as live and msn and outlook webmail) are very strict, and tend to classify a lot of mass-mailings as spam, even when they shouldn't be.
      :x 谢谢老虎兄了。基本上发邮件给微软,答复都是应该没问题,但是他们程序有个考察期,所以可能还是会进Junk,考察期多久,看以前这个ip行为决定 :twisted: 然后是多久并没有说。
      所以只能麻烦你们自己加下白名单。

      如果觉得邮件烦的,可以退订博客邮件。邮件里有退订链接。

    4. LV2回复

      @kn007: 没事,我经常检查junk

    5. MOD回复

      @老虎: 主要是忙,马上要出差。
      本来准备写封《致微软邮箱用户的一封信》推送,并且退订所有微软邮箱用户的,不过还没时间把功能写好。。。

      微软每次都说我发的信,不可能会被标记为Spam,进Junk,但还是照样进。而且SNDS还显示无数据,状态正常。我受够了。

  4. LV5回复

    不用微博好多年了…

    1. MOD回复

      @老杨: :arrow: 好习惯!

  5. LV1回复

    沒有中國身份證LOL

    1. MOD回复

      @Kreen: :o 只能说太不人性,居然不允许非大陆居民申请。。

  6. 早上8点多看到你的动态,没想到这篇文章昨天你就发了
    微博我觉得差不多可以放弃了 一大堆广告和推广 :roll:

    1. MOD回复

      @World: 很久没上QQ空间了,发了一条。

  7. 回复

    好巧啊,前两天,看了你申请GV的文章。
    昨天搞微博API的时候,在github php sdk遇上了,点你资料进博客,发现原来GV文章原来是你写的~~ :roll: :roll:

    1. MOD回复

      @Cp0204: 真是巧了,握手 :oops:
      感谢你的提醒啊,要不然都没发现 :arrow:

  8. 回复

    看见那么多代码,也没心情弄了。

    1. MOD回复

      @亡命徒: :grin: 好吧

  9. 好腻害啊 :smile:

    1. MOD回复
  10. 回复

    点个赞,我在知乎也看到这篇文章了,看到你网站地址,哈哈哈

    1. MOD回复

      @sunnywolf: :sad: 知乎看到我这篇文章 :grin: 哪里哪里,发个链接来看看 :oops:

;-):|:x:twisted::smile::shock::sad::roll::razz::oops::o:mrgreen::lol::idea::grin::evil::cry::cool::arrow::???::?::!: