300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > PHP+新浪微博开放平台+新浪云平台(SAE)开发微博应用——PHP SDK中Demo程序简析

PHP+新浪微博开放平台+新浪云平台(SAE)开发微博应用——PHP SDK中Demo程序简析

时间:2019-04-12 17:12:34

相关推荐

PHP+新浪微博开放平台+新浪云平台(SAE)开发微博应用——PHP SDK中Demo程序简析

PHP+新浪微博开放平台+新浪云平台(SAE)

——新浪微博应用开发的一个解决方案

一、PHP+新浪微博开放平台+新浪云平台(SAE)方案的基础

二、建立微博应用的过程

三、PHP SDK中Demo程序简析

四、进一步学习的走向和有用的资源

五、必须交待的几个问题

【PDF全文下载】

PHP SDK中Demo程序简析

接下来,需要逐步学会编写PHP代码完成相应的功能了。即使将来你用的不是PHP,也不妨了解一下,将微博开发中的一些机理深入一些后再作打算。

不会PHP还能做出刚才的应用,是件值得骄傲的事。我们已经解决了整个开发过程的大事。不过,稍微骄傲一下就行了。不懂PHP至少不能作为荣耀的事。

言归正传,我们通过PHP SDK中Demo程序的剖析,来初步了解一个PHP微博应用的代码结构。

1、PHP SDK中的代码

在PHP SDK中提供的几个PHP文件如下图所示。

将代码部署到SAE后,运行应用首先执行的是index.php。

index.php中的代码是:

<?phpsession_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;?><a href="<?=$aurl?>">UseOauth to login</a>

启动session后,先将config.php文件包含进来。

config.php文件中的代码是:

<?phpdefine( "WB_AKEY" , '2101372524' );define( "WB_SKEY" ,'fa9f5111e317a942b895532b1f73837b' );?>

config.php的作用就是将建立微博应用中得到的AppKey和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中设置的链接:

<a href="<?=$aurl?>">UseOauth to login</a>

由用户点击,认证过程由callback.php页面完成。

callback.php中的代码是:

<?phpsession_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;?>授权完成,<a href="weibolist.php">进入你的微博列表页面</a>

这部分代码不再详述,在搞清OAuth授权之前,这些代码可以暂时不求甚解(不过终究要明白,不管以后是不是用PHP开发),直接使用,上面的几个文件也不必修改。另外,上面几个文件中涉及到向session中写入值,这是为以后页面中的会话而设定的。

最后,“进入你的微博列表页面”链接将引向执行weibolist.php。

weibolist.php是我们的应用执行的时最关心的代码。下面分段简述:

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

下面是换头像的表单:

<h2><?=$me['name']?> 你好~ 要换头像么?</h2><form action="weibolist.php" ><inputtype="text" name="avatar" style="width:300px"value="头像url" /><inputtype="submit" /></form>

发送新微博的表单

<h2>发送新微博</h2><form action="weibolist.php" ><inputtype="text" name="text" style="width:300px" /><inputtype="submit" /></form>

发送图片微博的表单:

<h2>发送图片微博</h2><form action="weibolist.php" ><inputtype="text" name="text" style="width:300px" value="文字内容"/><inputtype="text" name="pic" style="width:300px"value="图片url" /><inputtype="submit" /></form>

处理表单请求的仍然是weibolist.php,下面是处理代码:

<?phpif( 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"<p>发送完成</p>" ;}?>

$c ->upload( $_REQUEST['text'] ,$_REQUEST['pic'] )发送了带图片的微博;

$c->update_avatar( $_REQUEST['avatar']);修改了头像;

$c->update( $_REQUEST['text'] );发送的是纯文字的微博。

这些工作都是通过WeiboClient对象$c完成的。

下面的代码通过foreach循环将取到的当前登录用户及其所关注用户的最新微博逐条地显示出来。

<?php if( is_array( $ms ) ): ?><?php foreach( $ms as $item ): ?><divstyle="padding:10px;margin:5px;border:1px solid #ccc"><?=$item['text'];?></div><?php endforeach; ?><?php endif; ?>

显示微博时,仅显示了每条微博的文本部分。这样的微博你愿意看吗?不知道是哪位好友发的,看不到好友的情况,看不到微博中给人深刻映像的图片……

