龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

php 让微博通 WordPress 插件支持选择同步

时间:2014-06-24 15:18来源:网络整理 作者:网络 点击:
分享到:
让微博通 WordPress 插件支持选择同步 本文转自我的博客lt;http://www.shannap.com/wbto-wordpress-plugin-id-select.htmlgt;并不想每篇文章都同步到全部的微博上,所以修改了下微博通的插件,发文时可以

本文转自我的博客 http://www.shannap.com/wbto-wordpress-plugin-id-select.html

并不想每篇文章都同步到全部的微博上,所以修改了下微博通的插件,发文时可以选择性地同步微博

基础代码是 小蝴蝶 开发的 1.2 版本 (下载),支持截取摘要和图片。 我的修改主要就是在编辑文章页面添加选项框,选择要同步的微博帐号。

postweibo

首先在微博通绑定帐号后,每个帐号都会有个ID ,我们需要获得它。 这个 ID 微博通上好像并没有提供查看的地方,一开始我搞错了,试了各种 ID 都不对,最后在它的"发微博页面",通过看 html 代码才算找到。

一般浏览器都有提供查看页面源代码的功能,打开后搜索你的微博名字,找到对应的 checkbox 元素,记下 ID。 有 chrome 的话,在下图中微博帐号名字的地方,右键菜单 -> 审查元素,可以找到该绑定帐号的 ID。

postweibo-2

postweibo-3

然后在 wbto.php 中添加如下代码

add_action( 'add_meta_boxes', 'add_weibo_box' );

// 为文章和页面编辑界面添加一个选项框
function add_weibo_box() {
    add_meta_box( 'ghost_post_weibo', 'Post Weibo', 'inner_add_weibo_box', 'post', 'side', 'high' );
    add_meta_box( 'ghost_post_weibo', 'Post Weibo', 'inner_add_weibo_box', 'page', 'side', 'high' );    
}

// 添加checkbox, value 的值就是微博通中找到的 ID
// 我这里填了三项,你可以根据自己的需要修改
function inner_add_weibo_box( $post ) {
    echo '<div> <input type="checkbox" id="weibo_pyzhangxiang" name="weibo_pyzhangxiang" value="1551234" /> @py张翔</div>';

    echo '<div> <input type="checkbox" id="weibo_piecerepeat" name="weibo_piecerepeat" value="1552234" /> @pp复读机-学外语</div>';

    echo '<div> <input type="checkbox" id="qq_123465808" name="qq_123465808" value="1553234" /> @123465808</div>';
}

在 send_to_wbto 函数中添加下面代码中注释的部分

function send_to_wbto($post_ID) {

    // 获取要同步的目标微博,如果没有则不同步,和 inner_add_weibo_box 函数中设置的项目对应
    $weibo_zx = isset( $_POST['weibo_pyzhangxiang'] ) ? $_POST['weibo_pyzhangxiang'] : false; 
    $weibo_pp = isset( $_POST['weibo_piecerepeat'] ) ? $_POST['weibo_piecerepeat'] : false; 
    $weibo_qq = isset( $_POST['qq_123465808'] ) ? $_POST['qq_123465808'] : false;

    $aid = '';
    if($weibo_zx)
    {
        $aid = $weibo_zx;
    }
    if($weibo_pp)
    {
        if($aid == '')
            $aid = $weibo_pp;
        else
            $aid .= ',' . $weibo_pp;
    }
    if($weibo_qq)
    {
        if($aid == '')
            $aid = $weibo_qq;
        else
            $aid .= ',' . $weibo_qq;
    }
    if($aid == '')
        return ;
    ////////////////////////////////////////////////////////

    $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)) { 
        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,'...'); 
    $fields = array();
    $fields['source'] = 'wordpress';
    $fields['content'] = urlencode('['.$posted->post_title.']'.mb_strimwidth(strip_tags($excerpt),0,130,'...').' '.$posted->guid); 

    // 设置 aid 参数,根据微博通的 API,该参数就是用于选择发布微博的帐号,以逗号隔开,不填的话默认为 0,即全部发布
    $fields['aid'] = $aid;
    //////////////////////////////////////////

    $ch = curl_init();
    if ($image_url) { 
        $fields['imgurl'] =$image_url;
        curl_setopt($ch, CURLOPT_URL, "http://wbto.cn/api/upload.json"); 
    } 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);
}

若要把该功能做成插件,则需要在配置页面提供添加删除帐号的功能,这段时间较忙,以后有空再搞。

精彩图集

赞助商链接