三月
30

更新《同步WordPress日志更新信息到twitter》,添加标签信息同步

最新进展:已将此功能写成插件,功能更多,使用更方便。下载地址:WordPress官方地址

如果你是一名折腾用户,欢迎使用以下代码集成在自己的主题中。

如果你对php代码不太感冒,对wp结构不太清楚,欢迎试用本插件。

插件下载:地址暂未提供,稍后放出。提前体验,可留言索要。

在上一篇日志《同步WordPress日志更新信息到twitter》,我简单提供了一种实时同步相关信息到推特的方法。

我注意到,twitter上有些同学更新的信息中带有文章标签,在twitter中表现就是前面带有“#”号,此种形式在twitter中应该叫“话题”。于是我也更新了我的方法,加入了更新标签信息的功能。

具体操作就是:

1.每个标签前面加上“#”;

2.如果{标题+url}长度已经大于140,则不加入标签信息,否则则加入标签。

3.加入标签信息后长度大于140,则需要截断标签。原则是要一个标签一个标签的裁掉,不能将一个完整的标签截断。比如一篇日志五个标签,由于大于了限制长度,所以要减少标签数量,但不能将”#标签1 #标签2 #标签3 #标签4 #标签5”给截断成”#标签1 #标签2 #标签3 #标”。截断后是”#标签1 #标签2 #标签3 ”或者”#标签1 #标签2“形式。

另外还有就是之前用substr()截断,容易产生乱码。有条件的同学可以使用mb_substr(),如果你的主机也是不支持mb,可自行上网搜寻一个中文字符截断函数。

原先使用strlen()计算字符长度,其实这个函数会将中文字符当做三个字符计算,所以我提供了一个可以正确计算包含中文字符在内的函数以代替strlen();

add_action('publish_post', 'get_update_post_info');
 
function get_update_post_info($id)
{
    if($_POST['action'] != "autosave" and $_POST['post_status'] != "draft")
    {
        $mypost = get_post($id);
        $title = strip_tags(get_the_title($id));
        $postlink = get_permalink($id);
        if($_POST['original_post_status'] == 'publish')
        {
            if (time() - strtotime($mypost->post_date) < 60*60*24*1 )
            {
                return;
            }
            $title = "【博文修改】" . $title;
        }
        else
        {
            $title = "【博客更新】" . $title;
        }
        $shortlink = "http://u.boy.im/api.php?url=" . $postlink;
        $url_contents = file_get_contents($shortlink);
        $temp_length = (str_len($title)) + (str_len($url_contents));
        if($temp_length > 137)
        {
            $remaining_chars = 134 - str_len($url_contents);
            if (function_exists(’mb_string’)) //如果你的主机支持mb扩展
            {
                $title = mb_substr($title, 0, $remaining_chars);
            } else
            {
             $title = substr($title, 0, $remaining_chars);
            }
            $title = $title . "...";
        }
        $message = $title . " - " . $url_contents;
        //以上是之前的代码,以下为新加内容
        $message_length = str_len($message);
        $tags = wp_get_post_tags($mypost->ID);
        $tagcount = count($tags);//计算标签数目
        if ($tagcount > 0)
        {
            $tag[0] = "#" . $tags[0]->name;//第一个标签前加“#”
            $tag_length[0] = str_len($tag[0]);
            for ($i=1;$i < $tagcount;$i++)
            {
                $tag[$i] = $tag[$i-1]." #" . $tags[$i]->name;
                $tag_length[$i] = str_len($tag[$i]);
            }
            /*从包含所有标签的字符串开始计算,直到找出那个符合条件(加上此标签字符串不大于140)的*/
            for ($j = $tagcount-1;$j >= 0;$j--)
            {
                if ((139 - $message_length) >= $tag_length[$j])
                {
                    $ok = $j;
                    break;
                }
            }
            $message .= " ".$tag[$ok];//连接符合条件的标签字符串
        }
        wp_to_twitter($message);
    }
}
 
function wp_to_twitter($message)//同步到twitter
{
        $username = "用户名";
        $password = "密码";
        $url = 'http://twitter.com/statuses/update.xml';//国外用户使用这个,国内的用户则通过下面的api代理来发布。(代理可能会不稳,出现更新失败)
        //$url = 'http://nest.onedd.net/api/statuses/update.xml';
        $curl_handle = curl_init();
        curl_setopt($curl_handle, CURLOPT_URL, "$url");
        curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
        curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl_handle, CURLOPT_POST, 1);
        curl_setopt($curl_handle, CURLOPT_POSTFIELDS, "status=$message&source=qiqiboy.com");
        curl_setopt($curl_handle, CURLOPT_USERPWD, "$username:$password");
        $buffer = curl_exec($curl_handle);
        curl_close($curl_handle);
