Words2Weibo友好同步WORDPRESS博客日志和评论到新浪微博

Words2Weibo插件能友好同步wordpress博客评论和日志到新浪微博,用的是新浪微博Basic Authorization认证,支持自定义修改微博来源显示,可以自己修改同步微博模板。(有垃圾评论过滤设置,不用担心把垃圾评论同步到自己的微博)

点击这里下载插件words2weibo

这两天又修改了下,主要是对中英文混合文字的长度计算和文字截取更精确了,插件很小,注释很详细,自己完全可以参照进行修改,我直接贴出源代码在下面,插件有两个文件words2weibo.php和include/IsgdUrlShortener.class.php
words2weibo.php源码:

<?php
/*
Plugin Name: Words2Weibo
Plugin URI: http://littlebar.tk?p=1565
Description: 实时友好同步WORDPRESS日志和评论到新浪微博。 Submit tweets to sina weibo in response to any new posts or comments on your blog.
Version: 1.0
Author: Jungle
Author URI: http://little8.com
*/

require_once(dirname(__FILE__) . '/include/IsgdUrlShortener.class.php');

/**
微博账号和API设置
*/

function update_sina_t($status){
    //修改为你自己的新浪微博账号
    $username = "你的新浪微博账号";
	//你的密码
    $password = "微博密码";
    $api_url = 'http://api.t.sina.com.cn/statuses/update.json';
	//修改为你自己的AppKey,没有可以去http://open.t.sina.com.cn/申请一个,如果懒得去的话可以用我的3827708121,只不过微博来源会显示为Words2Weibo
    $body = array( 'status' => $status,'source'=>'你的新浪AppKey');
    $headers = array( 'Authorization' => 'Basic '.base64_encode("$username:$password") );
    $request = new WP_Http;
    $result = $request->request( $api_url , array( 'method' => 'POST', 'body' => $body, 'headers' => $headers ) );
}



/**
当有评论发表时把评论同步到新浪微博
*/


function comment_post_2_sina_t($commentId){
	$sina_t = get_comment_meta($commentId, 'sina_t', true);
    if($sina_t) return;

    // 只同步经过审核APPROVED的评论
    if (!$approvalStatus) {
        $approvalStatus = wp_get_comment_status($commentId);
    }
    if (($approvalStatus == 1) || ($approvalStatus == 'approve') || ($approvalStatus == 'approved')) {
        // 获得评论
        $comment = get_comment($commentId);

        if (!$comment) {
            return;
        }
	// 由评论IP获得对应日志
	$post = get_post($comment->comment_post_ID);
	//将评论所属日志标题转换为话题
	$post_topic .= "#{$post->post_title}#";
    $comment = get_comment($commentId);
	//在评论作者前加上@
	$atcommentauthor .= "@{$comment->comment_author}";
	//获得评论对应日志链接
    $link = get_permalink($comment->comment_post_ID);

	
        // 用IS.GD缩短评论链接网址
        if ($link) {
            $link .= "#comment-{$commentId}";
            $shortener = new IsgdUrlShortener();
            $link = $shortener->shortenUrl($link);
        }
    //省略号
	$read_more_mark .= "...";
	
	//构建微博样式 即 @评论作者>#评论对应日志标题#评论内容
	$tweet = "{$atcommentauthor}>{$post_topic}{$comment->comment_content}";

	// mb_strlen+strlen计算中英文混合字符长度,如果微博超过128字(518/2个字符,预留24个字符给链接,链接在后面得算24字符12字) 
    if (strlen($tweet) + mb_strlen($tweet,'UTF8') > 512) {
	    //则截取评论前90字(180字符)
        $comm_content = mb_strimwidth(strip_tags(trim($comment->comment_content)),0,180);
		//构建新的微博样式
        $tweet = "{$atcommentauthor}>{$post_topic}{$comm_content}{$read_more_mark}";
		
    }
	

    // 如果上边的微博还是超过128字,
    if (strlen($tweet) + mb_strlen($tweet,'UTF8') > 512) {
        //截取评论前232字符(116字)
        $comm_content = mb_strimwidth(strip_tags(trim($comment->comment_content)),0,232);
		//构建新的微博样式 (去掉了{$post_topic}#评论对应日志标题#)
        $tweet = "{$atcommentauthor}>{$comm_content}{$read_more_mark}";

    }	

    //给微博加上链接
    $status = "{$tweet}{$link}";
	//执行同步更新
    update_sina_t($status);
    add_post_meta($commentId, 'sina_t', 'true', true);
}
}

