/**

* 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;

}