/*        
        $body = array( 'status'=>$message );
        $headers = array( 'Authorization' => 'Basic '.base64_encode("$username:$password") );
        $request = new WP_Http;
        $result = $request->request( $url , array( 'method'=>'POST', 'body'=>$body, 'headers'=>$headers) );    
*/
}
function str_len($str)//计算中文字符长度函数
{
    $length = strlen(preg_replace('/[\x00-\x7F]/', '', $str));
    if ($length)
    {
        return strlen($str) - $length + intval($length / 3) ;
    }
    else
    {
        return strlen($str);
    }
}

我自己用的还会同步到新浪微博,但是新浪微博的话题形式是一个标签包含在两个”#”中,所以需要对代码稍作修改。如果你需要相关代码,可联系我。捕获 捕获2

针对某些人考虑将密码以明文形式放在function.php中的安全问题,我有打算将这个完备成一个插件,届时还将加入更多同步内容与设置功能。如果你有好的想法或者关于同步的更好建议,欢迎在此与我交流或者twitter上FO我【@qiqiboy】。

本文标签: , , , ,

分享

本文短网址: http://qiqi.boy.im/22

这篇文章已经有 27 条评论

Comments (23) Trackbacks (4)
You can leave a response or Trackback this entry .
  1. A.shun -#1

    沙发,越来越完善了呢~

  2. 万戈 -#2

    这个好,晚上试试!

  3. leesum -#3

    很实用的功能。。。

  4. 麦叔 -#4

    虽然你代码写的很好,但是你的博客字体颜色看着真累。
    代码写得再好有什么用,用户体验才是第一哇!

    • QiQiBoY --#1

      @ 麦叔 : 这个。。。。我真不是搞前端的,如何配色我实在不懂。。 :oops:

    • 麦叔 --#2

      @ QiQiBoY : 其实我也不是搞网站写代码的,不过站在一个浏览者的角度来说,这里的文字太模糊了。

  5. 小邪 -#5

    嘿嘿,强力支持中,忽然又想到了见鬼的墙 ~ 【= =】

  6. zwwooooo -#6

    正在测试插件,但目前文囧,无法测试,拿些老文章修改一下看看,呵呵

  7. zwwooooo -#7

    反馈一下:twitter的标签 #xxxx 没有链接,新浪的就有。

    • QiQiBoY --#1

      @ zwwooooo : 嗯,注意到了,twitter官方网站只有比较热门词汇才会自动加链接,比如WordPress,blog等词。。但在Twitese等第三方twitter托管程序中,都会加上连接的。。
      新浪是只要放在两个 #之间都会自动链接。。

  8. hzlzh -#8

    这个插件很多人在用啦,毕竟同步这个要求势不可挡。
    对了建议试试 feedburner 里面的 twitter 同步,也很及时 可以加 #tags 我用的就是

  9. hzlzh -#9

    突然发现还可以同步到 新浪T,嘿嘿 立马去按了试试

  10. 卢松松 -#10

    也就是不翻墙也能更新twitter了?

  11. xiao3 -#11

    恩~这个似乎要是修改文章的话会再次发一腿!我以前的那个代码就是这样的!

  12. -#12

    mark。。。立刻去试试~~~

  13. 奚少 -#13

    拿下试试去咯~

  14. biblo eda -#14

    What is an e-mail address I wonder?

  1. 同步WordPress日志更新信息到twitter

    [...] 同步WordPress日志更新信息到twitter Leave a commentGo to comments[38] 19:53|Categories: Program close 本文中方法已经更新,请移步至 更新《同步WordPress日志更新信息到 twitter》,添加标签信息同步 [...]

  2. 插件发布:little wp to twitter

    [...] little wp to twitter(sina)是我结合此前前两篇日志《 同步WordPress日志更新信息到twitter》《更新 同步WordPress日志更新信息到 twitter,添加标签信息同步》的基础上,经过略微修改,丰富相关设置后发布的一款插件。 [...]

  3. 杜小白之家

    [...] 刚开始,我用了一个网站,twitterfeed.com (需翻墙),注册帐号,把博客的RSS地址绑定到Twitter帐号上就好。但后面我发现,有一个问题就是发布的更新,没有链接,这是很不好的。于是就使用上了插件,详细情况请看QiQiBOY,插件还没试成过,这个日志将是第一个测试贴。当然网上也有一些免插件实现的,大家可以去搜搜,大约就是把插件代码插入Function.php. [...]

  4. «Les vents ont probablement atteint les 120 km/h en Belgique»

    [...] silencieux watercooling pc silencieux 2008 pc silencieux puissant pc silencieux pas cher pc silencieux config pc silencieux ldlc Share this:TwitterFacebook"Aimer" ceci [...]

Leave a Reply

Hi , say something.

  • :?:
  • :razz:
  • :sad:
  • :evil:
  • :!:
  • :smile:
  • :oops:
  • :grin:
  • :eek:
  • :shock:
  • :???:
  • :cool:
  • :lol:
  • :mad:
  • :twisted:
  • :roll:
  • :wink:
  • :idea:
  • :arrow:
  • :neutral:
  • :cry:
  • :mrgreen: