經常上新浪微博并且關注了不少官網認證號的小伙伴一定會發現很多官方性質的微博都會把網站的最新文章或者動態同步到新浪微博這樣一來就可以讓微博用戶快速 的了解到網站的最新動態,并且也為網站增加了一個曝光以及流量入口,對于更新頻繁的網站來說增加一個同步網站動態到微博的功能是非常有必要的,也不扯淡 了,直接上代碼:
- class?sync_sina?{
- ????public?$access_token?=?"";
- ????public?$default_image?=?"";
- ????public?$host?=?"https://api.weibo.com/2/";
- ????public?static?$boundary?=?'';
- ????function?__construct(){
- ????????
- ????????add_action('publish_post',?array($this,?'new_post_photo'));
- ????}
- ????function?do_mu_post($url,?$data)?{
- ????????$ch?=?curl_init?();
- ????????$headers?=?array("Content-Type:multipart/form-data;boundary=".?self::$boundary);
- ????????$ch?=?curl_init();
- ????????curl_setopt($ch,?CURLOPT_HTTPHEADER,?$headers);
- ????????curl_setopt?(?$ch,?CURLOPT_RETURNTRANSFER,?TRUE?);
- ????????curl_setopt?(?$ch,?CURLOPT_POST,?TRUE?);
- ????????curl_setopt?(?$ch,?CURLOPT_POSTFIELDS,?$data?);
- ????????curl_setopt?(?$ch,?CURLOPT_URL,?$url?);
- ????????curl_setopt?(?$ch,?CURLOPT_SSL_VERIFYPEER,?FALSE);
- ????????$ret?=?curl_exec?(?$ch?);
- ????????curl_close?(?$ch?);
- ????????return?$ret;
- ????}
- ????function?build_http_query_multi($params)?{
- ????????if?(!$params)?return?'';
- ????????uksort($params,?'strcmp');
- ????????$pairs?=?array();
- ????????self::$boundary?=?$boundary?=?uniqid('------------------');
- ????????$MPboundary?=?'--'.$boundary;
- ????????$endMPboundary?=?$MPboundary.?'--';
- ????????$multipartbody?=?'';
- ????????foreach?($params?as?$parameter?=>?$value)?{
- ????????????if(?in_array($parameter,?array('pic',?'image'))?&&?$value{0}?==?'@'?)?{
- ????????????????$url?=?ltrim(?$value,?'@'?);
- ????????????????$content?=?file_get_contents(?$url?);
- ????????????????$array?=?explode(?'?',?basename(?$url?)?);
- ????????????????$filename?=?$array[0];
- ????????????????$multipartbody?.=?$MPboundary?.?"rn";
- ????????????????$multipartbody?.=?'Content-Disposition:?form-data;?name="'?.?$parameter?.?'";?filename="'?.?$filename?.?'"'.?"rn";
- ????????????????$multipartbody?.=?"Content-Type:?image/unknownrnrn";
- ????????????????$multipartbody?.=?$content.?"rn";
- ????????????}?else?{
- ????????????????$multipartbody?.=?$MPboundary?.?"rn";
- ????????????????$multipartbody?.=?'content-disposition:?form-data;?name="'?.?$parameter?.?""rnrn";
- ????????????????$multipartbody?.=?$value."rn";
- ????????????}
- ????????}
- ????????$multipartbody?.=?$endMPboundary;
- ????????return?$multipartbody;
- ????}
- ????function?get_image($post_id){
- ????????if(?has_post_thumbnail($post_id)?){
- ????????????$timthumb_src?=?wp_get_attachment_image_src(get_post_thumbnail_id($post_id),'full');
- ????????????$output?=?$timthumb_src[0];
- ????????}?else?{
- ????????????$content?=?get_post_field('post_content',?$post_id);
- ????????????$defaltthubmnail?=?$this->default_image;
- ????????????preg_match_all('/<img.*?(?:?|\t|\r|\n)?src=['"]?(.+?)['"]?(?:(?:?|\t|\r|\n)+.*?)?>/sim',?$content,?$strResult,?PREG_PATTERN_ORDER);
- ????????????$n?=?count($strResult[1]);
- ????????????if($n?>?0){
- ????????????????$output?=?$strResult[1][0];
- ????????????}?else?{
- ????????????????$output?=?$defaltthubmnail;
- ????????????}
- ????????}
- ????????return?$output;
- ????}
- ????function?new_post_photo($post)?{
- ????????global?$post;
- ????????if(?$post->post_status?!=?"publish"?){
- ????????????$token?=?$this->access_token;
- ????????????$url?=?$this->host?."statuses/upload.json";
- ????????????$status?=?"我剛剛發布了新文章《".get_the_title()."》。".get_permalink();
- ????????????$status?.=?mb_strimwidth(strip_tags(apply_filters('the_content',?$post->post_content)),?0,180,"...");?
- ????????????$pic_path?=?self::get_image($post->ID);
- ????????????$params?=?array();
- ????????????$params['access_token']?=?$token;
- ????????????$params['status']?=?$status;
- ????????????$params['pic']?=?'@'.$pic_path;
- ????????????$body?=?self::build_http_query_multi($params);
- ????????????$result?=?self::do_mu_post($url,$body);
- ????????}
- ????}
- }
- $HMT?=?new?sync_sina();
以上代碼添加至主題functions.php文件即可。
注意:
需要服務器支持file_get_contents函數以及curl組件;
如果網站在國外服務器或者服務因特殊原因屏蔽了api.weibo.com域名,則可能造成發布文章卡死或者超時的問題。
如果網站未通過新浪審核微博小尾巴會顯示為未審核應用。
文章參考:http://www.mywpku.com/wordpress-sync-sina-weibo.html