微博通for wordpress插件完善

对wordpress微博通同步插件的修改和完善, 实现效果: ①同步格式为标题+截取内容+链接②支持同步图片(外链/特色图像/本地上传)③新文章发布才会同步,更新文章则不同步 作者:小蝴蝶

鉴于很多同学一直来问为什么同步不了? 这里统一回答一下, 首先我自己是一直能同步成功的, 但是微博通的接口有问题, 所以有时候能同步有时候同步不了, 和插件没有关系哦不要再问我为什么不能同步啦 ╯﹏╰

昨天老郑说:”搞一个微博同步插件,只需要同步到微博通,标题加截取摘要加图片”. 折腾一宿加一下午终于弄好了,解决了微博通官方插件for wordpress不能截取内容摘要和上传图片的问题,
先上效果图

微博通同步效果

然后上代码(晚点再补充说明,因为我现在急着去打牌了,哈哈)
2013-02-21 01:00:56 更新: 可以直接抓取文中第一张图片而不用设置缩略图了,支持外链图片和本地上传的图片,非第一次发布的文章更新永久不会同步,下面代码已经替换为新版

  • 下载地址(直接在插件→安装中上传启用即可)
  • 代码源文件
  • <?php
    /*
    Plugin Name: 微博通同步发布
    Plugin URI: http://xiaohudie.net/wbto-plugin.html (参考: 原插件下载地址: http://www.wbto.cn/bbs/viewthread.php?tid=382)
    Description: 自动把你的博客文章同步到微博通,微博通将同步至你所绑定的各个平台。
    Version: 1.0
    Author: 小蝴蝶(原作者yige)
    Author URI: http://xiaohudie.net & http://t.qq.com/abcwuwuwu
    */
    function wbto_install() {
    global $wpdb;
    $table_name = $wpdb->prefix."wbto";
    if($wpdb->get_var("show tables like '$table_name'") != $table_name) {
    $sql = "CREATE TABLE " . $table_name . " (id mediumint(9) NOT NULL AUTO_INCREMENT, wbto_username VARCHAR(100) NOT NULL, wbto_password VARCHAR(100) NOT NULL, );";
    }
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
    }
    function send_to_wbto($post_ID) {
    $posted = get_post($post_ID);
    preg_match_all('/<img[^>]+src=['"](http[^'"]+)['"].*>/isU',$posted->post_content, $image);//匹配图像格式
    $p_sum = count($image[1]);
    if ($p_sum > 0) {
    $p = $image[1][0];
    }
    if (!$p) {
    if (function_exists('has_post_thumbnail') && has_post_thumbnail($post_ID)) { //  如果支持特色图像(WordPress v2.9以上)并且存在特色图像,则抓特色图像
    if ($image_url = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'post-thumbnail'))
    $p = $image_url[0];
    }
    }
    $t1=$posted->post_date;
    $t2=$posted->post_modified;
    $diff=strtotime($t2)-strtotime($t1);
    if($diff>0){return;} //重要修改:加上了发布时间判断,如果文章更新,将不会同步到微博
    $username = get_option('wbto_username');
    $password = get_option('wbto_password');
    $posted = get_post($post_ID);
    $image_url = $p;//重要修改:抓图像,支持外链图片和本地上传的图片,如果有特色图像则抓特色图像
    $excerpt=mb_strimwidth(strip_tags($posted->post_content),0,130,'...'); //截130字的内容,因为总共140字还要留一点在最后放链接
    $fields = array();
    $fields['source'] = 'wordpress';
    $fields['content'] = urlencode('['.$posted->post_title.']'.mb_strimwidth(strip_tags($excerpt),0,130,'...').' '.get_permalink($posted->ID)); //微博格式,效果如图,即:[标题]摘要内容+链接2014-05-07更新: 将$posted->guid改为get_permalink($posted->ID),使链接形式与自定义固定链接相同
    $ch = curl_init();
    if ($image_url) { //图片和文字微博的接口不同,所以要加个判断,否则会同步失败
    $fields['imgurl'] =$image_url;
    curl_setopt($ch, CURLOPT_URL, "http://wbto.cn/api/upload.json"); //这是官方API里提供的图片同步的接口
    } else {
    curl_setopt($ch, CURLOPT_URL, "http://wbto.cn/api/update.json"); //这是普通文字微博接口
    }
    curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
    curl_setopt($ch, CURLOPT_FAILONERROR, TRUE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,TRUE);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
    $result = curl_exec($ch);
    curl_close($ch);
    }
    //以下代码则未做改动,不过我也注释了一些部分,给大家做个参考,了解一下
    function wbto_menu() {
    add_options_page('微博通同步设置', '微博通同步', 8, __FILE__, 'wbto_options');
    }//添加一个设置页面
    function wbto_options() {//下面输出设置页面的HTML
    echo '<div class="wrap">';
    echo '<h2>微博通同步</h2>';
    echo '<form method="post" action="options.php">';
    echo wp_nonce_field('update-options');
    echo '<table class="form-table">';
    echo '<tr valign="top">';
    echo '<th scope="row">用户名 <a href="http://www.wbto.cn/?app=wp">注册</a></th>';
    echo '<td><input type="text" name="wbto_username" value="'.get_option('wbto_username').'" /></td>';
    echo '</tr>';
    echo '<tr valign="top">';
    echo '<th scope="row">密码</th>';
    echo '<td><input type="password" name="wbto_password" value="'.get_option('wbto_password').'" /></td>';
    echo '</tr>';
    echo '</table>';
    echo '<input type="hidden" name="action" value="update" />';
    echo '<input type="hidden" name="page_options" value="wbto_username,wbto_password" />';
    echo '<p class="submit">';
    echo '<input type="submit" name="submit" id="submit" class="button-primary" value="保存更改" />';
    echo '</p>';
    echo '</form>';
    echo '</div>';
    
    }
    add_action('admin_menu', 'wbto_menu');//将插件设置页面挂在后台设置中
    add_action('publish_post', 'send_to_wbto');//动作在发布文章时触发
    ?>

    LIKE OR SHARE IT:

    admin发表于Code目录下,标签为,转载请保留链接

    TOP DOWN
    发表评论

    您必须 [ 登录 ] 才能发表留言!

    1. 沙 发 Android

      求你博客状态的那个。。。文中的功能可以通过多多说或者无觅来实现。。

      二月 19, 2013 21:01:04
    2. 板 凳 郑永

      居然没弄到沙发,哎。。。来晚了。。。 马上试试哈 :)

      二月 19, 2013 22:42:15
    3. 地 板 郑永

      加个这个功能,防止更新文章的时候又同步了:
      function if_send_weibo($post_ID){
      $wbto = get_post_meta($post_ID, ‘wbto’, true);
      if($wbto) return;
      send_to_wbto($post_ID);
      add_post_meta($post_ID, ‘wbto’, ‘本条微博已经同步到微博通,如果你要更新微博,可以删除本定义栏目,重新撰写weibo栏目,然后更新文章即可。’, true);
      }
      add_action(‘admin_menu’, ‘wbto_menu’);
      add_action(‘publish_post’, ‘if_send_weibo’);

      二月 19, 2013 22:44:41
      • 小蝴蝶

        @郑永 恩恩,你不说我还不知道,你一说我一看,我靠,被自己的微博刷屏了…

        301室 二月 19, 2013 22:45:50
        • 郑永

          @小蝴蝶 @小蝴蝶 : 图片我没试成功。。这是?

          302室 二月 19, 2013 22:52:58
          • 小蝴蝶

            @郑永 额,抓取的是特色图像..你有添加特色图像吗

            303室 二月 19, 2013 22:54:07
            • 郑永

              @小蝴蝶 @小蝴蝶 : 我那个博客有更新一篇有特色的,没反应,然后我拿去测试的那个博客,居然没有特色图片设置。。。囧~~ 也是3.5.1版本啊~~原来要加: add_theme_support( ‘post-thumbnails’ ); 汗。

              304室 二月 19, 2013 23:04:09
              • 小蝴蝶

                @郑永 是主题的原因,你在function.php里查找类似function XXX_setup(),在里面加上add_theme_support( ‘post-thumbnails’ );就可以了

                305室 二月 19, 2013 23:06:05
          • 小蝴蝶

            @郑永 现在图片能行了吗?我刚才加了一个防止更新文章同步的,用的是不一样的方法,参考wp连接微博那个插件的,如果更新日期距离发布日期小于30天就不会同步,你看看

            303室 二月 19, 2013 23:03:38
    4. 地 毯 郑永

      经过测试,存在部分问题,可能我比较挑剔:我的习惯是离线编辑器发布,测试结果是,离线编辑器发布无法同步图片,另外离线发布无法判断30天内不同步,看来还是有坎坷啊。

      二月 20, 2013 07:45:23
    5. 地 面 郑永

      那个微博连接这些问题不存在,那些钩子?

      二月 20, 2013 07:47:56
    6. 地 下 郑永

      在博客后台发布已经非常完美了。

      二月 20, 2013 07:50:33
    7. 7 楼 郑永

      貌似那个时间30天,没效果。

      二月 20, 2013 08:13:00
    8. 8 楼 郑永

      呵呵, 又来看看是否有动静。。。

      二月 20, 2013 12:57:26
    9. 9 楼 零落千起

      我只同步tx微博了

      二月 20, 2013 14:47:45
    10. 10 楼 郑永

      现在非常完美了,已修复全部bug,哈哈。。大家尽情享用。

      二月 21, 2013 03:41:36
    11. 11 楼 馒头饭madfan

      很有用的技术文!

      二月 22, 2013 13:55:44
    12. 12 楼 Obat Stroke Herbal

      tournya現在の研究では、よくアーメンはいかもしれない :guzhang:

      二月 22, 2013 15:19:56
    13. 13 楼 凤翼天堂

      :ang: 一直用社交媒体链接

      二月 22, 2013 16:23:15
    14. 14 楼 胡倡萌

      对于在后台发布文章的来说,实现同步还是比较容易的。但对于我这种习惯离线发布的来说,不知这个能否同步?

      二月 23, 2013 13:34:07
      • 小蝴蝶

        @胡倡萌 @胡倡萌 : 老郑也是习惯用离线编辑器,可以同步的~

        1401室 二月 23, 2013 15:22:26
        • 胡倡萌

          @小蝴蝶 @小蝴蝶 : 反馈一个问题,今天看到插件有更新,然后就升级了,接着就遇到一个问题:使用WLW离线发布文章,出错了“Invalid response document returned from XmlRpc server”。经过测试,只要停用这个插件,就可以正常发布文章,一旦启用就出问题,希望能解决。

          1402室 三月 10, 2013 12:26:43
          • 小蝴蝶

            @胡倡萌 对不起!昨天上传插件的时候忘记检查,你可以先替换为文章中的代码,等更新可用我会告诉你,实在抱歉!我太糊涂了

            1403室 三月 10, 2013 13:32:36
          • 小蝴蝶

            @胡倡萌 问题已经修正,如果看到有v1.2的更新就可以更新了,给萌萌带来麻烦了,>_<

            1403室 三月 10, 2013 14:32:12
    15. 15 楼 小林

      不错 不错 :guzhang:

      二月 23, 2013 15:30:47
    16. 16 楼 UFO

      :meme: 虽然看起来挺好的,但是小蝴蝶仍然有一点无法满足我的需求……

      我希望能够实现微博通自动缩略图:
      若文章没有图片,就调用随机图片,请问您知道怎么做吗?

      还望赐教 :?: 感激不尽!

      感激不尽!

      二月 23, 2013 21:54:58
      • 小蝴蝶

        @UFO @UFO : 你好~可以调用固定图片,在插件中的第二个$p = $image_url[0];}后面加上else {$p = ‘http://你想要的图片地址’;}即可,请注意括号的位置,不要改错哈~

        1601室 二月 24, 2013 01:57:47
    17. 17 楼 集趣

      这个插件好,有微博通了,一下能同步到几十个微博了

      二月 25, 2013 17:07:58
    18. 18 楼 UFO

      :roll: 这是我想实现微博通插件的功能:

      如果文章没有图片,不是一直调用同一张图片;

      而是通过下面thumbnail.php的代码,来调用主题的随机图片:

      虚心向您请教该怎么做? :?: 感谢你的热心协助!

      二月 28, 2013 20:20:44
      • 小蝴蝶

        @UFO @UFO : 把$p = 'http://example.com/image.png';//此处改为你自己的图片地址这一行改成下面的:

        $rand = mt_rand(1, 20);//20改为你图片文件夹里图片数量
        $p =  'http://XXXXXX/'.$rand.'.jpg';//XXXXXX改为你主题调用随机图的文件夹地址,'.$rand.'不动,jpg改成你自己图片后缀
        1801室 三月 1, 2013 14:49:44
        • 小蝴蝶

          @小蝴蝶 如果图片调不出来是因为你不是以1-20的数字来命名图片的,你需要把图片名称给我,我好给出具体的方法

          1802室 三月 1, 2013 15:10:35
    19. 19 楼 免费天堂

      :guai: 我发表的文章,怎么就没有触动WBTO 自动发表呢?进设置把帐号也保存了,发表了几个测试文章,微博上一个也没有显示出来,
      WBTO里面绑定的微博帐号。都是正常的,进WBTO 官网,发表微博可以正常显示出来。。。
      郁闷啊。。。。
      美女站长,帮帮忙。。研究一下看看。插件版本已更新最新版本。

      三月 14, 2013 04:48:37
    20. 20 楼 pyzhangxiang

      你好,请问你现在还能同步到微博吗,我发表文章后,微博那边没有反应,填的微博通的用户名密码应该是对,你知道怎么获得他的返回错误码吗,谢谢

      四月 28, 2013 16:43:12
    21. 21 楼 pyzhangxiang

      判断是否更新可以用wp_is_post_revision($post_id)

      四月 30, 2013 19:51:08
    22. 22 楼 pyzhangxiang

      加了个选择同步帐号的功能 http://www.shannap.com/wbto-wordpress-plugin-id-select.html

      五月 1, 2013 13:48:32
    23. 23 楼 刘荣焕

      蝴蝶仔 有时间再高一个博客同步插件吧

      五月 5, 2013 11:36:05
    24. 24 楼 Jeff

      hi,小蝴蝶,求助一下。关于文章的微博同步,我是参考http://kinggoo.com/wpsycnweibo.htm 里面的代码来成功实现的,因为需要那个自定义appkey功能(显示微博自定义来源,装b用~),现在我想请求你将那些代码升级一下,添加“自动抓取文章图片作为微博配图”的功能!相信你一定可以的,谢谢!

      六月 17, 2013 16:57:23
    25. 25 楼 华丽

      这个可以同步以前的文章吗

      七月 4, 2013 10:13:47
    26. 26 楼 网赚大侠

      希望这个微博通插件,在同步文博时,可以增加文章分类作为话题。

      比如,文章分类叫“UFO视频”,那么在微博的话题就是#UFO视频#

      呵呵,小蝴蝶能明白我的意思吧?不知道您可以新增这样的功能吗?

      七月 12, 2013 21:05:26
    27. 27 楼 HankYang

      似乎不能同步以前的文章?还是我这边没用对。
      还有,设置页面的用户名密码保存方式好不安全…

      八月 27, 2013 00:45:16
    28. 28 楼 tcdlove

      为嘛我测试的时候乱码了?字符前面有“?”

      九月 16, 2013 15:48:42
    29. 29 楼 萨龙龙

      确实在为文章通过社交网站苦恼,微博通for WP是个实用的插件。

      十月 22, 2013 16:31:52
    30. 30 楼 Han

      下载地址失效了。。

      十二月 18, 2013 15:11:11
    31. 31 楼 小任

      我始終無法同步到微博通,我增加可以觸發的transition_post_status action hook
      function wbtoPublishTo( $new_status, $old_status, $post ) {
      if ( $old_status!=’publish’ && $old_status!=’trash’ && $new_status == ‘publish’ )
      send_to_wbto();
      }
      add_action( ‘transition_post_status’, ‘wbtoPublishTo’, 10, 3 );

      ,但是文字及圖片都抓不到,只顯示 []…,有任何建義嗎?

      十二月 29, 2013 22:47:48
    32. 32 楼 静心

      你好,我想提取评论内容中图片的url,我根据网上代码写成的下面代码,但测试不对,你知道正确的写法吗?能不能帮忙改一下,谢谢。
      function catch_comment_image($comment_ID){$comment_text=
      get_comment_text($comment_ID);
      $image_url=”;
      $output=preg_match_all(‘/(http://|https://){1}.+?.(jpg|gif|bmp|bnp|png)$/is’,$comment_text,$image_url);//匹配图像格式
      $c_pic = $image_url[1][0];
      return $c_pic;}

      一月 10, 2014 22:06:37
      • 小蝴蝶

        @静心 你匹配正则写的不对,用法也不对

        function catch_comment_image(){
        $comment_text=get_comment_text( ); 
        $output=preg_match_all('/ <[img|IMG].*?src=['|"](.*?(?:[.png|.jpg|.gif|.bmp|.bnp]))['|"].*?[/]? >/',$comment_text,$match); 
        print_r( $match[1][0]);}

        然后在评论函数里comment_text();后面加上catch_comment_image() 就能调出来了

        3201室 一月 11, 2014 13:27:36
    33. 33 楼 静心

      @小蝴蝶,谢谢。。

      一月 11, 2014 17:56:17
    34. 34 楼 UFO

      可以请小蝴蝶将此插件同步到微博的动态链接代码:
      ‘.$posted->guid);

      改成根据后台设置的“固定链接”格式的代码吗?

      因为我网站的动态链接(http://www.ufo.org.in/?p=232)不知何故无法实现自动跳转……

      二月 8, 2014 23:26:58
    35. 35 楼 小伙子博客

      太棒了,正在寻找这样的方法,马上试试。

      二月 10, 2014 08:21:16
    36. 36 楼 黄酥快报

      同步到推特时,不支持自定义固定链接结构啊,只能用默认的固定链接结构

      五月 6, 2014 06:34:45
    37. 37 楼 海涛

      失效了吗?我这里无法同步呀!

      五月 7, 2014 12:53:01
    38. 38 楼 海涛

      好像不起作用呀,还无法更新到微博通了。

      五月 7, 2014 17:55:48
    39. PingBacks: 2