/**
当有日志被发表时,发一条微博到新浪微博
*/

function publish_post_2_sina_t($postId){
    $sina_t = get_post_meta($postId, 'sina_t', true);
    if($sina_t) return;
	$post = get_post($postId);
    $link = get_permalink($postId);
	
    // 用IS.GD缩短日志链接网址
    if ($link) {
        $shortener = new IsgdUrlShortener();
        $link = $shortener->shortenUrl($link);
    }
	//将日志标题转换为话题
	$post_topic .= "#{$post->post_title}#";	
	//截取日志前80字
    $post_content = mb_strimwidth(strip_tags(trim($_POST['post_content'])),0,80);
	//省略号
	$read_more_mark .= "...";
    //构建一个自定义前缀
	$newposts .= "#自定义一个前缀不要用汉字比如我是Little8NewPost#";
	// 日志微博样式
	$tweet = "{$newposts}>{$post_topic}{$post_content}{$read_more_mark}{$link}";
    
    $status = "{$tweet}";
	//执行同步更新
    update_sina_t($status);
    add_post_meta($post_ID, 'sina_t', 'true', true);
}

// 评论发表后立即同步
add_action('comment_post', 'comment_post_2_sina_t', 0);

// 日志发表后立即同步
add_action('publish_post', 'publish_post_2_sina_t', 0);

?>

include/IsgdUrlShortener.class.php源码:

<?php

/**
Shorten a URL, using an external API. 
缩短获得的网址,默认用IS.GD短网址服务,你可以自己更换apiURL,使用不同短网址服务。
This uses the IS.GD shortener by default. YOU can change the apiURL as you wish.
*/
class IsgdUrlShortener {
    var $apiUrl;

    function __construct() {
        $this->apiUrl = 'http://is.gd/api.php?longurl=';
    }

    /**
    Shorten a URL so that it'll show up nicely in a tweet. (And so that our tweet isn't too long).缩短网址,这样微博字数不会太多。
    */
    function shortenUrl($link) {
        $link = urlencode($link);
        $url = $this->apiUrl . $link;
        $c = curl_init($url);
        curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
        $short = curl_exec($c);
        curl_close($c);
        return $short;
    }
}

?>

注意上传前请把words2weibo.php中

//14行   
$username = "你的新浪微博账号";
//15行    
$password = "微博密码";
//17行    
$body = array( 'status' => $status,'source'=>'你的新浪App Key');
//108行	 
 $newposts .= "#自定义一个前缀不要用汉字比如我Little8NewPost#";

分别替换为你自己的相关信息 比如:

    $username = "words2weibo@sina.com";
    $password = "love3344520";
    $body = array( 'status' => $status,'source'=>'3827708121');
    $newposts .= "#Little8NewPost#";

如果你没有APP KEY 可以去新浪微博开放平台申请一个就能用了,但要通过审核之后才会在新浪微博里显示你的微博来源。

同步到新浪微博的效果如下:
Words2Weibo 同步到新浪微博后微博样式

//多余的话↓

默认同步日志到新浪微博模板:
自定义前缀+#日志标题#+日志前80字内容+省略号…+日志链接(为IS.GD短网址)

默认同步评论到新浪微博模板:
@评论作者+#评论对应日志标题#+评论内容+评论链接(为IS.GD短网址)
如果消息长度大于140字则只截取 评论内容 前90字(可自定义)
如果仍然超过140字则 去掉#评论对应日志标题# 并截取评论前116字

如果只想同步日志或者评论删除对应代码则可。

关于同步博客到微博的纠结了很久,各种同步方法几乎都尝试过,相关日志也写了好几篇,但无奈自己不懂PHP,基本上都是用他人做好的插件,但这些插件总是不能满足自己想要的效果,于是自己常常瞎折腾。抄来抄去,最近几天终于折腾出一个自己的插件能满足自己的需求。

28 Comments

Add a Comment

Your email address will not be published.