최근 직장에서 @my 자신의 데이터인 http://weibo.com/at/weibo 의 데이터를 얻어야 하는데 인터페이스가 없고 페이지만 캡처할 수 있습니다. 코드는 아래에 게시되어 있습니다 출처:
http://summerbluet.com/704
- /**
- * CJ의 Sina Weibo 로그인을 시뮬레이션하는 데 사용됩니다( http://www.summerbluet.com )
- */
- /**프로젝트 경로 정의*/
- define('PROJECT_ROOT_PATH' , dirname(__FILE__));
- define('COOKIE_PATH' , PROJECT_ROOT_PATH );
- // 범용 타임스탬프
- define('TIMESTAMP', time());
- / / 문제 발생 시 켜질 수 있습니다. 디버깅을 위해 현재 폴더
- define('DEBUG', false);
- /**시뮬레이션된 로그인에 사용되는 Sina 계정*/<🎜에 LOG 파일이 생성됩니다. > $username = "";
- $password = "";
- /* 실행 */
- $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 = $ 사용자 이름;
- $this->password = $password;
- }
-
- /**
- * CURL 요청
- * @param String $url 요청 주소
- * @param Array $data 요청 데이터
- */
- 함수 컬 요청($url, $data = false)
- {
- $ch = 컬_init();
-
- $option = array(
- CURLOPT_URL => $url,
- CURLOPT_HEADER => 0,
- CURLOPT_HTTPHEADER => 배열(' 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_COOKIEJAR => ; this ->cookiefile,
- CURLOPT_COOKIEFILE => $this->cookiefile
- );
-
- if ( $data ) {
- $option[CURLOPT_POST] = 1;
- $ 옵션[CURLOPT_POSTFIELDS] = $data;
- }
-
- 컬_setopt_array($ch, $option);
- $response = 컬_exec($ch);
-
- if (curl_errno( $ ch) > 0) {
- 종료("CURL ERROR:$url " .curl_error($ch));
- }
- curl_close($ch);
- return $response;
- }
-
- /**@desc CURL은 Sina 로그인을 시뮬레이션합니다.*/
- function doSinaLogin()
- {
- // 1단계: 틱킷 가져오기
- $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',
- 'gateway' => 1,
- 'from' => '',
- 'vsnval' => '',
- 'savestate' => 7,
- 'useticket' => 1,
- 'ssosimplelogin' => 1,
- 'su' => ;username)),
- 'service' => 'miniblog',
- 'servertime' => $jsonArr['servertime'],
- 'nonce' => ],
- 'pwencode' => 'wsse',
- 'sp' => sha1(sha1(sha1($this->password)) . $jsonArr['servertime'] . $jsonArr[ 'nonce ']),
- '인코딩' => 'UTF-8',
- 'url' => 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController .feedBackUrlCallBack',
- '반환 유형' => '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) {
-
- $matchs = $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 );
-
- // if 로그인되어 있지 않은 경우 로그인 후 다시 시도하세요
- $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 );
- }
- }
-
- }
-
코드 복사
|