PHP實現微博的同步發送

準備工做php

 

做爲新浪微博的開發者,須要有身份驗證;html

我的身份認證的審覈,通常一個工做日;web

接着是提交網站的審覈,境內的就是提交備案號。境外的提交所在網站的境外證實便可;也是一個工做日左右;api

經過我的身份審覈以後,就能夠建立應用、調用接口了,這時獲得的權限相對低點;服務器

網站不提交審覈或未經過審覈,對發微博沒有影響;只是在發的微博下面會顯示"未審覈應用";app

審覈以後顯示的爲網站應用名稱:image函數

 



調用接口工具

 

微博開放平臺提供了測試工具;post

在開發接入以前,首先得保證經過這個測試工具能將測試微博發出去;測試

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;

}

相關文章
相關標籤/搜索