最近仕事で http://weibo.com/at/weibo のデータを取得する必要があります。インターフェースはなく、ページを取得することによってのみ取得できます。コードの一部を以下に掲載します 出典:
http://サマーブルート.com/704
- /**
- * CJ (http://www.Summerbluet.com) による Sina Weibo ログインのシミュレートに使用されます
- */
- /**プロジェクトパスを定義する*/
- define('PROJECT_ROOT_PATH' , dirname(__FILE__));
- define('COOKIE_PATH' , PROJECT_ROOT_PATH );
- // ユニバーサルタイムスタンプ
- define('TIMESTAMP', time());
- // 問題が発生したときにオンにでき、デバッグ用に現在のフォルダーの下に LOG ファイルが作成されます
- define('DEBUG' , false);
- /**模擬ログインに使用される Sina アカウント*/
- $username = "";
- $password = "";
- /* Fire Up */
- $weiboLogin = new weiboLogin( $username, $password );
- exit($weiboLogin->showTestPage( 'http://weibo.com/at/comment' ));
-
- class weiboLogin {
-
- private $cookiefile;
- private $username;
- private $password;
-
- function __construct ( $username, $password )
- {
- ( $username =='' || $password=='' ) && exit( "ユーザー名とパスワードを入力してください" );
-
- $this->cookiefile = COOKIE_PATH.' /cookie_sina_'.substr(base64_encode($username), 0, 10);
- $this->username = $username;
- $this->password = $password;
- }
-
- /**
- * CURLリクエスト
- * @param String $urlリクエストアドレス
- * @param Array $dataリクエストデータ
- * /
- functioncurlRequest($url, $data = false)
- {
- $ch =curl_init();
-
- $option = array(
- CURLOPT_URL => $url,
- CURLOPT_HEADER => 0,
- CURLOPT_HTTPHEADER => array('Accept-Language: zh-cn','Connection: Keep-Alive','Cache-Control: no-cache'),
- CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML、Gecko など) Chrome/21.0.1180.79 Safari/537.1"、
- CURLOPT_FOLLOWLOCATION => TRUE、
- CURLOPT_MAXREDIRS => 4、
- CURLOPT_RETURNTRANSFER => TRUE、
- CURLOPT_クッキージャー => $ this-> cookiefile,
- CURLOPT_COOKIEFILE => オプション);
- $response =curl_exec($ch);
-
- if (curl_errno($ch) > 0) {
- exit("CURL ERROR:$url " .curl_error($ch)) ;
- }
- curl_close( $ch);
- return $response;
- }
-
- /**@desc CURL は Sina ログインをシミュレートします*/
- function doSinaLogin()
- {
- // ステップ 1: Nickit を取得
- $preLoginData = $this-> ;curlRequest('http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=' .
- base64_encode($this->username) .'&client=ssologin.js( v1.3.16)') ;
- preg_match('/sinaSSOController.preloginCallBack((.*))/', $preLoginData, $preArr);
- $jsonArr = json_decode($preArr[1], true);
-
- $this ->debug(' debug_1_Tickit', $preArr[1]);
-
- if (is_array($jsonArr)) {
- // ステップ 2: 認定を行う
- $postArr = array( 'entry' => 'weibo' ,
- 'ゲートウェイ' = > 1,
- 'from' => '',
- 'savestate' => 1,
- ' ssosimplelogin' => 1 ,
- 'su' => base64_encode($this->ユーザー名),
- 'miniblog',
- 'servertime' => '],
- 'nonce' => $jsonArr['nonce'],
- 'pwencode' => 'wsse',
- 'sp' => sha1(sha1($this->パスワード)) . $jsonArr['servertime '] . $jsonArr['nonce']),
- 'エンコーディング' => 'UTF-8',
- 'url' => ?framelogin=1&callback=parent .sinaSSOController.feedBackUrlCallBack',
- 'returntype' => 'META');
-
- $loginData = $this->curlRequest('http://login.sina.com.cn/sso/ login.php?client =ssologin.js(v1.3.19)', $postArr);
-
- $this->debug('debug_2_Certification_raw', $loginData);
-
- // ステップ 3: SSOLoginState
- if ($loginData ) {
-
- $matches = $loginResultArr =array();
- preg_match('/replace('(.*?)')/', $loginData, $matchs);
-
- $this->debug('debug_3_Certification_result) ', $matchs[ 1]);
-
- $loginResult = $this->curlRequest( $matchs[1] );
- preg_match('/feedBackUrlCallBack((.*?))/', $loginResult, $loginResultArr) ;
-
- $userInfo = json_decode($loginResultArr[1],true);
-
- $this->debug('debug_4_UserInfo', $loginResultArr[1]);
- } else {
- exit('ログインに失敗しました。' );
- }
- } else {
- exit('サーバーティック失敗');
- }
- }
-
- /**ログイン状況のテスト、参照の呼び出し*/
- function showTestPage( $url ) {
- $file_holder = $this->curlRequest( $url );
-
- // ログインしていない場合は、ログイン後にもう一度お試しください
- $isLogin = strpos( $file_holder, 'class="user_name"');
- if ( !$isLogin ){
- unset($file_holder);
- $this->doSinaLogin();
- $file_holder = $this->curlRequest ( $url );
- }
- return $file_holder ;
- }
-
- /**デバッグ*/
- function debug( $file_name, $data ) {
- if ( DEBUG ) {
- file_put_contents( $file_name.'.txt ' , $data );
- }
- }
-
- }
-
コードをコピー
|