0
点赞
收藏
分享

微信扫一扫

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文件如下图所示。

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

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

index.php中的代码是:


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


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

config.php文件中的代码是:


<?php
define( "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中的代码是:


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


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

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

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


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

下面是换头像的表单:


<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,下面是处理代码:


<?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"<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文档(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



string



字符串型的微博ID



created_at



string



创建时间



id



int64



微博ID



text



string



微博信息内容



source



string



微博来源



favorited



boolean



是否已收藏



truncated



boolean



是否被截断



in_reply_to_status_id



int64



回复ID



in_reply_to_user_id



int64



回复人UID



in_reply_to_screen_name



string



回复人昵称



mid



int64



微博MID



bmiddle_pic



string



中等尺寸图片地址



original_pic



string



原始图片地址



thumbnail_pic



string



缩略图片地址



reposts_count



int



转发数



comments_count



int



评论数



annotations



array



微博附加注释信息



geo



object



地理信息字段



user



object



微博作者的用户信息字段



回想输出$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对象原来有如此多的字段(属性)。




返回值字段



字段类型



字段说明



id



int64



用户UID



screen_name



string



用户昵称



name



string



友好显示名称



province



int



用户所在地区ID



city



int



用户所在城市ID



location



string



用户所在地



description



string



用户描述



url



string



用户博客地址



profile_image_url



string



用户头像地址



domain



string



用户的个性化域名



gender



string



性别,m:男、f:女、n:未知



followers_count



int



粉丝数



friends_count



int



关注数



statuses_count



int



微博数



favourites_count



int



收藏数



created_at



string



创建时间



following



boolean



当前登录用户是否已关注该用户



allow_all_act_msg



boolean



是否允许所有人给我发私信



geo_enabled



boolean



是否允许带有地理信息



verified



boolean



是否是微博认证用户,即带V用户



allow_all_comment



boolean



是否允许所有人对我的微博进行评论



avatar_large



string



用户大头像地址



verified_reason



string



认证原因



follow_me



boolean



该用户是否关注当前登录用户



online_status



int



用户的在线状态,0:不在线、1:在线



bi_followers_count



int



用户的互粉数



status



object



用户的最近一条微博信息字段



我们用$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'];?>


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

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

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

这是一种精神。





举报

相关推荐

0 条评论