I’m qiqiboy !

  • Yes,I’m qiqiboy ! And my vision is world peace.
Home
|
Program 更新《同步WordPress日志更新信息到twitter》,添加标签信息同步

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

| Categories: Program

最新进展:已将此功能写成插件,功能更多,使用更方便。下载地址: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】。

声明: 本站遵循 署名-非商业性使用 3.0 共享协议. 转载请注明转自 I’m qiqiboy !
close

23 Responses to this post.

Comments (21) Trackbacks (2)
You can leave a response or Trackback this entry .
  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,添加标签信息同步》的基础上,经过略微修改,丰富相关设置后发布的一款插件。 [...]

Leave a Reply

avatar-default
Hi, I know you have something to tell me. Please leave me a reply.

You input 0 characters.