pw的api涉及到的文件为pw根目录下的pw_api.php文件和api目录下的所有文件.
客户端可以请求pw根目录下的pw_api.php文件来请求api中封装好的方法,那么http请求需要传递什么参数呢?
首先类似http请求的php函数有curl和fsockopen,fopen等.因为curl使用比较方便,下面通过curl来对pw的api使用方法进行下简单的应用和阐述:
请求pw的api的客户端
脚本如下:
- <?php
- $arg = '';
- $pwApiUrl = 'http://localhost/pw87/pw_api.php?';
- $apiKey = 'ebd35b22be7b7f1180';//请从pw/data/bbscache/config.php里边获取$db_siteownerid
- $request = array(
- 'mode' => 'User',//api中类名
- 'method' => 'getInfo',//api类中方法
- 'charset' => 'gbk',//客户端编码
- 'params' => serialize(array('706546,706545',array('uid', 'username', 'icon', 'gender', 'location', 'bday'))),//方法中形参serialize(array(形参1,形参2,...))
- );
- ksort($request);
- reset($request);
- foreach ($request AS $key => $value){
- $arg .= $key."=".$value."&";
- }
- $arg .= 'sig='.md5($arg . $apiKey);
- $ch = curl_init();//初始化一个cURL会话
- curl_setopt($ch, CURLOPT_URL, $pwApiUrl.$arg);//设置一个cURL传输选项
- ob_flush();
- curl_exec($ch);//执行一个cURL会话
- $content = ob_get_contents();
- ob_end_clean();
- $info = curl_getinfo($ch);//获取一个cURL连接资源句柄的信息
- curl_close($ch);//关闭一个cURL会话
- echo '<pre>';
- print_r(unserialize($content));
- echo '</pre>';
- ?>
1) 首先要获得pw程序的apikey,这个值可以打开data/bbscache/config.php里边的$db_siteownerid的值
2) 构造一个request请求,上面用数组主要是比较清楚各个参数的分布,最终是构造成一段追加在http请求连接后面的参数字符串,其中重要的一个参数是:sig. 也就是客户端向服务端表示匹配的友好签名(我个人的理解,可能名次用的不对).因为api中没有涉及到太多的权限判断,所以这个sig至关重要
3) 然后就是curl函数的用法了
4) 重要的几个文件:pw_api.php(直接请求文件) api/class_base.php(负责签名匹配,返回数据格式定义和请求的分发) 其他都是些具体实现的api类了,比如帖子相关类实现:class_Thread.php,板块相关实现类:class_Forum.php,用户相关实现类:class_User.php,积分相关实现类:class_Credit.php等等. 类里边的实现和其他差不多.因为刚开始不知道都要传什么参数,在class_base.php里边看了就知道了,通过了签名匹配以后就容易了,最终通过call_user_func_array(array($obj, $method), $param)来调用具体的类
附上上面实例请求我本地返回的数据:
- Array
- (
- [charset] => gbk
- [result] => Array
- (
- [706545] => Array
- (
- [uid] => 706545
- [username] => repinsmistal
- [icon] => http://localhost/pw87/images/face/none.gif
- [gender] => 0
- [location] =>
- [bday] => 0000-00-00
- )
- [706546] => Array
- (
- [uid] => 706546
- [username] => rickyleo
- [icon] => http://localhost/pw87/images/face/none.gif?1326162167
- [gender] => 0
- [location] =>
- [bday] => 2011-01-01
- )
- )
- )
欢迎探讨~