三月
25

同步WordPress日志更新信息到twitter

本文中方法已经更新,请移步至
更新《同步WordPress日志更新信息到 twitter》,添加标签信息同步

许多人喜欢在更新博客后立马到twitter上吼一下,我用了twitter后也不例外,但我想通过一种更便捷、自动的方式来通知。

我的要求有下:

1.发布日志之后立即在twitter上出现相应的更新信息;

2.刚发布的日志可能会在刚发布一段时间内稍作修改,此时不应该重复再发布更新信息。(其实这个你即使不专门用程序来做这个,只要你的日志标题、url不变,就不会发生重复发布的尴尬,因为twitter也有相同的信息不能连续发布的规则。)

3.如果早期文章有所修改,twitter上也可相应显示相关信息,但是指明这个在“修改一篇文章”。

我的代码如下:

add_action('publish_post', 'get_post_message');
function get_post_message($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 = $mypost->short_url;//这里是从我的数据库中获取文章短网址,你可以删除掉这行
        if ($shortlink=="") //没有取得短网址,就再去获取
        {
        $shortlink = "http://u.boy.im/api.php?url=" . $postlink;
        }
        $url_contents = file_get_contents($shortlink);
        $temp_length = (strlen($title)) + (strlen($url_contents));
        if($temp_length > 137)//限制字符长度,长度大于137的截断,留三个字符用来加“...”
        {
            $remaining_chars = 134 - strlen($url_contents);
            $title = substr($title, 0, $remaining_chars);
            $title = $title . "...";
        }
        $message = $title . " - " . $url_contents;
        return (wp_to_twitter($message));
    }
}
 
function wp_to_twitter($message)
{
        $username = "twitter用户名";
        $password = "密码";
        $url = 'http://twitter.com/statuses/update.xml';//国外用户使用这个,国内的用户则通过下面的api代理来发布。(代理可能会不稳,出现更新失败)
        //$url = 'http://nest.onedd.net/api/statuses/update.xml';
        /*这里有两种方法,一种是使用curl函数,如果你的主机不支持curl函数,则还可以使用下面一种。
        $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");
        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 wp_to_sina($message){}//如果你还有其它同步到其它微博的需求,可在此继续。。。
function wp_to_163($message){}
...

虽然有第三方提供同步到各个微博的服务,比如“Follow5“等,但是毕竟会有延迟。希望体验及时、无缝更新的可以试试我这种方法。

需要注意的是,twitter发布接口你还可以更改为你自己的api代理,寻求更稳定的状态。短网址你也可以使用其他短网址服务提供的api接口。程序中所用短网址程式是我自己使用的。

注:本文即通过此方式同步到twitter。wp to twitter

2010.03.26 21:10最新更新:

注:对于使用WLW客户端用户,在修改早期文章时,可能不会显示“博文修改”字样,依然是“博客更新”。若要正确显示“博文修改”,请最好使用wp后台修改文章。

本文标签: , , ,

分享

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

这篇文章已经有 54 条评论

Comments (52) Trackbacks (2)
You can leave a response or Trackback this entry .
  1. 丕子 -#21

    这个不错 参考一下修改

  2. 万戈 -#22

    亲奶滴 qiqibaby 我来求证下,这个方法还管用不?我在新主题上试了不行。。。

  3. Maplews -#23

    好东西啊,强大了。支持一下

  4. 我小白 -#24

    博主,这个同步 怎么用啊。
    代码添加到哪里?如何操作 请您赐教

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

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

  2. 插件发布:little wp to twitter

    [...] wp to twitter(sina)是我结合此前前两篇日志《 同步WordPress日志更新信息到twitter》《更新 同步WordPress日志更新信息到 [...]

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: