微博通for 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');//动作在发布文章时触发
    ?>
    152 Comments

    Name *

    E-mail *

    Website

    1. torrace

      很感谢你的插件,但是不知道为什么一直无法抓取到图片?
      文章使用的是题图

    2. 卧室小白

      可以自定义微博来源吗,比如自定义来自享拍微博通

    3. 小饶同学

      wp新手
      安装了你这个,同步失败,
      微博通官方有个,同步正常,但只是标题+链接
      不知道你这个当前版本支持wordpress 4.0么?

    4. jinengku

      采集提交文章才可以,直接后台写文章根本不能发送到微博

    5. Yang

      客户端发布内容无法同步么?

    6. 山炮印象

      我就是来找他的谢谢。