Home > php教程 > php手册 > 新浪微博的账号登录及PHP api操作

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

WBOY
Release: 2016-06-21 08:50:03
Original
1782 people have browsed it

 

新浪微博 的账号登录及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 ?>



Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template