/**

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

}