/**
* WordPress 釋出文章同步到新浪微博 (帶圖片& 自定義欄目版)
* 文章地址:http://zhangge.net/4947.html
*/
functionpost_to_sina_weibo($post_ID){
/* 鑑於很多朋友反饋釋出文章空白,臨時加上除錯程式碼,若無問題可刪除此行,若有問題請將錯誤資訊在本文留言即可 */
ini_set('display_errors',true);
/* 此處修改為透過文章自定義欄目來判斷是否同步 */
if(get_post_meta($post_ID,'weibo_sync',true)==1)return;
$get_post_info=get_post($post_ID);
$get_post_centent=get_post($post_ID)->post_content;
$get_post_title=get_post($post_ID)->post_title;
if($get_post_info->post_status=='publish'&&$_POST['original_post_status']!='publish'){
$appkey='1034947262';/* 此處修改為你的新浪微博 appkey */
$username='微博使用者名稱';
$userpassword='微博密碼';
$request=newWP_Http;
$keywords="";
/* 獲取文章標籤關鍵詞 */
$tags=wp_get_post_tags($post_ID);
foreach($tags as$tag){
$keywords=$keywords.'#'.$tag->name."#";
}
/* 修改了下風格,並新增文章關鍵詞作為微博話題,提高與其他相關微博的關聯率 */
$string1='【文章釋出】'.strip_tags($get_post_title).':';
$string2=$keywords.' 檢視全文:'.get_permalink($post_ID);
/* 微博字數控制,避免超標同步失敗 */
$wb_num=(138-WeiboLength($string1.$string2))*2;
$status=$string1.mb_strimwidth(strip_tags(apply_filters('the_content',$get_post_centent)),0,$wb_num,'...').$string2;
/* 獲取特色圖片,如果沒設定就抓取文章第一張圖片 */
if(has_post_thumbnail()){
$timthumb_src=wp_get_attachment_image_src(get_post_thumbnail_id($post_ID),'full');
$url=$timthumb_src[0];
/* 抓取第一張圖片作為特色圖片,需要主題函式支援 */
}elseif(function_exists('catch_first_image')){
$url=catch_first_image();
}
/* 判斷是否存在圖片,定義不同的介面 */
if(!empty($url)){
$api_url='https://api.weibo.com/2/statuses/upload_url_text.json';/* 新的 API 介面地址 */
$body=array('status'=>$status,'source'=>$appkey,'url'=>$url);
}else{
$api_url='https://api.weibo.com/2/statuses/update.json';
$body=array('status'=>$status,'source'=>$appkey);
}
$headers=array('Authorization'=>'Basic '.base64_encode("$username:$userpassword"));
$result=$request->post($api_url,array('body'=>$body,'headers'=>$headers));
/* 若同步成功,則給新增自定義欄目 weibo_sync,避免以後更新文章重複同步 */
add_post_meta($post_ID,'weibo_sync',1,true);
}
}
add_action('publish_post','post_to_sina_weibo',0);
/*
//獲取微博字元長度函式
*/
functionWeiboLength($str)
{
$arr=arr_split_zh($str); //先將字串分割到陣列中
foreach($arr as$v){
$temp=ord($v); //轉換為 ASCII 碼
if($temp>0&&$temp<127){
$len=$len+0.5;
}else{
$len++;
}
}
returnceil($len); //加一取整
}
/*
//拆分字串函式, 只支援 gb2312 編碼
//參考:http://u-czh.iteye.com/blog/1565858
*/
functionarr_split_zh($tempaddtext){
$tempaddtext=iconv("UTF-8","GBK//IGNORE",$tempaddtext);
$cind=0;
$arr_cont=array();
for($i=0;$i<strlen($tempaddtext);$i++)
{
if(strlen(substr($tempaddtext,$cind,1))>0){
if(ord(substr($tempaddtext,$cind,1))<0xA1){//如果為英文則取 1 個位元組
array_push($arr_cont,substr($tempaddtext,$cind,1));
$cind++;
}else{
array_push($arr_cont,substr($tempaddtext,$cind,2));
$cind+=2;
}
}
}
foreach($arr_cont as&$row)
{
$row=iconv("gb2312","UTF-8",$row);
}
return$arr_cont;
}