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

?>

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php新浪微博 登录接口文档,新浪微博的账号登录及PHP api操作相关推荐

  1. php怎么根据接口文档实现功能,CodeIgniter+swagger实现 PHP API接口文档自动生成功能...

    一.安装swagger 1.首先需要有composer,没有的自行百度安装 2.下载swagger,打开网站https://packagist.org/packages/zircote/swagger ...

  2. php新浪微博 登录接口文档,qq登录,新浪微博登录接口申请过程中遇到的问题

    接口申请下来了,开发很容易的,参数传到就可以了.以前就做过这方面的开发,但是申请还是第一次,网上有关这方面的东东不是很多,所以记录一下申请过程. 1,qq登录接口申请 申请地址是:http://con ...

  3. php新浪微博 登录接口文档,最新新浪微博网站接入API接口的具体步骤wordpress

    今天折腾了下新浪的微博登录方式,有了前面的QQ登录开发经验,对于这次的开发就简单得多了.wordpress微博接入,php微博接入,wordpress微博登陆,php微博登陆 一.获取CODE 官方文 ...

  4. API登录接口文档事例

    1. 登录接口 请求URL http://域名/auth/login 请求方式 POST 请求参数 参数名 参数类型 是否必填 参数说明 username string 是 用户名 password ...

  5. 系统功能模块接口文档

    SIA-系统模块接口文档 框图结构: 登录模块 1 数据库的设计 1.1.tb_admin(管理员信息) 字段信息: id:作为主键存在,管理员编号. username:用户名,管理员登录所用. pa ...

  6. 关于使用Typora制作接口文档的那些事儿

    程序开发过程中,团队协作是常态,有人负责前端,有人负责后端,那么前后端交互时的接口文档,就是一个相当关键的[沟通桥梁],接口文档最常见(仅限于我这种弱智小白的见识范围)的就是markdown文档(.m ...

  7. 还在用Swagger生成接口文档?我推荐你试试它.....

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 JApiDocs是一个无需额外注解.开箱即用的SpringBoot ...

  8. springboot 中文文档_比Swagger还好用的自动生成接口文档工具

    JApiDocs是一个无需额外注解.开箱即用的SpringBoot接口文档生成工具. 编写和维护API文档这个事情,对于后端程序员来说,是一件恼人但又不得不做的事情,我们都不喜欢写文档,但除非项目前后 ...

  9. springboot 中文文档_还在用 Swagger生成接口文档?我推荐你试试它

    JApiDocs是一个无需额外注解.开箱即用的SpringBoot接口文档生成工具. 编写和维护API文档这个事情,对于后端程序员来说,是一件恼人但又不得不做的事情,我们都不喜欢写文档,但除非项目前后 ...

最新文章

  1. 电脑已连接wifi的密码查询
  2. js中的arguments
  3. java结丹期(14)----javaweb(cookiesession)
  4. YARN执行作业报错Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.
  5. python 列表、字典多排序问题
  6. 反射机制 Class.getDeclaredMethod
  7. Java校招笔试题-Java基础部分(五)
  8. libcap-ng库旨在使具有posix功能的编程比传统的libcap库容易得多
  9. 简单的JSP分页显示
  10. 《设计模式详解》行为型模式 - 职责链模式
  11. 【cocos2d-x 手游研发小技巧(4)与Android混编实现换“头像图片”】
  12. CAF(C++ actor framework)使用随笔(unbecome与keep_behavior用法)
  13. 微信小程序——通过百度API查询天气情况
  14. 看完这篇 你就能完全操作git 远程分支的增、删、改、查了
  15. 矢量的模 matlab,单模光纤基模色散曲线矢量分析的Matlab实现
  16. 虚拟服务器添加打印机,在VMware Workstation 7虚拟机中应用主机打印机
  17. 吐血分享:QQ群霸屏技术教程2017(维护篇)
  18. 利用c/c++打造烟花表白程序,撩妹一撩一个准!
  19. java 连接Linux服务器并执行指令
  20. android装windows bios,普通安卓平板刷win10图文教程

热门文章

  1. 看你朋友圈,就知道你很缺爱
  2. 性能测试——深圳个贷营销项目出差总结
  3. 超级实用的技能:只用手机就能模拟加密门禁卡!
  4. STM32驱动HC-SR04超声波模块
  5. 【JavaScript】JS执行机制--同步与异步
  6. 中国游戏行业市场分析(一)关于国内游戏制作的问题
  7. 准备工具:httpwatch、精易模块
  8. Densely connected convolutional networks(密集连接的卷积网络)
  9. bos 获取数据库连接_EAS-BOS表头-分录多表开发高级教程
  10. JIT编译和AOT编译