程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP實現微博的同步發送

PHP實現微博的同步發送

編輯:關於PHP編程

 

導讀:在設計博客類站點時,有時會需要在發布文章時同步發布在微博上。本文闡述了實現該功能的基本方式。



  准備工作   作為新浪微博的開發者,需要有身份驗證; 個人身份認證的審核,一般一個工作日; 接著是提交網站的審核,境內的就是提交備案號。境外的提交所在網站的境外證明即可;也是一個工作日左右; 通過個人身份審核之後,就可以創建應用、調用接口了,這時得到的權限相對低點; 網站不提交審核或未通過審核,對發微博沒有影響;只是在發的微博下面會顯示"未審核應用"; 審核之後顯示的為網站應用名稱:image  

調用接口   微博開放平台提供了測試工具; 在開發接入之前,首先得保證通過這個測試工具能將測試微博發出去; http://open.weibo.com/tools/console?uri=statuses/update&httpmethod=POST&key1=status&value1=%E5%BE%AE%E5%8D%9A%E6%9D%A5%E8%87%AAAPI%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7   發微博的api參考文檔為: http://open.weibo.com/wiki/2/statuses/update   所有發微博的接口都需要權限認證;認證通過之後會得到一個access_token(訪問密鑰);密鑰的有效期根據用戶等級的不同而有所區別; 未通過web審核的為1天;審核通過的普通用戶為7天; 在有效期內,不用再與新浪服務器交互來進行權限認證,只要本地保存有這個token,就可以用來調用各種微博api(讀、寫、獲取聽眾信息等)  

權限認證   權限認證有三種方式:   通過用戶名和密碼; 這個最易懂,在程序中寫好微博帳號的用戶名和密碼,通過api調用來認證;但需要注意的是這個接口是提供給開發app來使用的,web應用無法使用;   通過web回調方式; 需要與sina server交互,並提供回調地址;在回調地址中得到access_token;   第三種為code方式,未細看,略過; web應用只支持第二種授權方式;以下詳細說明第二種方式的使用:   下載新浪提供的SDK,裡面有demo和api封裝類; http://open.weibo.com/wiki/SDK  

接入頁面
  ==call.php========================
 
include_once(  'sina_config.php' ); include_once( 'saetv2.ex.class.php' );   //獲取到授權的url $o = new SaeTOAuthV2( WB_AKEY , WB_SKEY  ); $code_url = $o->getAuthorizeURL( WB_CALLBACK_URL );   //post或get方式調用該url,取得授權;授權完成後,新浪會調用我們這邊傳過去的回調地址:WB_CALLBACK_URL  request()->redirect($code_url);


回調地址頁面(WB_CALLBACK_URL):
===callback.php====================
$o = new SaeTOAuthV2( WB_AKEY , WB_SKEY ); if (isset($_REQUEST['code'])) {     $keys = array();     $keys['code'] = $_REQUEST['code'];     $keys['redirect_uri'] = WB_CALLBACK_URL;     try {         $token = $o->getAccessToken( 'code', $keys ) ;     } catch (OAuthException $e) {         echo "weibo.com get access token err.";         LOG_ERR("weibo.com get access token err.");         return ;     } }   if ($token) {     //取到授權後的api調用密鑰,可用存起來,在有效期內多次調用api接口就不用再授權了     $_SESSION['token'] = $token;     $c = new SaeTClientV2( WB_AKEY , WB_SKEY , $_SESSION['token']['access_token'] );     $ret = $c->update( $weiboStr );    //發送微博     if ( isset($ret['error_code']) && $ret['error_code'] > 0 ) {         $str = "Weibo.com Send failed. err info:" . $ret['error_code'] . '/' . $ret['error'];         LOG_ERR($str);     } else {         LOG_INFO("Weibo.com Send Success.");     } }

  博客的摘要提取   微博的字數為140字;其中漢字為1個字;我們使用計數函數得有所選擇;對一個漢字,strlen()算為3個字符,而多字節統計函數mb_strlen()算1個字,符合我們的使用要求; 最後在發的微博中需要清除html標記和& nbsp;等  
    //獲取當前微博內容(140字)     public function getWeibo()     {         $titleLen = mb_strlen($this->title, 'UTF-8');                 //140字除去鏈接的20個字和省略符;剩115字左右,需要說明的是鏈接:無論文章的鏈接多長,在微博裡都會被替換成短鏈接,按短鏈接的長度來計算字數;                 $summaryLen = 115 - $titleLen ;            $pubPaper = cutstr_html($this->summary);         if(mb_strlen($pubPaper, 'UTF-8')  >= $summaryLen)             $pubPaper = mb_substr($pubPaper,0,$summaryLen,'UTF-8');           $pubPaper = sprintf('【%s】%s...%s', $this->title , $pubPaper , aurl('post/show', array('id' => $this->id)));           return $pubPaper;     }   //完全的去除html標記 function cutstr_html($string) {     $string = strip_tags($string);     $string = preg_replace ('/n/is', '', $string);     $string = preg_replace ('/ | /is', '', $string);     $string = preg_replace ('/ /is', '', $string);       return $string; }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved