新浪微博应用开发的一个简易方案
PHP
+新浪微博开放平台 +新浪云平台(SAE)
贺利坚 2012.2.25
目 录
一、必须交待的几个问题......................................................................................................... 1 二、PHP+新浪微博开放平台+新浪云平台(SAE)方案的基础 ............................................ 2 三、建立微博应用的过程......................................................................................................... 4 四、PHP SDK中Demo程序简析 ............................................................................................ 18 五、进一步学习的走向和有用的资源................................................................................... 27 附录1:新浪微博旧版API中的PHP例程 ........................................................................... 29 附录2:新浪微博开放平台WeiboClient类的公共方法 ...................................................... 59
新浪微博应用开发的一个简易方案
一、必须交待的几个问题
这是一个不严肃的册子,主要因为:(1)作者不精通PHP,对PHP涉及的内容早有了解,但没有专门学习,之前更没有做过程序。在决定试着体验用PHP开发微博应用后,也仅用半个上午的时间,浏览了PHP的一般语法;(2)这本册子是匆忙完成的,学习时间一天半,写作时间一天。主要是因为并不打算在此方面深入做下去,也没有那么多的时间;(3)册子中除了作者自写的文字,其他材料全部来自新浪微博开放平台(http://open.weibo.com/)和新浪云平台(http://sae.sina.com.cn/),有拼凑之嫌。
但是,这是一本很实用的册子,起码作者这样认为。以作者飞速的学习进度,有力地说明这是快速了解微博应用开发的最好材料,给出的解决方案也是最适合初学者构建微博应用开发的。一旦能够在浏览器中看到自己的代码操纵着微博中的信息,微博应用开发中不少概念将生动起来,再进一步做一些工作将不再那样艰苦。
尽管不严肃,还是决定写出来。针对零基础的开发者,现在还没有一个适合的资料。我的贡献在于为刚起步开发的读者整理出了个头绪,提出了一种最简便的学习方案。从初学者的角度,凭着自己尚热乎的初学者感觉,帮其他初学者一把。
因为不精通,很多相应平台上能说清楚的事情,直接给出链接,而不再多言。平台上的文字有些太多,初学者没看几个字,就被绕糊涂了。我的贡献是指出看这些庞杂文档的一个建议,并尽量引导读者动手做,早些找到感觉。
所以,这本小册子仅是在微博应用开发上帮助读者起步的。将来,你很可能不用PHP编应用,应用也不一定部署到新浪云平台,事实上,即使用新浪云平台,本手册中直接在线编码的方式也不好。另外,现在最有前途的是移动开发,开发在移动设备运行的微博应用更诱人。一旦起了步,就把这本小册子忘了吧,日后会有严谨的大册子。
这本小册子也想引导一种新的学习方式。学习应用开发,尤其是大学生的课外学习,不必重视打好基础再开始实施。尽可能地动手做起来,好多不易理解的概念由于无意中就体验到了,自然就通了。先做再学,边做边学,这是一种实用的学习方法。我的一些学生准备用PHP做微博应用,两个月了,仍然在看PHP,不妥。学习某些强调思维的计算机理论时,可能需要这样做。但为开发微博应用这个很明确的目标的学习,这是不对的。书上看到的不一定都能用上,开发微博应用很多关键的问题并不是一般PHP书籍涉及的。
1
新浪微博应用开发的一个简易方案
交待完了。由于前述的问题,册子中的错误敬请批评,也请给予包涵。当然,能够为读者树立批判性学习的习惯作出贡献,也是作者很高兴的事。
本文的博文版本刚一发布,就有业内高手给了非常中肯的意见。 网友“IT人”(http://weibo.com/itren)指出:
1. 不需要下载phpSDK,sae默认包含有weibo的phpclass,直接使用; 2. sae开发框架里有围脖类别,直接一键安装即可;
3. 在开放平台中输入的url,不要带上sae的版本号,版本号是为了测试和快速切换用,默认版本访问时不需要版本号
作者回复:多谢指点。对零基础的学习者而言,注重涉及最少的概念做出个程序来,注重在这个过程中,逐渐搞清楚开放平台、SAE、微博应用、SAE应用、授权机制等内容,还是不必引入更多的环节。我的方法重起步学习,你补充了实用的方案,请不要介意我将把你的意见补充到文档中。
二、PHP+新浪微博开放平台+新浪云平台(SAE)方案的基础
1、新浪微博开放平台(http://open.weibo.com/wiki/index.php/Quickstart) 开放的是什么:开放平台开放给开发者的是每一个用户的用户关系,开发者不在向传统应用那样面对单个开发者而是面对用户身后的整个好友圈。每一个API都是围绕好友与好友之间的交流来提供相关的功能,如发送微博,查看好友资料等等。
为什么要使用开放平台?开放平台可以加快应用的推广。每个用户可以影响到周围的好友,一旦应用真的优秀,用户可以方便的推荐给好友,好友又可以再推荐给他的好友。开放平台让用户关系更加容易获得。当应用涉及到用户交流的时候,需要同时拥有一定的用户群和用户的关系链,而建立有这样数量用户的关系链需要大量时间和精力。微博通过草根和草根,草根和明星、明星和明星之间的互相关注,形成了一个巨大的社会关系网络,应用可以直接通过开放平台使用这个网络。
2、新浪云平台(Sina App Engine,SAE)
Sina App Engine(以下简称SAE)是新浪研发中心于2009年8月开始内部开发,并在2009年11月3日正式推出第一个Alpha版本的国内首个公有云计算平台(http://sae.sina.com.cn),SAE是新浪云计算战略的核心组成部分。
2
新浪微博应用开发的一个简易方案
SAE作为国内的公有云计算,从开发伊始借鉴吸纳Google、Amazon等国外公司的公有云计算的成功技术经验,并很快推出不同于他们的具有自身特色的云计算平台。SAE选择在国内流行最广的Web开发语言PHP作为首选的支持语言,Web开发者可以在Linux/Mac/Windows上通过SVN、SDK或者Web版在线代码编辑器进行开发、部署、调试,团队开发时还可以进行成员协作,不同的角色将对代码、项目拥有不同的权限;SAE提供了一系列分布式计算、存储服务供开发者使用,包括分布式文件存储、分布式数据库集群、分布式缓存、分布式定时服务等,这些服务将大大降低开发者的开发成本。同时又由于SAE整体架构的高可靠性和新浪的品牌保证,大大降低了开发者的运营风险。另外,作为典型的云计算,SAE采用“所付即所用,所付仅所用”的计费理念,通过日志和统计中心精确的计算每个应用的资源消耗(包括CPU、内存、磁盘等)。
总之,SAE就是简单高效的分布式Web服务开发、运行平台。 更多见http://sae.sina.com.cn/?m=devcenter&catId=19。
3、新浪云平台(Sina App Engine,SAE)和新浪微博开放平台的关系
微博应用开发成功后,需要将代码部署到Web中才能使用。也就是说,微博应用开发是通过调用新浪微博开放平台中的API完成程序编写的,而这些程序要上传到SAE,并在SAE上运行。
在开发过程中,可以在本地搭建Web服务器运行程序,也可以选择传统的服务托管完成。但是,这两种方案需要不少麻烦的配置。
在开发中直接将代码部署到SAE中,不需要任何的配置,甚至将来可能会用到的更多的服务都已经由SAE为你准备好了,我们可以直奔主题——开发微博应用。
SAE是免费的(至少是作为个人学习中需要用到的资源),这也很重要。 等熟悉了SAE,你会了解更多的“云服务”。
4、为什么要用PHP
新浪微博开放开发平台提供了对Java ,PHP,Flash,Python,Javascript,Android及iOS等多种语言及平台的支持,能够完成Web上的应用,也能够开发移动设备上的应用。开发者自由选择的余地相当大。
你学习微博应用开发的目标可能也并不是要用PHP开发,你甚至没有想法学会PHP。
3
新浪微博应用开发的一个简易方案
如果这样,看完这本小册子并尝试将用PHP将应用做出来,仅当作学习的过程就可以了。在这个过程中,你将了解一般的流程,以及不少体验不好理解的概念。
如果你本来就打算学会用PHP开发,更加恭喜你了,我们一同起步吧。事实上,学会这一招,找个工作机会不少。
最关键的是,SAE的编程语言是PHP。为了能快速的起步做微博开发,先用PHP是必需的。
5、基础知识
需要知道C/S结构和B/S结构。 需要知道客户端脚本和服务器端脚本。 大一以上的学生应该都知道。
需要有一个微博帐号。没有玩过微博就要开发微博应用,应该不可能吧。能先喜欢上微博,那样更好,做出一个好应用会让你很有成就感。玩中出现的想法会让你始终带着问题去学习。
至于PHP,需要了解其一般的语法。如果你已经有过其他语言编程的经历,像我一样,花半个上午的时间翻翻随便一本教材即可。如果在下面的程序中有不明白的了,再翻书看明白就行了。如果提前已经有了更多准备,那更好。
三、建立微博应用的过程
1、在微博开放平台上创建应用 首先登录你的微博。
在页面的最下端有个链接“开放平台”,单击此链接。
图1
4
新浪微博应用开发的一个简易方案
或者直接打开:http://open.weibo.com/,然后点击“我要开发应用”。
图2
点击“创建应用”。
图3
作为入门的尝试,我们开发的是“站内应用”。
图4
按屏幕提示,输入一些必要信息:
5
新浪微博应用开发的一个简易方案
图5
在“应用信息”中,选择“基本信息”部分,记住App Key和App Secret的值。这两个值与授权有关,不急着搞清楚,后面编写程序时要用到。
图6
创建应用最大的意义就在于,微博系统分配了App Key和App Secret两个值。现在,我们先放下这个工作,为编写代码做些准备。
2、下载SDK
到新浪微博开放平台的SDK下载页面http://open.weibo.com/wiki/SDK,找到PHP SDK的下载链接:
6
新浪微博应用开发的一个简易方案
图7
下载得到的是一个压缩文档,如下图所示。
图8
在这些文件中,weibooauth.php提供了有关授权及实现微博应用功能的代码。这个文件中的内容不要做任何修改。
其他的文件实际上是为开发和运行程序微博应用提供的演示(Demo)。
将压缩文件解压,然后修改config.php中的代码,将可以作为你的第一个微博应用
7
新浪微博应用开发的一个简易方案
了。
config.php中的代码为:
define( \"WB_AKEY\" , '请填入微博开放平台的APP Key' ); define( \"WB_SKEY\" , '请填入微博开放平台的APP Secret' ); ?>
使用创建微博应用时的App Key和App Secret改写此文件。 例如,对前面创建的应用,改为
define( \"WB_AKEY\" ,'2101372524' );
define( \"WB_SKEY\" , 'fa9f5111e317a942b895532b1f73837b' ); ?>
这些代码将要上传到SAE云平台上,现在先放着,在SAE中创建应用后再说。
3、在SAE中创建应用
打开SAE的首页:http://sae.sina.com.cn/
图9
因为已经有了微博帐号,选择“用微博帐号登录”。 然后出现的页面如下:
8
新浪微博应用开发的一个简易方案
图10
在界面中已经有了作者创建的两个应用。如果是第一次进入,“我创建的应用”部分是空的。
请点击“创建新应用”。
图11
在“创建应用”的页面中,分别输入sinaapp.com的二级域名、应用名称以及应用描述。然后“创建应用”。
这时需要输入安全密码。安全密码是为部署代码时用的,可以在帐户设置中修改。
9
新浪微博应用开发的一个简易方案
图12
点击“安全验证”后,刚刚新建的应用出现在“我创建的应用”部分。
图13
点击新建的应用,下面是应用的相关信息。点击“代码管理”……
图14
接着选择“通过这里创建一个版本”……
10
新浪微博应用开发的一个简易方案
图15
版本号为1。
图16
单击“创建”后,需要一点时间,系统将会为你布置好程序运行的环境。
图17
记住这个版本应用的链接,这个链接可以直接使用,稍后还将要作为微博应用的“应用实际地址”使用。
现在需要“编辑代码”。
11
新浪微博应用开发的一个简易方案
图18
请注意“路径”右边的三个按钮。点击最右边的“上传”按钮,将在“2、下载SDK”部分下载并修改过的代码逐个上传。
图19
上传index.php时,因为原先已经有此文件,不允许上传。需要先点右键,从菜单中点“删除”将原文件删除后再上传。
上传后的界面如下,打开“config.php”,确保App Key和App Secret是修改后的值。
12
新浪微博应用开发的一个简易方案
图20
大功已经告成。找到“代码管理”的页面,点击“链接”。
图21(同图17)
出现的页面如下。
图22
“Use Oauth to login”中包含着个非常关键的概念,此处不表,先会做了,再看材料就好懂了。
然后进入了“应用授权”的页面。回想一下,使用别人开发的应用,是否需要你授权呢?点击“登录并授权”。
13
新浪微博应用开发的一个简易方案
图23
然后提示“授权完成,进入你的微博列表页面”。
点击链接,出现如下图所示的内容。看来这个应用的功能还是相当强的。能换头像、发微博和发带图片的微博,还能显示你和你关注的人的微博。
图24
到目前为止,我们甚至没有写过一行PHP代码。其实,照这个流程先做下来,建立
14
新浪微博应用开发的一个简易方案
起应用的完整概念后再说。
到目前为止,我们看到的结果,仍然只是一个微博的Web界面,而不能称为微博应用。下面再做些工作,使其成为真正的微博应用后,我们再简单地理解一下代码。
4、使SAE中的应用成为微博应用
回顾在“1、在微博开放平台上创建应用”中有应用信息,当时我们记下了重要的两个值App Key和App Secret。
图25(同图6)
在该界面的右方,还有一个“编辑”链接。点击后,可以设置“站内应用地址”和“应用实际地址”。
图26
“站内应用地址”处需要自己起一个个性化的域名,而“应用实际地址”处理输入的是SAE中“代码管理”处的“链接”,如下图所示(这张图前面出现过)。
15
新浪微博应用开发的一个简易方案
图27(同图17)
之后,可以上传图片等,不说要述。最后,请保存信息。 保存后,就在当前页面,点击“站内应用地址”后面的链接。
图28
顺着出现的链接一直点下去,你会发现,这就是真正的微博应用。
16
新浪微博应用开发的一个简易方案
图29
5、整理一下思路
有必要搞清这几个环节的关系。
首先在新浪开放开发平台中建立了一个微博应用。其中,最重要的是分配了App Key和App Secret值。微博是一个分布式的系统,信息的分享是靠用户及其他们之间的关注完成,并不是随便分享的。运行应用时,需要通过认证的方式将用户分清楚并且确保安全。这两个值很重要,更多的原理,会做应用后读一读文档就好了。
其次,一个应用需要代码。我们直接下载了PHP SDK中提供的Demo代码,作为我们第一个应用的业务逻辑。准备好的代码中,config.php中加入了App Key和App Secret。
再次,应用的代码需要在Web服务器上运行。我们没有采用经典的LAMP(Linux+ Apache+ Mysql+PHP)组合中用Apache作服务器,而是用新浪云平台解决。在云计算时代,让云为我们服务,优点不再说了。这种方案最大的好处是避免了麻烦的运行环境设置,处我们能够直接进入我们将代码上传后,Demo显示的结果实现了一个简单的应用:可以换头像、发微博和发带图片的微博,还能显示你和你关注的人的微博。
最后,在微博开放平台中,将SAE中应用的链接设置“应用实际地址”,再设一个“站内应用地址”。“站内应用地址”将应用会置入一个框架中,从而展示出的就是我们习惯了的,统一的“微博应用”风格。
这个应用是简单的,没有连接数据库,没有统计、分析,没有可视化的界面,但这是一个完整的应用。接下来,逐步学习如何建立更个性、实用的应用就可以了。另外,
17
新浪微博应用开发的一个简易方案
一个应用要提交审核并最终,还需要遵守一些规范,这些在Demo中也没有体现出来,请看相关文档吧。
四、PHP SDK中Demo程序简析
接下来,需要逐步学会编写PHP代码完成相应的功能了。即使将来你用的不是PHP,也不妨了解一下,将微博开发中的一些机理深入一些后再作打算。
不会PHP还能做出刚才的应用,是件值得骄傲的事。我们已经解决了整个开发过程的大事。不过,稍微骄傲一下就行了。不懂PHP至少不能作为荣耀的事。
言归正传,我们通过PHP SDK中Demo程序的剖析,来初步了解一个PHP微博应用的代码结构。
1、PHP SDK中的代码
在PHP SDK中提供的几个PHP文件如下图所示。
图30(同图8)
将代码部署到SAE后,运行应用首先执行的是index.php。
18
新浪微博应用开发的一个简易方案
index.php中的代码是:
session_start();
//if( isset($_SESSION['last_key']) ) header(\"Location: weibolist.php\"); include_once( 'config.php' ); include_once( 'weibooauth.php' );
$o = new WeiboOAuth( WB_AKEY , WB_SKEY ); $keys = $o‐>getRequestToken();
$aurl = $o‐>getAuthorizeURL( $keys['oauth_token'] ,false , $_SERVER['SCRIPT_URI'].'/callback.php');
$_SESSION['keys'] = $keys; ?>
启动session后,先将config.php文件包含进来。 config.php文件中的代码是:
define( \"WB_AKEY\" , '2101372524' );
define( \"WB_SKEY\" , 'fa9f5111e317a942b895532b1f73837b' ); ?>
config.php的作用就是将建立微博应用中得到的App Key和App Secret值分别由WB_AKEY和WB_SKEY保存。正如index.php中随后的代码所示:
$o = new WeiboOAuth( WB_AKEY , WB_SKEY );
WB_AKEY和WB_SKEY被用于建立一个WeiboOAuth对象。开发的第三方应用,使用的是OAuth授权,关于OAuth授权的流程在新浪微博开放平台里有很清晰完整的介绍。
接着,用
$keys = $o‐>getRequestToken();
获取未授权的Request Token,然后请求用户授权Token
$_SESSION['keys'] = $keys;
$aurl = $o‐>getAuthorizeURL( $keys['oauth_token'] ,false , 'http://localhost/callback.php');
注意到代码中的“http://localhost/callback.php”,是一个称作为回调的页面,随着index.php中设置的链接:
由用户点击,认证过程由callback.php页面完成。 callback.php中的代码是:
19
新浪微博应用开发的一个简易方案
session_start();
include_once( 'config.php' );
include_once( 'weibooauth.php' );
$o = new WeiboOAuth( WB_AKEY , WB_SKEY , $_SESSION['keys']['oauth_token'] , $_SESSION['keys']['oauth_token_secret'] );
$last_key = $o‐>getAccessToken( $_REQUEST['oauth_verifier'] ) ; $_SESSION['last_key'] = $last_key; ?>
授权完成,进入你的微博列表页面
这部分代码不再详述,在搞清OAuth授权之前,这些代码可以暂时不求甚解(不过终究要明白,不管以后是不是用PHP开发),直接使用,上面的几个文件也不必修改。另外,上面几个文件中涉及到向session中写入值,这是为以后页面中的会话而设定的。
最后,“进入你的微博列表页面”链接将引向执行weibolist.php。 weibolist.php是我们的应用执行的时最关心的代码。下面分段简述:
session_start();
include_once( 'config.php' );
include_once( 'weibooauth.php' ); $c = new WeiboClient( WB_AKEY , WB_SKEY , $_SESSION['last_key']['oauth_token'] , $_SESSION['last_key']['oauth_token_secret'] );
$ms = $c‐>home_timeline(); // done $me = $c‐>verify_credentials(); ?>
实例化WeiboClient对象后,用$c‐>home_timeline();获取了当前登录用户及其所关注用户的最新微博,存入$ms,用$c‐>verify_credentials();验证当前微博用户身份的合法性,并将用户信息存入$me。
下面是换头像的表单:
发送新微博的表单
发送图片微博的表单:
处理表单请求的仍然是weibolist.php,下面是处理代码:
if( isset($_REQUEST['text']) || isset($_REQUEST['avatar']) ) {
if( isset($_REQUEST['pic']) )
$rr = $c ‐>upload( $_REQUEST['text'] , $_REQUEST['pic'] ); elseif( isset($_REQUEST['avatar'] ) )
$rr = $c‐>update_avatar( $_REQUEST['avatar'] ); else
$rr = $c‐>update( $_REQUEST['text'] ); echo \"
发送完成
\" ; } ?>$c ‐>upload( $_REQUEST['text'] , $_REQUEST['pic'] )发送了带图片的微博; $c‐>update_avatar( $_REQUEST['avatar'] );修改了头像; $c‐>update( $_REQUEST['text'] );发送的是纯文字的微博。 这些工作都是通过WeiboClient对象$c完成的。
下面的代码通过foreach循环将取到的当前登录用户及其所关注用户的最新微博逐条地显示出来。
显示微博时,仅显示了每条微博的文本部分。这样的微博你愿意看吗?不知道是哪位好友发的,看不到好友的情况,看不到微博中给人深刻映像的图片……
别怨天尤人了,一切掌握在自己手中,我们先尝试着将Demo扩充一下,以求更多体验。
21
新浪微博应用开发的一个简易方案
2、扩充Demo
新浪微博开放平台提供了API文档
(http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3_V2),目前用的是第2版(V2)。这个文档提供了开发中用到的接口的说明,不管用什么语言开发,这些内容总是要非常熟悉的。
请在新浪微博开放平台中找到API文档的链接,稍加浏览,我们将结合需求,一边查文档,一边对Demo进行扩充。
在weibolist.php,当前登录用户及其所关注用户的最新微博是通过
$c‐>home_timeline();获得的。在API文档V2的读取接口部分找到statuses/home_timeline条目,点击链接浏览对该条目详细解释的页面。
在稍靠后的地方,有返回值的“字段说明”:
返回值字段
idstr created_at id text source favorited truncated
in_reply_to_status_id in_reply_to_user_id in_reply_to_screen_name mid bmiddle_pic original_pic thumbnail_pic reposts_count
字段类型 string string int64 string string boolean boolean int64 int64 string int64 string string string int
字段说明
字符串型的微博ID 创建时间 微博ID 微博信息内容 微博来源 是否已收藏 是否被截断 回复ID 回复人UID 回复人昵称 微博MID
中等尺寸图片地址 原始图片地址 缩略图片地址 转发数
22
新浪微博应用开发的一个简易方案
返回值字段
comments_count annotations geo user
字段类型 int array object object
评论数
字段说明
微博附加注释信息 地理信息字段
微博作者的用户信息字段
回想输出$ms中的每一条微博的代码:
原来我们仅仅是用=$item['text'];?>输出了微博的文本部分,用的是text字段。我们还能用created_at显示创建时间,用id显示微博,用XXX_pic获取各种图片的地址。
采用模仿的方式,下面把这段代码修改为:
(发文时间: =$item['created_at'];?>)
$ori_img =$item['original_pic']; if($ori_img) {
} ?>
如下图所示,显示的微博中有了发文时间和图片,点击小图片还能通过链接看到大图片。
23
新浪微博应用开发的一个简易方案
图31
再看“字段说明”的表格,微博作者的用户信息字段user的类型是object。为了在显示博文时将作者的有关情况输出,我们需要知道表示微博作者的user对象的结构。
还是回到API文档V2页面,找到“用户接口”部分的users/show条目,我们看到user对象原来有如此多的字段(属性)。
返回值字段 id
screen_name name province city location description url
profile_image_url domain gender followers_count
字段类型 int64 string string int int string string string string string string int
用户UID 用户昵称 友好显示名称 用户所在地区ID 用户所在城市ID 用户所在地 用户描述 用户博客地址 用户头像地址 用户的个性化域名
字段说明
性别,m:男、f:女、n:未知 粉丝数
24
新浪微博应用开发的一个简易方案
返回值字段 friends_count statuses_count favourites_count created_at following allow_all_act_msg geo_enabled verified
allow_all_comment avatar_large verified_reason follow_me online_status bi_followers_count status
字段类型 int int int string boolean boolean boolean boolean boolean string string boolean int int object
关注数 微博数 收藏数 创建时间
字段说明
当前登录用户是否已关注该用户 是否允许所有人给我发私信 是否允许带有地理信息
是否是微博认证用户,即带V用户 是否允许所有人对我的微博进行评论 用户大头像地址 认证原因
该用户是否关注当前登录用户
用户的在线状态,0:不在线、1:在线 用户的互粉数
用户的最近一条微博信息字段
我们用$item['user']可以获得微博作者对象,于是通过下面的代码:
\"> href=\"=$item['user']['url']; ?>\">=$item['user']['id']; ?>:=$item['user']['name']; ?>
=$item['text'];?>
(发文时间: =$item['created_at'];?>)
$ori_img =$item['original_pic']; if($ori_img) {
} ?>
25
新浪微博应用开发的一个简易方案
显示的微博中,加入了微博作者的头像、ID和昵称,点击昵称还可以链接到他的主页上,如下图所示。
图32
再完善一下。
在weibolist.php中,使用微博应用的主人信息仅在下面一句代码中显示了个昵称。
实际上,这儿的$me也是个user对象。我们将=$me['name']?>删除,而在这一段代码前加入:
\"> =$me['id']; ?>:=$me['name']; //昵称 ?> 【=$me['description']; //昵称 ?>】 粉丝数:=$me['followers_count'];?> 关注数:=$me['friends_count'];?> 微博数:=$me['statuses_count'];?> 收藏数:=$me['favourites_count'];?>
=$me['friendships']['friends']['ids'];?>
显示的页面换为如下图所示。效果已经大大改观。
26
新浪微博应用开发的一个简易方案
图33
作者不能再讲下去了,聪明的读者应该继续改进下去。将这样的学习形成习惯,构思、查阅资料、改进,再构思……
中间一定会出现些障碍,一一解决后,柳暗花明。 这是一种精神。
五、进一步学习的走向和有用的资源
在进一步的学习中,你需要:
(1)好好学习PHP:照猫画虎适合初入手,真正做项目不能靠这三板斧。 (2)开始比较系统地看在线文档,包括微博开放平台的文档和SAE的文档。(本文附录1 中提供新浪微博旧版API中的PHP例程,可以作为初学时阅读和试探的参考材料)。
(3)通读一遍weibooauth.php中的代码,优先读class WeiboClient中公共方法的定义。这些方法都是直接操作微博和用户的,清楚有哪些方法,其调用接口、默认参数等。 (附录2中 提供了作者整理的class WeiboClient中公共方法的说明)
你可能还会:
(1)改用别的语言开发;
(2)应用中需要用到数据库:还就在SAE中开发也不错,MySQL已经在SAE应用中了。其实,SAE中除了代码部署、分布式数据库外,还提供了很多强大的服务支持,包括分布式文件存储、分布式缓存、代码调优、数据库优化、团队协作、代码版本管理
27
新浪微博应用开发的一个简易方案
等;
(3)在专门的开发机上进行开发:在线编程有不少问题,常见的做法是开发团队自行配置服务器开发(当然1个人开发时,单机即做客户机又做服务器也是常见的),代码经过测试后再上线。配置各种平台将不可避免,只要起步了,这些并不是大问题。
下面谈所谓有用的资源。
附录1中是新浪微博旧版API中的PHP例程,可以作为初学时阅读和试探的参考材料。API 文档的旧版接口文档提供了一些PHP示例(新浪对PHP的支持最好),很方便用于学习。但是在新版API文档中,这些例子找不到了。另外,例子是通过接口组织的,这给初学者带来困难,我们希望通过要实现的功能来组织这些材料。例如,要实现转发一篇微博,能够很快地找到,这显然很诱人。
由于时间因素,代码的整理工作正在进行,本版的代码还是显得乱一些,我们将全面整理并经验证的所有的例程,并体现到此手册的下一个版本中。
附录1的使用方法:阅读每一段代码,将代码写入前面的weibolist.php文件中,或者另建一个文件,在已经建好的应用中运行,调试、观察、改写。以此为基础,学习过程将加快,成为微博开发的高手。
需要说明的是,下面的条目分类有与API文档V2不一致的地方,请带着质疑,对照着API文档使用下面的例子。
附录2提供了作者整理的class WeiboClient中公共方法的说明,这些方法用于直接操作微博和用户的,需要很熟练地使用,熟知每个方法的名称、参数和返回值类型。大多函数的返回值为array,还需要通过API文档知道对应array中各字段的信息。
例如,WeiboClient类中有公共方法的定义:
/**
* 发表图片微博
* @access public
* @param string $text 要更新的微博信息。
* @param string $text 要发布的图片路径,支持url。[只支持png/jpg/gif三种格式,增加格式请修改get_image_mime方法 ]
* @return array */
function upload( $text , $pic_path )
据此,我们知道发图片微博的代码应该包括:
(1)创建WeiboClient类的对象实例(该实例来自于授权,一段程序中多种功能可
28
新浪微博应用开发的一个简易方案
以共用一个实例);
(2)准备微博信息及图片url; (3)用upload方法发送;
(4)利用返回的array完成后续处理。 例如:
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); $t=’新微博’;
$p=’ http://ww1.sinaimg.cn/large/67c69b94gw1dqf3w3vct0j.jpg’; $rr = $c ‐>upload( $t, $p ); echo \"
发送完成
\" ; } ?>
附录1:新浪微博旧版API中的PHP例程
//Statuses/repost
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); $msg = $c‐>user_timeline();
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (count($msg)> 1){
$sid = $msg[1]['id']; echo($sid);
$msg = $c‐>repost($sid);
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
echo($msg['id'].' : '.$msg['text']); }
29
新浪微博应用开发的一个简易方案
//Statuses/counts
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); $u_id = \"u_id\";
$msg = $c‐>user_timeline($u_id);
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
if (count($msg)> 1){
$sid1 = $msg[0]['id']; $sid2 = $msg[1]['id'];
$sid_total = $sid1.\
$msg = $c‐>get_count_info_by_ids($sid_total); if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
foreach($msg as $data){ $id = $data['id'];
$num_comments = $data['comments']; $num_rts = $data['rt'];
echo $id.\"=\".$num_comments.\"&\".$num_rts.\";\"; } }
//Statuses/followers
//返回用户关注对象列表,并返回最新微博文章。 $c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
30
新浪微博应用开发的一个简易方案
$_SESSION['last_key']['oauth_token_secret'] );
//用户ID
$u_id = \"u_id\";
$msg = $c‐>followers(false, false, $u_id); if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
foreach($msg as $follower){
echo($follower['id'].' : '.$follower['name'].' '.$follower['created_at'].' ;');
}
//Statuses/friends
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); //用户ID
$u_id = \"User_ID\";
$msg = $c‐>friends(false, false, $u_id); if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
foreach($msg as $friend){
echo($friend['id'].' : '.$friend['name'].' '.$friend['created_at'].' ;');
}
//users/show
//根据用户ID获取用户资料(授权用户) $c = new WeiboClient( WB_AKEY ,
31
新浪微博应用开发的一个简易方案
WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); //用户ID
$u_id = \"u_id\";
$msg = $c‐>show_user($u_id);
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
echo($msg['id'].' : '.$msg['name'].' '.$msg['created_at']);
//Statuses/reply
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); //to be filled in $sid='sid';
$comment='comment'; $cid='cid';
$msg=$c‐>reply($sid, $comment,$cid); echo($msg['text'];
//Statuses/comment destroy
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); //comment ID
$c_id = \"Comment ID\"; $msg =
$c‐>oauth‐>post(\"http://api.t.sina.com.cn/statuses/comment_destroy/\".$c_id.\".json\");
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
32
新浪微博应用开发的一个简易方案
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
//Statuses/comment
// 对一条微博信息进行评论
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); //发表新微博信息
$msg = $c‐>update(\"测试发表微博\");
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
//微博id
$sid = $msg['id'];
echo($sid.\" : \".$msg['text'].\" \".$msg[\"created_at\"]); sleep(5);
//对刚发表的微博进行评论
$msg = $c‐>send_comment($sid,\"测试评论\ if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
echo($msg['id'].' : '.$msg['text'].' '.$msg['created_at']);
//Statuses/repost
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); $msg = $c‐>user_timeline();
if ($msg === false || $msg === null){ echo \"Error occured\";
33
新浪微博应用开发的一个简易方案
return false; }
if (count($msg)> 1){
$sid = $msg[1]['id']; echo($sid);
$msg = $c‐>repost($sid);
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
echo($msg['id'].' : '.$msg['text']); }
//Statuses/destroy
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); //先发表一篇微博
$msg = $c‐>update(\"测试发表微博\");
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
echo($msg['id'].\" : \".$msg['text'].\" \".$msg[\"created_at\"]);
//删除刚发表的微博
$c‐>destroy($msg['id']);
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
//user id
$uid = \"User ID\";
$msg = $c‐>user_timeline($uid);
if ($msg === false || $msg === null){ echo \"Error occured\";
34
新浪微博应用开发的一个简易方案
return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
//遍历当前微博信息
foreach($msg as $data){
echo($data['id'].\" : \".$data['text'].\" \".$data[\"created_at\"]); }
//statuses/upload $boundary = uniqid('‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐'); $MPboundary = '‐‐'.$boundary;
$endMPboundary = $MPboundary. '‐‐';
// 需要上传的图片所在路径
$filename = '/tmp/wiki.png';
$file = file_get_contents($filename);
$multipartbody .= $MPboundary . \"\\r\\n\";
$multipartbody .= 'Content‐Disposition: form‐data; name=\"pic\"; filename=\"wiki.png\"'. \"\\r\\n\";
$multipartbody .= 'Content‐Type: image/png'. \"\\r\\n\\r\\n\"; $multipartbody .= $file. \"\\r\\n\";
$k = \"source\";
// 这里改成 appkey $v = \"appkey\";
$multipartbody .= $MPboundary . \"\\r\\n\";
$multipartbody.='content‐disposition: form‐data; name=\"'.$k.\"\\\"\\r\\n\\r\\n\"; $multipartbody.=$v.\"\\r\\n\";
$k = \"status\";
$v = \"要上传的文件,这里是描述文字\";
$multipartbody .= $MPboundary . \"\\r\\n\";
$multipartbody.='content‐disposition: form‐data; name=\"'.$k.\"\\\"\\r\\n\\r\\n\"; $multipartbody.=$v.\"\\r\\n\";
$multipartbody .= \"\\r\\n\". $endMPboundary;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
'http://api.t.sina.com.cn/statuses/upload.xml' );
35
新浪微博应用开发的一个简易方案
curl_setopt($ch , CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$multipartbody );
curl_setopt($ch, CURLOPT_HTTPHEADER, array(\"Content‐Type: multipart/form‐data; boundary=$boundary\"));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 修改成当前用户名及密码
curl_setopt($ch, CURLOPT_USERPWD, \"username:password\"); $msg = curl_exec($ch); //echo $multipartbody; echo 'ok.'; ?>
//Statuses/update
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); $msg = $c‐>update(\"测试发表微博\");
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
echo($msg['id'].\" : \".$msg['text'].\" \".$msg[\"created_at\"]);
//user/statuses/id
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); $msg = $c‐>user_timeline();
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (count($msg)> 0){ $uid = 'User ID';
$sid = $msg[0]['id'];
$msg = $c‐>get_comments_by_sid($sid); if ($msg === false || $msg === null){ echo \"Error occured\";
36
新浪微博应用开发的一个简易方案
return false; }
$url = \"http://api.t.sina.com.cn/\".$uid.\"/statuses/\".$sid;
//To achieve redirection, header() must be called before any actual output is sent, such as HTML tags
header( 'Location:'.$url ); }
//Statuses/show
//获取单条ID的微博信息,作者信息将同时返回 $c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] );
$u_id = \"用户ID\";
$msg = $c‐>user_timeline($u_id);
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
if (count($msg)>0){
$t_id = $msg[0]['id'];
$msg = $c‐>show_status($t_id);
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
if (isset($msg['id']) && isset($msg['text'])){ echo($msg['id'].' : '.$msg['text']); } }
//Friendships/show
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
37
新浪微博应用开发的一个简易方案
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] );
//关注对象的id $u_id = \"u_id\";
$msg = $c‐>is_followed($u_id);
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
if (isset($msg['target'])){
if (isset($msg['target']['followed_by'])){
if ($msg['target']['followed_by'] === true){ echo \"Target is followed: true\"; } else {
echo \"Target is followed: false\"; } } }
//friendships/exists
//是否关注某用户
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); //自己的id
$user_a = 'u_id';
//关注对象的id $user_b= \"u_id\"; $msg =
$c‐>oauth‐>get('http://api.t.sina.com.cn/friendships/exists.json?user_a='.$user_a.'&user_b='.$user_b);
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false;
38
新浪微博应用开发的一个简易方案
}
if (isset($msg['friends'])){
if ($msg['friends'] === true){ echo \"true\"; } else {
echo \"false\"; } }
//friendships/destroy
//取消关注
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); //关注用户的id $u_id = \"u_id\";
$msg = $c‐>unfollow($u_id);
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
if (isset($msg['screen_name'])){
echo('Unfollow Friend:'.$msg['screen_name']); }
//friendships/create
//关注某用户
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); //关注用户的id $u_id = \"U_ID\";
$msg = $c‐>follow($u_id);
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
39
新浪微博应用开发的一个简易方案
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
if (isset($msg['screen_name'])){
echo('New Friend:'.$msg['screen_name']); }
//account/verify_credentials
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] );
$msg = $c‐>verify_credentials();
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
if (isset($msg['name'])){ echo($msg['name']); }
//account/rate_limit_status
//获取当前用户API访问频率限制
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] );
$msg =
$c‐>oauth‐>get(\"http://api.t.sina.com.cn/account/rate_limit_status.json\");
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
if (isset($msg['hourly_limit'])){
40
新浪微博应用开发的一个简易方案
echo($msg['hourly_limit']); }
//account/end_session
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] );
$msg = $c‐>oauth‐>post(\"http://api.t.sina.com.cn/account/end_session.json\"); if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
if (isset($msg['name'])){ echo($msg['name']); }
//account/update_profile_image $c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); $pic_path = 'pic_path';
$msg = $c‐>update_avatar($pic_path); if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
if (isset($msg['name'])){
echo(\"Successfully upload the status to [\".$msg['name'].'].'); }
//account/update_profile
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
41
新浪微博应用开发的一个简易方案
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); //name you want to change to $name = 'name';
//gender you want to change to $gender = 'f'; $param = array();
$param['name'] = $name; $param['gender']= $gender; $msg =
$c‐>oauth‐>post('http://api.t.sina.com.cn/account/update_profile.json',$param);
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
if (isset($msg['name'])){ echo($msg['name']); }
//Oauth2/authorize response_type为token //请求
https://api.t.sina.com.cn/oauth2/authorize?client_id=123050457758183&redirect_uri=http://www.example.com/response&response_type=token
//同意授权后会重定向
http://www.example.com/response#access_token=ACCESS_TOKEN&expires_in=250327040&refresh_token=REFRESH_TOKEN
response_type为code //请求
https://api.t.sina.com.cn/oauth2/authorize?client_id=123050457758183&redirect_uri=http://www.example.com/response&response_type=code
//同意授权后会重定向
http://www.example.com/response&code=CODE
//oauth/access_token
$o = new WeiboOAuth( WB_AKEY ,
42
新浪微博应用开发的一个简易方案
WB_SKEY ,
$_SESSION['keys']['oauth_token'] ,
$_SESSION['keys']['oauth_token_secret'] );
$last_key = $o‐>getAccessToken( $_REQUEST['oauth_verifier'] ) ; echo($last_key['oauth_token']);
//oauth/authorize
$o = new WeiboOAuth( WB_AKEY , WB_SKEY ); $keys = $o‐>getRequestToken();
$aurl = $o‐>getAuthorizeURL( $keys['oauth_token'] ,false , 'http://localhost/callback.php');
echo($aurl);
//oauth/request_token
$o = new WeiboOAuth( WB_AKEY , WB_SKEY ); $keys = $o‐>getRequestToken();
echo($keys['oauth_token'].' : '.$keys['oauth_token_secret']);
//favorites/destroy
//删除当前用户收藏的微博信息
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] );
//微博信息id $sid='sid';
$msg = $c‐>remove_from_favorites( $sid ); if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
if (isset($msg['text'])){ echo($msg['text']); }
//favorites/create
//添加收藏
$c = new WeiboClient( WB_AKEY ,
43
新浪微博应用开发的一个简易方案
WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); //收藏id $sid='sid';
$msg = $c‐>add_to_favorites( $sid ); if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
if ($msg['text']){
echo($msg['text']); }
//favorites
//获取当前用户的收藏列表
$c = new WeiboClient( WB_AKEY , WB_SKEY ,
$_SESSION['last_key']['oauth_token'] ,
$_SESSION['last_key']['oauth_token_secret'] ); $msg = $c‐>get_favorites();
if ($msg === false || $msg === null){ echo \"Error occured\"; return false; }
if (isset($msg['error_code']) && isset($msg['error'])){
echo ('Error_code: '.$msg['error_code'].'; Error: '.$msg['error'] ); return false; }
foreach($msg as $status){
if (isset($status['id']) && isset($status['text'])){ echo($status['id'].' : '.$status['text'].' ; '); } }
//oauth/access_token
$o = new WeiboOAuth( WB_AKEY , WB_SKEY ,
$_SESSION['keys']['oauth_token'] ,
44
新浪微博应用开发的一个简易方案
$_SESSION['keys']['oauth_token_secret'] );
$last_key = $o‐>getAccessToken( $_REQUEST['oauth_verifier'] ) ; echo($last_key['oauth_token']);
//Base/get map image //改为你的微博账号,用户名和密码之间用:隔开 $userPwd = 'user@sina.com:pwd';
//改为你微博应用的appkey $appkey = '0123456789';
$url =
\"http://api.t.sina.com.cn/location/base/get_map_image.xml?center_coordinates=116.3136,39.9824&zoom=12&img_format=png&coordinates=116.3136,39.98&names=hello&size=400x400&icons=105&px=1&traffic=on&source=$appkey\";
$rst = curlSample($url,$userPwd);
echo $rst;
function curlSample($url,$userPwd,$postFields = '',$header = ''){ $ch = curl_init() or die (curl_error()) ; curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,30); if(!empty($userPwd)){
curl_setopt($ch,CURLOPT_USERPWD,$userPwd); }
if(!empty($postFields)){
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields); }
if(!empty($header)){
curl_setopt($ch, CURLOPT_HTTPHEADER,$header); }
$result = curl_exec($ch) or die (curl_error($ch)); curl_close($ch); return $result; }
45
新浪微博应用开发的一个简易方案
?>
//Distance/distance line //改为你的微博账号,用户名和密码之间用:隔开 $userPwd = 'user@sina.com:pwd';
//改为你微博应用的appkey $appkey = '0123456789';
$url =
\"http://api.t.sina.com.cn/location/distance/distance_line.json?xs=116.1111111,118.23321&ys=39.1122222,40.23323&source=$appkey\";
$rst = curlSample($url,$userPwd);
echo $rst;
function curlSample($url,$userPwd,$postFields = '',$header = ''){ $ch = curl_init() or die (curl_error()) ; curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,30); if(!empty($userPwd)){
curl_setopt($ch,CURLOPT_USERPWD,$userPwd); }
if(!empty($postFields)){
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields); }
if(!empty($header)){
curl_setopt($ch, CURLOPT_HTTPHEADER,$header); }
$result = curl_exec($ch) or die (curl_error($ch)); curl_close($ch); return $result; } ?>
//Distance/distance po li //改为你的微博账号,用户名和密码之间用:隔开 $userPwd = 'user@sina.com:pwd'; //改为你微博应用的appkey $appkey = '0123456789';
46
新浪微博应用开发的一个简易方案
$url =
\"http://api.t.sina.com.cn/location/distance/distance_po_li.xml?x1=116.1111111&y1=39.1111111&xs=116.1111111,118.23321&ys=39.1122222,40.23323&source=$appkey\";
$rst = curlSample($url,$userPwd);
echo $rst;
function curlSample($url,$userPwd,$postFields = '',$header = ''){ $ch = curl_init() or die (curl_error()) ; curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,30); if(!empty($userPwd)){
curl_setopt($ch,CURLOPT_USERPWD,$userPwd); }
if(!empty($postFields)){
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields); }
if(!empty($header)){
curl_setopt($ch, CURLOPT_HTTPHEADER,$header); }
$result = curl_exec($ch) or die (curl_error($ch)); curl_close($ch); return $result; } ?>
//Distance/distance point //改为你的微博账号,用户名和密码之间用:隔开 $userPwd = 'user@sina.com:pwd';
//改为你微博应用的appkey $appkey = '0123456789';
$url =
\"http://api.t.sina.com.cn/location/distance/distance_point.json?x1=116.1111111&y1=39.1111111&x2=116.1111111&y2=39.1122222&source=$appkey\";
$rst = curlSample($url,$userPwd);
echo $rst;
47
新浪微博应用开发的一个简易方案
function curlSample($url,$userPwd,$postFields = '',$header = ''){ $ch = curl_init() or die (curl_error()) ; curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,30); if(!empty($userPwd)){
curl_setopt($ch,CURLOPT_USERPWD,$userPwd); }
if(!empty($postFields)){
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields); }
if(!empty($header)){
curl_setopt($ch, CURLOPT_HTTPHEADER,$header); }
$result = curl_exec($ch) or die (curl_error($ch)); curl_close($ch); return $result; } ?>
//Bus/station //改为你的微博账号,用户名和密码之间用:隔开 $userPwd = 'user@sina.com:pwd'; //改为你微博应用的appkey $appkey = '0123456789';
//查询关键词
$q = urlencode(\"海淀南路\");
$url =
\"http://api.t.sina.com.cn/location/bus/station.xml?city=0010&q=$q&source=$appkey\";
$rst = curlSample($url,$userPwd);
echo $rst;
function curlSample($url,$userPwd,$postFields = '',$header = ''){ $ch = curl_init() or die (curl_error()) ; curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
48
新浪微博应用开发的一个简易方案
curl_setopt($ch,CURLOPT_TIMEOUT,30); if(!empty($userPwd)){
curl_setopt($ch,CURLOPT_USERPWD,$userPwd); }
if(!empty($postFields)){
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields); }
if(!empty($header)){
curl_setopt($ch, CURLOPT_HTTPHEADER,$header); }
$result = curl_exec($ch) or die (curl_error($ch)); curl_close($ch); return $result; } ?>
//Bus/line //改为你的微博账号,用户名和密码之间用:隔开 $userPwd = 'user@sina.com:pwd'; //改为你微博应用的appkey $appkey = '0123456789';
//查询关键词
$q = urlencode(\"320\");
$url =
\"http://api.t.sina.com.cn/location/bus/line.xml?q=$q&city=0010&source=$appkey\";
$rst = curlSample($url,$userPwd);
echo $rst;
function curlSample($url,$userPwd,$postFields = '',$header = ''){ $ch = curl_init() or die (curl_error()) ; curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,30); if(!empty($userPwd)){
curl_setopt($ch,CURLOPT_USERPWD,$userPwd); }
if(!empty($postFields)){
curl_setopt($ch,CURLOPT_POST,true);
49
新浪微博应用开发的一个简易方案
curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields); }
if(!empty($header)){
curl_setopt($ch, CURLOPT_HTTPHEADER,$header); }
$result = curl_exec($ch) or die (curl_error($ch)); curl_close($ch); return $result; } ?>
//Bus/transfer //改为你的微博账号,用户名和密码之间用:隔开 $userPwd = 'user@sina.com:pwd';
//改为你微博应用的appkey $appkey = '0123456789';
$url =
\"http://api.t.sina.com.cn/location/bus/transfer.xml?begin_id=P010A00CHR9&end_id=P010A00CWWJ&source=$appkey\";
$rst = curlSample($url,$userPwd);
echo $rst;
function curlSample($url,$userPwd,$postFields = '',$header = ''){ $ch = curl_init() or die (curl_error()) ; curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,30); if(!empty($userPwd)){
curl_setopt($ch,CURLOPT_USERPWD,$userPwd); }
if(!empty($postFields)){
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields); }
if(!empty($header)){
curl_setopt($ch, CURLOPT_HTTPHEADER,$header); }
$result = curl_exec($ch) or die (curl_error($ch)); curl_close($ch); return $result;
50
新浪微博应用开发的一个简易方案
} ?>
//Geocode/geo to address //改为你的微博账号,用户名和密码之间用:隔开 $userPwd = 'user@sina.com:pwd';
//改为你微博应用的appkey $appkey = '0123456789';
$url =
\"http://api.t.sina.com.cn/location/geocode/geo_to_address.xml?coordinate=116.30987,39.98437&source=$appkey\";
$rst = curlSample($url,$userPwd);
echo $rst;
function curlSample($url,$userPwd,$postFields = '',$header = ''){ $ch = curl_init() or die (curl_error()) ; curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,30); if(!empty($userPwd)){
curl_setopt($ch,CURLOPT_USERPWD,$userPwd); }
if(!empty($postFields)){
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields); }
if(!empty($header)){
curl_setopt($ch, CURLOPT_HTTPHEADER,$header); }
$result = curl_exec($ch) or die (curl_error($ch)); curl_close($ch); return $result; } ?>
//Geocode/address to geo //改为你的微博账号,用户名和密码之间用:隔开 $userPwd = 'user@sina.com:pwd';
51
新浪微博应用开发的一个简易方案
//改为你微博应用的appkey $appkey = '0123456789';
//查询关键词
$q = urlencode(\"海淀\");
$url =
\"http://api.t.sina.com.cn/location/geocode/address_to_geo.xml?address=$q&source=$appkey\";
$rst = curlSample($url,$userPwd);
echo $rst;
function curlSample($url,$userPwd,$postFields = '',$header = ''){ $ch = curl_init() or die (curl_error()) ; curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,30); if(!empty($userPwd)){
curl_setopt($ch,CURLOPT_USERPWD,$userPwd); }
if(!empty($postFields)){
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields); }
if(!empty($header)){
curl_setopt($ch, CURLOPT_HTTPHEADER,$header); }
$result = curl_exec($ch) or die (curl_error($ch)); curl_close($ch); return $result; } ?>
//geocode/ip_to_geo //改为你的微博账号,用户名和密码之间用:隔开 $userPwd = 'user@sina.com:pwd';
//改为你微博应用的appkey $appkey = '0123456789';
$url =
\"http://api.t.sina.com.cn/location/geocode/ip_to_geo.xml?ip=60.194.172.177&source=$appkey\";
52
新浪微博应用开发的一个简易方案
$rst = curlSample($url,$userPwd);
echo $rst;
function curlSample($url,$userPwd,$postFields = '',$header = ''){ $ch = curl_init() or die (curl_error()) ; curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,30); if(!empty($userPwd)){
curl_setopt($ch,CURLOPT_USERPWD,$userPwd); }
if(!empty($postFields)){
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields); }
if(!empty($header)){
curl_setopt($ch, CURLOPT_HTTPHEADER,$header); }
$result = curl_exec($ch) or die (curl_error($ch)); curl_close($ch); return $result; } ?>
//Loc/get location
//获取定位数据
//改为你的微博账号,用户名和密码之间用:隔开 $userPwd = 'user@sina.com:pwd';
//改为你微博应用的appkey $appkey = '0123456789'; $url =
\"http://api.t.sina.com.cn/location/loc/get_location.json?source=$appkey\";
$data = array(
\"version\"=> \"1.1.0\
\"host\"=> \"api.t.sina.com.cn/location/loc/\ \"radio_type\"=> \"gsm\
\"request_address\"=> true, \"decode_pos\"=>true, \"location\"=>array( \"latitude\"=>39.08943, \"longitude\"=>116.36843,
53
新浪微博应用开发的一个简易方案
\"accuracy\" =>678.0 ),
\"cell_towers\"=>array( array (
\"cell_id\"=> 4466,
\"location_area_code\"=> 26630, \"mobile_country_code\"=> 460, \"mobile_network_code\"=> 0, \"signal_strength\"=> ‐60, ),
array (
\"cell_id\"=> 4466,
\"location_area_code\"=> 25054, \"mobile_country_code\"=> 460, \"mobile_network_code\"=> 0, \"signal_strength\"=> ‐70, ) ),
\"wifi_towers\"=>array( array(
\"mac_address\"=> \"00:0B:86:27:99:B0\ \"mac_name\"=>\"Sina‐web\ \"signal_strength\"=> 78, ),
array(
\"mac_address\"=> \"00:0B:86:28:7B:F0\ \"mac_name\"=>\"CMCC\
\"signal_strength\"=> 90, ) ) );
$data = json_encode($data);
function curlPost($url,$userPwd,$data = '',$header = ''){ $ch = curl_init() or die (curl_error()) ; curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,30); if(!empty($userPwd)){
curl_setopt($ch,CURLOPT_USERPWD,$userPwd); }
if(!empty($data)){
curl_setopt($ch,CURLOPT_POST,true);
54
新浪微博应用开发的一个简易方案
curl_setopt($ch,CURLOPT_POSTFIELDS,$data); }
if(!empty($header)){
curl_setopt($ch, CURLOPT_HTTPHEADER,$header); }
$result = curl_exec($ch) or die (curl_error($ch)); curl_close($ch); return $result; }
$header = array('Content‐type: application/json');
$return = curlPost($url,$userPwd,$data,$header);
//pois/get_poi //改为你的微博账号,用户名和密码之间用:隔开 $userPwd = 'user@sina.com:pwd';
//改为你微博应用的appkey $appkey = '0123456789';
$url =
\"http://api.t.sina.com.cn/location/pois/get_poi.xml?srcids=test001&source=$appkey\";
$rst = curlSample($url,$userPwd);
echo $rst;
function curlSample($url,$userPwd,$postFields = '',$header = ''){ $ch = curl_init() or die (curl_error()) ; curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,30); if(!empty($userPwd)){
curl_setopt($ch,CURLOPT_USERPWD,$userPwd); }
if(!empty($postFields)){
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields); }
if(!empty($header)){
curl_setopt($ch, CURLOPT_HTTPHEADER,$header); }
55
新浪微博应用开发的一个简易方案
$result = curl_exec($ch) or die (curl_error($ch)); curl_close($ch); return $result; } ?>
//Pois/add poi //改为你的微博账号,用户名和密码之间用:隔开 $userPwd = 'user@sina.com:pwd';
//改为你微博应用的appkey $appkey = '0123456789';
$url =
\"http://api.t.sina.com.cn/location/pois/add_poi.xml?srcid=test001&name=123&address=abc&city=north&category=010000&longitude=116.30995&latitude=39.98465&source=$appkey\";
$rst = curlSample($url,$userPwd);
echo $rst;
function curlSample($url,$userPwd,$postFields = '',$header = ''){ $ch = curl_init() or die (curl_error()) ; curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,30); if(!empty($userPwd)){
curl_setopt($ch,CURLOPT_USERPWD,$userPwd); }
if(!empty($postFields)){
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields); }
if(!empty($header)){
curl_setopt($ch, CURLOPT_HTTPHEADER,$header); }
$result = curl_exec($ch) or die (curl_error($ch)); curl_close($ch); return $result; } ?>
//Pois/view
56
新浪微博应用开发的一个简易方案
//改为你的微博账号,用户名和密码之间用:隔开 $userPwd = 'user@sina.com:pwd'; //改为你微博应用的appkey $appkey = '0123456789';
//查询关键词
$q = urlencode(\"123\");
$url =
\"http://api.t.sina.com.cn/location/pois/view.xml?q=$q&coordinate=116.37666,39.93258,116.43943,39.91171&source=$appkey\";
$rst = curlSample($url,$userPwd);
echo $rst;
function curlSample($url,$userPwd,$postFields = '',$header = ''){ $ch = curl_init() or die (curl_error()) ; curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,30); if(!empty($userPwd)){
curl_setopt($ch,CURLOPT_USERPWD,$userPwd); }
if(!empty($postFields)){
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields); }
if(!empty($header)){
curl_setopt($ch, CURLOPT_HTTPHEADER,$header); }
$result = curl_exec($ch) or die (curl_error($ch)); curl_close($ch); return $result; } ?>
//pois/round //改为你的微博账号,用户名和密码之间用:隔开 $userPwd = 'user@sina.com:pwd'; //改为你微博应用的appkey $appkey = '0123456789';
57
新浪微博应用开发的一个简易方案
//查询关键词
$q = urlencode(\"123\");
$url =
\"http://api.t.sina.com.cn/location/pois/round.xml?coordinate=116.36993,39.97646&q=$q&city=0010&source=$appkey\";
$rst = curlSample($url,$userPwd);
echo $rst;
function curlSample($url,$userPwd,$postFields = '',$header = ''){ $ch = curl_init() or die (curl_error()) ; curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,30); if(!empty($userPwd)){
curl_setopt($ch,CURLOPT_USERPWD,$userPwd); }
if(!empty($postFields)){
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields); }
if(!empty($header)){
curl_setopt($ch, CURLOPT_HTTPHEADER,$header); }
$result = curl_exec($ch) or die (curl_error($ch)); curl_close($ch); return $result; } ?>
//Pois/keyword //改为你的微博账号,用户名和密码之间用:隔开 $userPwd = 'user@sina.com:pwd'; //改为你微博应用的appkey $appkey = '0123456789';
//查询关键词
$q = urlencode(\"123\");
$url =
\"http://api.t.sina.com.cn/location/pois/keyword.xml?source=$appkey&q=$q\";
58
新浪微博应用开发的一个简易方案
$rst = curlSample($url,$userPwd);
echo $rst;
function curlSample($url,$userPwd,$postFields = '',$header = ''){ $ch = curl_init() or die (curl_error()) ; curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,30); if(!empty($userPwd)){
curl_setopt($ch,CURLOPT_USERPWD,$userPwd); }
if(!empty($postFields)){
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields); }
if(!empty($header)){
curl_setopt($ch, CURLOPT_HTTPHEADER,$header); }
$result = curl_exec($ch) or die (curl_error($ch)); curl_close($ch); return $result; } ?>
附录2:新浪微博开放平台WeiboClient类的公共方法
class WeiboClient {
/**
* 构造函数 *
* @access public
* @param mixed $akey 微博开放平台应用APP KEY * @param mixed $skey 微博开放平台应用APP SECRET
* @param mixed $accecss_token OAuth认证返回的token
* @param mixed $accecss_token_secret OAuth认证返回的token secret * @return void */
function __construct( $akey , $skey , $accecss_token , $accecss_token_secret )
59
新浪微博应用开发的一个简易方案
/**
* 最新公共微博 *
* @access public * @return array */
function public_timeline()
/**
* 最新关注人微博 *
* @access public * @return array */
function friends_timeline()
/**
* 最新关注人微博 *
* @access public * @return array */
function home_timeline()
/**
* 最新 @用户的 *
* @access public
* @param int $page 返回结果的页序号。 * @param int $count 每次返回的最大记录数(即页面大小),不大于200,默认为20。 * @return array */
function mentions( $page = 1 , $count = 20 )
/**
* 发表微博 *
* @access public
* @param mixed $text 要更新的微博信息。 * @return array */
60
新浪微博应用开发的一个简易方案
function update( $text )
/**
* 发表图片微博 *
* @access public
* @param string $text 要更新的微博信息。
* @param string $text 要发布的图片路径,支持url。[只支持png/jpg/gif三种格式,增加格式请修改get_image_mime方法
]
* @return array */
function upload( $text , $pic_path )
/**
* 获取单条微博 *
* @access public
* @param mixed $sid 要获取已发表的微博ID * @return array */
function show_status( $sid )
/**
* 删除微博 *
* @access public
* @param mixed $sid 要删除的微博ID * @return array */
function delete( $sid )
/**
* 删除微博 *
* @access public
* @param mixed $sid 要删除的微博ID * @return array */
function destroy( $sid )
61
新浪微博应用开发的一个简易方案
/**
* 个人资料 *
* @access public
* @param mixed $uid_or_name 用户UID或微博昵称。 * @return array */
function show_user( $uid_or_name = null )
/**
* 关注人列表 *
* @access public
* @param bool $cursor 单页只能包含100个关注列表,为了获取更多则cursor默认从‐1开始,通过增加或减少cursor来获
取更多的关注列表
* @param bool $count 每次返回的最大记录数(即页面大小),不大于200,默认返回20
* @param mixed $uid_or_name 要获取的 UID或微博昵称 * @return array */
function friends( $cursor = false , $count = false , $uid_or_name = null )
/**
* 粉丝列表 *
* @access public
* @param bool $cursor 单页只能包含100个粉丝列表,为了获取更多则cursor默认从‐1开始,通过增加或减少cursor来获
取更多的粉丝列表
* @param bool $count 每次返回的最大记录数(即页面大小),不大于200,默认返回20。
* @param mixed $uid_or_name 要获取的 UID或微博昵称 * @return array */
function followers( $cursor = false , $count = false , $uid_or_name = null )
/**
* 关注一个用户 *
* @access public
62
新浪微博应用开发的一个简易方案
* @param mixed $uid_or_name 要关注的用户UID或微博昵称 * @return array */
function follow( $uid_or_name )
/**
* 取消关注某用户 *
* @access public
* @param mixed $uid_or_name 要取消关注的用户UID或微博昵称 * @return array */
function unfollow( $uid_or_name )
/**
* 返回两个用户关系的详细情况 *
* @access public
* @param mixed $uid_or_name 要判断的用户UID * @return array */
function is_followed( $uid_or_name )
/**
* 用户发表微博列表 *
* @access public
* @param int $page 页码
* @param int $count 每次返回的最大记录数,最多返回200条,默认20。 * @param mixed $uid_or_name 指定用户UID或微博昵称 * @return array */
function user_timeline( $page = 1 , $count = 20 , $uid_or_name = null )
/**
* 获取私信列表 *
* @access public
* @param int $page 页码
* @param int $count 每次返回的最大记录数,最多返回200条,默认20。
63
新浪微博应用开发的一个简易方案
* @return array */
function list_dm( $page = 1 , $count = 20 )
/**
* 发送的私信列表 *
* @access public
* @param int $page 页码
* @param int $count 每次返回的最大记录数,最多返回200条,默认20。 * @return array */
function list_dm_sent( $page = 1 , $count = 20 )
/**
* 发送私信 *
* @access public
* @param mixed $uid_or_name UID或微博昵称
* @param mixed $text 要发生的消息内容,文本大小必须小于300个汉字。 * @return array */
function send_dm( $uid_or_name , $text )
/**
* 删除一条私信 *
* @access public
* @param mixed $did 要删除的私信主键ID * @return array */
function delete_dm( $did )
/**
* 转发一条微博信息。 *
* @access public
* @param mixed $sid 转发的微博ID * @param bool $text 添加的转发信息。 * @return array
64
新浪微博应用开发的一个简易方案
*/
function repost( $sid , $text = false )
/**
* 对一条微博信息进行评论 *
* @access public
* @param mixed $sid 要评论的微博id * @param mixed $text 评论内容
* @param bool $cid 要评论的评论id * @return array */
function send_comment( $sid , $text , $cid = false )
/**
* 发出的评论 *
* @access public
* @param int $page 页码
* @param int $count 每次返回的最大记录数,最多返回200条,默认20。 * @return array */
function comments_by_me( $page = 1 , $count = 20 )
/**
* 最新评论(按时间) *
* @access public
* @param int $page 页码
* @param int $count 每次返回的最大记录数,最多返回200条,默认20。 * @return array */
function comments_timeline( $page = 1 , $count = 20 )
/**
* 单条评论列表(按微博) *
* @access public
* @param mixed $sid 指定的微博ID * @param int $page 页码
65
新浪微博应用开发的一个简易方案
* @param int $count 每次返回的最大记录数,最多返回200条,默认20。 * @return array */
function get_comments_by_sid( $sid , $page = 1 , $count = 20 )
/**
* 批量统计微博的评论数,转发数,一次请求最多获取100个。 *
* @access public
* @param mixed $sids 微博ID号列表,用逗号隔开 * @return array */
function get_count_info_by_ids( $sids )
/**
* 对一条微博评论信息进行回复。 *
* @access public
* @param mixed $sid 微博id
* @param mixed $text 评论内容。 * @param mixed $cid 评论id * @return array */
function reply( $sid , $text , $cid )
/**
* 返回用户的发布的最近20条收藏信息,和用户收藏页面返回内容是一致的。 *
* @access public
* @param bool $page 返回结果的页序号。 * @return array */
function get_favorites( $page = false )
/**
* 收藏一条微博信息 *
* @access public
* @param mixed $sid 收藏的微博id * @return array
66
新浪微博应用开发的一个简易方案
*/
function add_to_favorites( $sid )
/**
* 删除微博收藏。 *
* @access public
* @param mixed $sid 要删除的收藏微博信息ID. * @return array */
function remove_from_favorites( $sid )
function verify_credentials()
/**
* 修改头像 *
*/
function update_avatar( $pic_path ) }
67
因篇幅问题不能全部显示,请点此查看更多更全内容