别怨天尤人了,一切掌握在自己手中,我们先尝试着将Demo扩充一下,以求更多体验。

2、扩充Demo

新浪微博开放平台提供了API文档(/wiki/API%E6%96%87%E6%A1%A3_V2),目前用的是第2版(V2)。这个文档提供了开发中用到的接口的说明,不管用什么语言开发,这些内容总是要非常熟悉的。

请在新浪微博开放平台中找到API文档的链接,稍加浏览,我们将结合需求,一边查文档,一边对Demo进行扩充。

在weibolist.php,当前登录用户及其所关注用户的最新微博是通过$c->home_timeline();获得的。在API文档V2的读取接口部分找到statuses/home_timeline条目,点击链接浏览对该条目详细解释的页面。

在稍靠后的地方,有返回值的“字段说明”:

回想输出$ms中的每一条微博的代码:

<?php foreach( $ms as $item ): ?><divstyle="padding:10px;margin:5px;border:1px solid #ccc"><?=$item['text'];?></div><?php endforeach; ?>

原来我们仅仅是用<?=$item['text'];?>输出了微博的文本部分,用的是text字段。我们还能用created_at显示创建时间,用id显示微博,用XXX_pic获取各种图片的地址。

采用模仿的方式,下面把这段代码修改为:

<?php foreach( $ms as $item ): ?><divstyle="padding:10px;margin:5px;border:1px solid #ccc"><?=$item['text'];?> <!//正文>(发文时间: <?=$item['created_at'];?>)<br><?php$ori_img=$item['original_pic'];if($ori_img){echo "<ahref='".$ori_img."'> <imgsrc='".$item['thumbnail_pic']."'></a>";}?></div><?php endforeach; ?>

如下图所示,显示的微博中有了发文时间和图片,点击小图片还能通过链接看到大图片。

再看“字段说明”的表格,微博作者的用户信息字段user的类型是object。因此,为了在显示博文时将作者的有关情况输出,我们需要知道表示微博作者的user对象的结构。

还是回到API文档V2页面,找到“用户接口”部分的users/show条目,我们看到user对象原来有如此多的字段(属性)。

我们用$item['user']可以获得微博作者对象,于是通过下面的代码:

<?php if( is_array( $ms ) ): ?><?phpforeach( $ms as $item ): ?><divstyle="padding:10px;margin:5px;border:1px solid #ccc"><imgsrc="<?=$item['user']['profile_image_url'];?>"><!//头像><ahref="<?=$item['user']['url']; ?>"><?=$item['user']['id'];?>:<?=$item['user']['name']; ?></a><br> <!//昵称及链接><?=$item['text'];?> <!//正文>(发文时间:<?=$item['created_at'];?>)<br><?php$ori_img =$item['original_pic'];if($ori_img){echo "<a href='".$ori_img."'> <imgsrc='".$item['thumbnail_pic']."'></a>";}?></div><?phpendforeach; ?><?php endif; ?>

显示的微博中,加入了微博作者的头像、ID和昵称,点击昵称还可以链接到他的主页上,如下图所示。

再完善一下。

在weibolist.php中,使用微博应用的主人信息仅在下面一句代码中显示了个昵称。

<h2><?=$me['name']?> 你好~ 要换头像么?</h2>

实际上,这儿的$me也是个user对象。我们将<?=$me['name']?>删除,而在这一段代码前加入:

<imgsrc="<?=$me['profile_image_url'];//我的头像?>"><?=$me['id']; ?>:<?=$me['name']; //昵称 ?> 【<?=$me['description'];//昵称 ?>】粉丝数:<?=$me['followers_count'];?> 关注数:<?=$me['friends_count'];?> 微博数:<?=$me['statuses_count'];?> 收藏数:<?=$me['favourites_count'];?><br><?=$me['friendships']['friends']['ids'];?>

显示的页面换为如下图所示。效果已经大大改观。

作者不能再讲下去了,聪明的读者应该继续改进下去。将这样的学习形成习惯,构思、查阅资料、改进,再构思……

中间一定会出现些障碍,一一解决后,柳暗花明。

这是一种精神。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。