本文中方法已经更新,请移步至
更新《同步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。
2010.03.26 21:10最新更新:
注:对于使用WLW客户端用户,在修改早期文章时,可能不会显示“博文修改”字样,依然是“博客更新”。若要正确显示“博文修改”,请最好使用wp后台修改文章。