首頁  >  文章  >  php教程  >  新浪微博的账号登录及PHP api操作

新浪微博的账号登录及PHP api操作

WBOY
WBOY原創
2016-06-21 08:50:031752瀏覽

 

新浪微博 的账号登录及api操作,使用oauth 2.0    
官方提供的sdk都太过庞大,这是我自己简化的,提供简单的账号登录、获取个人信息、发布微博等功能,如果需要其他功能可以根据官方的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         );

021         return 'https://api.weibo.com/oauth2/authorize?'.http_build_query($params);

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."\r\n";

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

140                         $body.="Content-Type: image/unknown\r\n\r\n";

141                         $body.=$img_c."\r\n";

142                     }else{

143                         $body.=$str_m."\r\n";

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

145                         $body.=$v."\r\n";

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 ?>



陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn