皇家元林

位置: 首页 > WordPress插件:wp-to-weibo

WordPress插件:wp-to-weibo

Feb 2018 08

首先介绍一下这个插件,wp-to-weibo就是WordPress同步到新浪微博的插件。之前很喜欢用朋友圈,可朋友真的多起来的时候,我又喜欢用微博了,或许哪天微博朋友多起来了,我又喜欢了Twitter。

前两年这个功能很多人用,现在用WordPress的人都没那么多了,好多这种插件代码的朋友都是N年前更新的。不过这代码又不是没用的。

这里要感谢张戈的博客,他里面介绍了很多关于怎么同步到新浪微博的方法,怎么去发现问题,受益良多。而且他之前也做了这样的一个插件。所以我这个插件基本上也是从他的代码中提炼出来的。

wp-to-weibo

wp-to-weibo

从根本上说不是他的代码有问题,是微博的接口问题,之前他介绍的微博高级写入接口,我找了半天都没找到,最后只有头条文章高级写入接口比较符合,如果想申请头条文章发布的权限,好像还需要至少有发布过10篇以上这样的文章才行。不过从微博开发平台里申请微连接之后单独申请这样的接口就OK了。

但是我这边插件除了支持这个接口,还有一个接口还可以同步到微博,那就是分享接口——第三方分享接口,这个接口只要你申请微连接默认是有的。他同步的形式如上图所示,这几天我测试了N遍。

主要核心代码有两个:一是分享到微博的形式:

function post_to_sina_weibo($post_ID) {
if( wp_is_post_revision($post_ID) ) return;
$get_post_info = get_post($post_ID);
$get_post_centent = get_post($post_ID)->post_content;
$get_post_title = get_post($post_ID)->post_title;
if(!empty(get_post_format($post_ID))){
if(get_post_format($post_ID) == 'aside') $get_post_format = __('aside','wp-to-weibo');
if(get_post_format($post_ID) == 'gallery') $get_post_format = __('gallery','wp-to-weibo');
if(get_post_format($post_ID) == 'link') $get_post_format = __('link','wp-to-weibo');
if(get_post_format($post_ID) == 'image') $get_post_format = __('image','wp-to-weibo');
if(get_post_format($post_ID) == 'quote') $get_post_format = __('quote','wp-to-weibo');
if(get_post_format($post_ID) == 'status') $get_post_format = __('status','wp-to-weibo');
if(get_post_format($post_ID) == 'video') $get_post_format = __('video','wp-to-weibo');
if(get_post_format($post_ID) == 'audio') $get_post_format = __('audio','wp-to-weibo');
if(get_post_format($post_ID) == 'chat') $get_post_format = __('chat','wp-to-weibo');
}else{
$get_post_format = __('Headline', 'wp-to-weibo');
}
if ($get_post_info->post_status == 'publish') {
$appkey = "新浪微博APPKEY";
$username = “新浪微博账号”;
$userpassword = “新浪微博密码”;
$request = new WP_Http;
$keywords = "";

/* keywords of post */
$tags = wp_get_post_tags($post_ID);
foreach ($tags as $tag ) {
$keywords = sprintf(__(' %1$s # %2$s # ', 'wp-to-weibo'), $keywords, $tag->name);$keywords.'#'.$tag->name."#";
}

/* add keywords to post topic*/
$string1 = sprintf(__('【 %1$s 】 %2$s : ','wp-to-weibo'), strip_tags($get_post_format), strip_tags( $get_post_title ));
$string2 = sprintf(__('%1$s Read More %2$s', 'wp-to-weibo'), $keywords, get_permalink($post_ID));

/* post num, sync failed if more */
$wb_num = (138 - WeiboLength_test($string1.$string2))*2;
$status = $string1.mb_strimwidth(strip_tags( apply_filters('the_content', $get_post_centent)),0, $wb_num,'...').$string2;
/* get the thumbnail, or get the first pic */
$url = get_mypost_thumbnail($post_ID);
//$url = preg_replace('/https:\/\//i','http://',$url);
$api_url = 'https://api.weibo.com/2/statuses/share.json'; /* API */
$body = array('status' => $status,'source' => $appkey,'pic' => $url);
$headers = array('Authorization' => 'Basic ' . base64_encode("$username:$userpassword"));
$result = $request->post($api_url, array('body' => $body,'headers' => $headers));
return json_encode($result);
}
}

另一种是以头条文章的形式:
function post_to_sina_toutiao($post_ID) {
if( wp_is_post_revision($post_ID) ) return;
$get_post_info = get_post($post_ID);
$get_post_centent = get_post($post_ID)->post_content;
$get_post_title = get_post($post_ID)->post_title;
$get_the_excerpt = get_post($post_ID)->post_excerpt;
if(!empty(get_post_format($post_ID))){
if(get_post_format($post_ID) == 'aside') $get_post_format = __('aside','wp-to-weibo');
if(get_post_format($post_ID) == 'gallery') $get_post_format = __('gallery','wp-to-weibo');
if(get_post_format($post_ID) == 'link') $get_post_format = __('link','wp-to-weibo');
if(get_post_format($post_ID) == 'image') $get_post_format = __('image','wp-to-weibo');
if(get_post_format($post_ID) == 'quote') $get_post_format = __('quote','wp-to-weibo');
if(get_post_format($post_ID) == 'status') $get_post_format = __('status','wp-to-weibo');
if(get_post_format($post_ID) == 'video') $get_post_format = __('video','wp-to-weibo');
if(get_post_format($post_ID) == 'audio') $get_post_format = __('audio','wp-to-weibo');
if(get_post_format($post_ID) == 'chat') $get_post_format = __('chat','wp-to-weibo');
}else{
$get_post_format = __('Headline', 'wp-to-weibo');
}
if ($get_post_info->post_status == 'publish') {
$appkey = "新浪微博APPKEY";
$username = “新浪微博账号”;
$userpassword = “新浪微博密码”;
$request = new WP_Http;
$keywords = "";

/* keywords of post */
$tags = wp_get_post_tags($post_ID);
foreach ($tags as $tag ) {
$keywords = sprintf(__(' %1$s # %2$s # ', 'wp-to-weibo'), $keywords, $tag->name);$keywords.'#'.$tag->name."#";
}

/* add keywords to post topic*/
$string1 = sprintf(__('【 %1$s 】 %2$s : ','wp-to-weibo'), strip_tags($get_post_format), strip_tags( $get_post_title ));
$string2 = sprintf(__('%1$s Read More %2$s', 'wp-to-weibo'), $keywords, get_permalink($post_ID));

/* post num, sync failed if more */
$status = $string1.$get_post_centent.$string2;
/* get the thumbnail, or get the first pic */
$url = get_mypost_thumbnail($post_ID);
//$url = preg_replace('/https:\/\//i','http://',$url);
$api_url = 'https://api.weibo.com/proxy/article/publish.json';
$body = array('title' => $get_post_title, 'text' => $get_the_excerpt, 'summary' => $get_the_excerpt, 'content' => $status, 'source' => $appkey, 'cover' => $url);
$headers = array('Authorization' => 'Basic ' . base64_encode("$username:$userpassword"));
$result = $request->post($api_url, array('body' => $body,'headers' => $headers));
return json_encode($result);
}
}

其实两段代码基本一样,不同的是接口。另外,我还添加了post-format类型。如果不满意我的中文翻译,可以用poedit软件重新翻译,当然也可以反馈给我,我会考虑您的意见。

官方下载地址

此插件刚已经提交到官方插件库了,不知道什么时候可以审核通过。目前给大家一个下载地址:WordPress插件wp-to-weibo

注意:如果以文章头条的形式,excerpt,即摘要内容必须有,否则同步失败。因为我把微博和导语部分是同步摘要的部分。其实这个插件做的不完美,特别是头条文章的形式,文章打开之后,显示的是格式化的文章,没有段落。有高手路过,可以帮我一起完善它,感谢!

== 已知bug ==
1、如上所述,头条文章形式,打开文章无格式,无段落;
2、文章更新后,还是会同步到微博,这个虽然可以加字段解决,但是我又不想在数据库里加个字段,而官方这个wp_is_post_revision貌似也不管用!

== changelog ==
2018.02.08 开始提交该插件;
2018.02.10 官方审核通过!

--转载请注明: https://hjyl.org/wp-to-weibo/

1条评论

  1. #1
    朱建林

    朱建林

    2018/02/11 08:12 -@
    Google Chrome 55 Google Chrome 55 Windows 7 Windows 7

    小刘真是太强大了。

  2. 发表评论

    (必填)

    7925