ホームページ > php教程 > php手册 > Sina Weibo アカウントのログインと PHP API の操作

Sina Weibo アカウントのログインと PHP API の操作

WBOY
リリース: 2016-06-21 08:50:03
オリジナル
1781 人が閲覧しました

Sina Weibo アカウントのログインと API 操作には、oauth 2.0 を使用します
提供されている公式 SDK は大きすぎるため、簡単なアカウントのログイン、個人情報の取得、Weibo の公開などの機能を提供し、その他の機能が必要な場合は、公式 API ドキュメントに従って自分で追加できます。

[ファイル]sina.php

001

002 /**

003 * PHP Library for weibo.com

004 *

005 * @author PiscDong (http://www.piscdong.com/)

006 */

007 class sinaPHP

008 {

009 function __construct($client_id, $client_secret, $access_token=NULL){

010 $this->client_id=$client_id;

011         $this->client_secret=$client_secret;

012         $this->access_token=$access_token;

013     }

014  

015     function login_url($callback_url){

016         $params=array(

017             'response_type'=>'code',

018             'client_id'=>$this->client_id,

019             'redirect_uri'=>$callback_url

020         );

022     }

023  

024     function access_token($callback_url, $code){

025         $params=array(

026             'grant_type'=>'authorization_code',

027             'code'=>$code,

028             'client_id'=>$this->client_id,

029             'client_secret'=>$this->client_secret,

030             'redirect_uri'=>$callback_url

031         );

032         $url='https://api.weibo.com/oauth2/access_token';

033         return $this->http($url, http_build_query($params), 'POST');

034     }

035  

036     /**

037     function access_token_refresh($refresh_token){

038     }

039     **/

040  

041     function get_uid(){

042         $params=array();

043         $url='https://api.weibo.com/2/account/get_uid.json';

044         return $this->api($url, $params);

045     }

046  

047     function show_user_by_id($uid){

048         $params=array(

049             'uid'=>$uid

050         );

051         $url='https://api.weibo.com/2/users/show.json';

052         return $this->api($url, $params);

053     }

054  

055     function statuses_count($ids){

056         $params=array(

057             'ids'=>$ids

058         );

059         $url='https://api.weibo.com/2/statuses/count.json';

060         return $this->api($url, $params);

061     }

062  

063     function get_comments_by_sid($id, $count=10, $page=1){

064         $params=array(

065             'id'=>$id,

066             'page'=>$page,

067             'count'=>$count

068         );

069         $url='https://api.weibo.com/2/comments/show.json';

070         return $this->api($url, $params);

071     }

072  

073     function repost_timeline($id, $count=10, $page=1){

074         $params=array(

075             'id'=>$id,

076             'page'=>$page,

077             'count'=>$count

078         );

079         $url='https://api.weibo.com/2/statuses/repost_timeline.json';

080         return $this->api($url, $params);

081     }

082  

083     function update($img_c, $pic=''){

084         $params=array(

085             'status'=>$img_c

086         );

087         if($pic!='' && is_array($pic)){

088             $url='https://api.weibo.com/2/statuses/upload.json';

089             $params['pic']=$pic;

090         }else{

091             $url='https://api.weibo.com/2/statuses/update.json';

092         }

093         return $this->api($url, $params, 'POST');

094     }

095  

096     function user_timeline($uid, $count=10, $page=1){

097         $params=array(

098             'uid'=>$uid,

099             'page'=>$page,

100             'count'=>$count

101         );

102         $url='https://api.weibo.com/2/statuses/user_timeline.json';

103         return $this->api($url, $params);

104     }

105  

106     function querymid($id, $type=1, $is_batch=0){

107         $params=array(

108             'id'=>$id,

109             'type'=>$type,

110             'is_batch'=>$is_batch

111         );

112         $url='https://api.weibo.com/2/statuses/querymid.json';

113         return $this->api($url, $params);

114     }

115  

116     function api($url, $params, $method='GET'){

117         $params['access_token']=$this->access_token;

118         if($method=='GET'){

119             $result=$this->http($url.'?'.http_build_query($params));

120         }else{

121             if(isset($params['pic'])){

122                 uksort($params, 'strcmp');

123                 $str_b=uniqid('------------------');

124                 $str_m='--'.$str_b;

125                 $str_e=$str_m. '--';

126                 $body='';

127                 foreach($params as $k=>$v){

128                     if($k=='pic'){

129                         if(is_array($v)){

130                             $img_c=$v[2];

131                             $img_n=$v[1];

132                         }elseif($v{0}=='@'){

133                             $url=ltrim($v, '@');

134                             $img_c=file_get_contents($url);

135                             $url_a=explode('?', basename($url));

136                             $img_n=$url_a[0];

137                         }

138                         $body.=$str_m."rn";

139                         $body.='Content-Disposition: form-data; name="'.$k.'"; filename="'.$img_n.'"'."rn";

140                         $body.="Content-Type: image/unknownrnrn";

141                         $body.=$img_c."rn";

142                     }else{

143                         $body.=$str_m."rn";

144                         $body.='Content-Disposition: form-data; name="'.$k.""rnrn";

145                         $body.=$v."rn";

146                     }

147                 }

148                 $body.=$str_e;

149                 $headers[]="Content-Type: multipart/form-data; boundary=".$str_b;

150                 $result=$this->http($url, $body, 'POST', $headers);

151             }else{

152                 $result=$this->http($url, http_build_query($params), 'POST');

153             }

154         }

155         return $result;

156     }

157  

158     function http($url, $postfields='', $method='GET', $headers=array()){

159         $ci=curl_init();

160         curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE);

161         curl_setopt($ci, CURLOPT_RETURNTRANSFER, 1);

162         curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30);

