皇家元林

位置: 首页 > 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);
       }
 
      /* 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);
       }
 
      /* 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/

27条评论

  1. #1

    小刘真是太强大了。

  2. #2
    yidilian

    yidilian Google Chrome 64 Mac OS X 10.13

    2018/02/23 19:44 -@

    无法启用插件,因为它引起了一个致命错误(fatal error)。
    Fatal error: Can’t use function return value in write context in /**************.com/wp-content/plugins/wp-to-weibo/class-weibo.php on line 11

  3. #4

    WordPress 4.9.4,使用Sequential主题,同步失败,看了博主的源代码,感觉没有任何问题,但就是同步不了,很奇怪。
    跟着微博的官方文档写了下面这个函数,用开发者token在本地可以成功分享,但是到了服务器上的WordPress用钩子却无法同步了,头痛。
    不知道在WordPress上有没有办法知道它发送post请求后的response,如果能得到response或许能知道同步不了的原因。

    function post_to_sina_weibo($status, $pic, $token) {
    $url=’https://api.weibo.com/2/statuses/share.json’;
    $status = urlencode($status);
    $options = array(
    ‘status’ => $status,
    ‘access_token’ => $token,
    ‘pic’ => new \CurlFile($pic, ‘image/png’, ‘1.png’)
    );
    $ch = curl_init();
    $timeout = 5;
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $options);
    $file_contents = curl_exec($ch);
    curl_close($ch);
    echo $file_contents;
    }

  4. #9
    haidemeng

    haidemeng Firefox 64 Windows 10

    2019/01/08 16:45 -@

    我发了篇文章貌似没同步成功

  5. #13
    haidemeng

    haidemeng Internet Explorer 11 Windows 10

    2019/01/09 15:12 -@

    有的已经审核通过了,

  6. #15
    haidemeng

    haidemeng Internet Explorer 11 Windows 10

    2019/01/10 08:20 -@

    感谢老大。

  7. #16

    This plugin doesn’t work at all.

  8. #20

    Hi 皇家元林

    Thanks for your reply. Yes I have a Weibo account and a Weibo app. In the settings of WP to Weibo my Weibo name is Rolex-Watch and the App key is 2440656683. What I understand from your plugin is that it shares posts to Weibo automatically? Is that correct? Anyway, when I make a test post, nothing is posted to my Weibo page https://www.weibo.com/realrolexwatches Maybe you like to test it yourself? I can give you my login information if needed. If you need it I can send it to your email address. Thanks!

    Kind regards
    Richard

    • #21

      @Richard my pleasure!
      I am glad you are using weibo in China.
      If you trust me, send your login account and password by email.
      i help you test it.
      best wish!

  9. #22

    Hi 皇家元林

    I am from the Netherlands and my native language is Dutch. I cannot speak Chinese but I would like to learn it. The last 20 years I have been living in the Philippines so that’s where I live now. Before I give you the login info, may I know what is call back page in my App? I filled in https://richarddetering.com/wp-admin/options-general.php?page=wp2wb-options Is that correct?

  10. #23

    https://richarddetering.com/wp-admin/options-general.php?page=wp-to-weibo
    you can see the options.
    no call back page, and only an admin option page.
    I see.
    is the plugin you use not mine?
    my plugin name is wp-to-weibo.

  11. #24

    Am using wp-to-weibo. Please check your email. Thanks.

  12. #25

    好像不起作用,使用分享模式,三个选项包括登陆账号,登陆密码,以及APP-KEY;发布了两篇都不行;不知道是不是用户名,不是填电子邮箱的的登陆账号,而是填写微博名?

  13. 发表评论

    (必填)

    2352