163         curl_setopt($ci, CURLOPT_TIMEOUT, 30);

164         if($method=='POST'){

165             curl_setopt($ci, CURLOPT_POST, TRUE);

166             if($postfields!='')curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);

167         }

168         $headers[]="User-Agent: sinaPHP(piscdong.com)";

169         curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);

170         curl_setopt($ci, CURLOPT_URL, $url);

171         $response=curl_exec($ci);

172         curl_close($ci);

173         $json_r=array();

174         if($response!='')$json_r=json_decode($response, true);

175         return $json_r;

176     }

177 }

[ファイル]config.php

1

2 //配置文件

3 header('Content-Type: text/html; charset=UTF-8');

4

5 $sina_k=''; //新浪微博应用App Key

6 $sina_s=''; //新浪微博应用App Secret

7 $callback_url='http://yoururl/callback.php'; //授权回调网址

8 ?>

[ファイル]index.php

01

02 require_once('config.php');

03 require_once('sina.php');

04

05 function getimgp($u){

06 //图片处理

07 $c=@file_get_contents($u);

08 $name=md5($u).'.jpg';

09 $mime='image/unknown';

10 return array($mime, $name, $c);

11 }

12

13 $sina_t=isset($_SESSION['sina_t'])?$_SESSION['sina_t']:'';

14

15 //检查是否已登录

16 if($sina_t!=''){

17 $sina=new sinaPHP($sina_k, $sina_s, $sina_t);

18

19 //获取登录用户id

20 $sina_uid=$c->get_uid();

21     $uid=$sina_uid['uid'];

22  

23     //获取登录用户信息

24     $result=$sina->show_user_by_id($uid);

25     var_dump($result);

26  

27     /**

28     //发布微博

29     $content='微博内容';

30     $img='http://www.baidu.com/img/baidu_sylogo1.gif';

31     $img_a=getimgp($img);

32     if($img_a[2]!=''){

33         $result=$sina->update($content, $img_a);

34         //发布带图片微博

35     }else{

36         $result=$sina->update($content);

37         //发布纯文字微博

38     }

39     var_dump($result);

40     **/

41  

42     /**

43     //微博列表

44     $result=$sina->user_timeline($uid);

45     var_dump($result);

46     **/

47  

48 }else{

49     //生成登录链接

50     $sina=new sinaPHP($sina_k, $sina_s);

51     $login_url=$sina->login_url($callback_url);

52     echo '点击进入授权页面';

53 }

54 ?>

[ファイル] callback.php

01

02 //授权回调页面,即配置文件中的$callback_url

03 require_once('config.php');

04 require_once('sina.php');

05

06 if(isset($_GET['code']) && $_GET['code']!=''){

07 $o=new sinaPHP($sina_k, $sina_s);

08 $result=$o->access_token($callback_url, $_GET['code']);

09 }

10 if(isset($result['access_token']) && $result['access_token']!=''){

11     echo '授权完成,请记录
access token:';

12  

13     //保存登录信息,此示例中使用session保存

14     $_SESSION['sina_t']=$result['access_token']; //access token

15 }else{

16     echo '授权失败';

17 }

18 echo '
返回';

19 ?>



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート