php通过get,post方法请求API接口方法及封装

前几天想给博客右部区域加一个类似行业资讯的模块,也就是现在右边的“开源资讯”部分,开始使用的聚合数据的免费新闻接口,后来发现聚合数据的新闻质量太差,而且相关性也很不好,所以后来就放弃聚合数据的了,然后自己用PHP的一个数据采集扩展QueryList采集的开源中国的一个模块

虽然最后没有采用聚合的数据,但还是把中间用到的PHP请求api接口的方法做一个总结


get方法


/**
 * get方法
 * @param string $url 地址
 * @return string 返回页面信息
 */
function get_url($url) 
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);  //设置访问的url地址
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);//不输出内容
    $result =  curl_exec($ch);
    curl_close ($ch);
    return $result;
}

post方法


/**
 * post方法
 * @param string $url 地址
 * @param string $data 提交的数据
 * @return string 返回结果
 */
function post_url($url, $data) 
{
    $curl = curl_init(); // 启动一个CURL会话
    curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)'); // 模拟用户使用的浏览器
    //curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
    //curl_setopt($curl, CURLOPT_AUTOREFERER, 1);    // 自动设置Referer
    curl_setopt($curl, CURLOPT_POST, 1);             // 发送一个常规的Post请求
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);   // Post提交的数据包x
    curl_setopt($curl, CURLOPT_TIMEOUT, 30);         // 设置超时限制 防止死循环
    curl_setopt($curl, CURLOPT_HEADER, 0);           // 显示返回的Header区域内容
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);   // 获取的信息以文件流的形式返回
 
    $tmpInfo = curl_exec($curl); // 执行操作
    if(curl_errno($curl)) 
    {
       echo 'Errno'.curl_error($curl);//捕捉异常
    }
    curl_close($curl); // 关闭CURL会话
    return $tmpInfo; // 返回数据
}

对象转化为数组


/**
 * 对象转化为数组
 * @param object $obj 对象
 * @return array 数组
 */
function object_to_array($obj){
    $_arr = is_object($obj) ? get_object_vars($obj) :$obj;
    foreach ($_arr as $key=>$val){
        $val = (is_array($val) || is_object($val)) ? object_to_array($val):$val;
        $arr[$key] = $val;
    }
    return $arr;
}

数组转xml


/**
 * 数组转xml
 * @param string $arr array
 * @return string XML
 */
function arrayToXml($arr)
{
    $xml = "<xml>";
    foreach ($arr as $key=>$val)
    {
         if (is_numeric($val))
         {
            $xml.="<".$key.">".$val."</".$key.">";
         }
         else
            $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
    }
    $xml.="</xml>";
    return $xml;
}

封装


/**
 * 调用api接口
 * @param url $apiurl api.muxiangdao.cn/Article/articleList 接口地址
 * @param array $param ['status'=>'1','page'=>'2','pageshow'=>'10']; 参数(数组格式)
 * @param string $format eg:array(arr),object(obj),json;defalut = array 返回数据格式
 * @param string $method get or post 请求方法
 */
 function get_api($apiurl, $param, $format = 'array', $method = 'get'){
     if (is_array($param)) {
         $string = '?';
         foreach ($param as $key => $val){
             $string .= $key.'='.$val.'&';
         }
         $param = substr($string, 0, -1);
     }
     $url = $apiurl.$param;
     switch (strtolower($method)){
         case '':$json = get_url($url);break;
         case 'get':$json = get_url($url);break;
         case 'g':$json = get_url($url);break;
         case 'post':$json = post_url($apiurl,$param);break;
         case 'p':$json = post_url($apiurl,$param);break;
         default:$json = get_url($url);break;
     }
     $start = strpos($json, '{');
     $end = -1*(strlen(strrchr($json, '}'))-1);
     if ($end) {
        $json = substr($json, $start, $end);
     }else {
         $json = substr($json, $start);
     }
     $obj = json_decode($json);
    $array = object_to_array($obj);
    $xml = arrayToXml($array);
    switch ($format){
        case 'array':$data = $array;break;
        case 'arr':$data = $array;break;
        case 'obj':$data = $obj;break;
        case 'object':$data = $obj;break;
        case 'json':$data = $json;break;
        default:$data = $array;
    }
    return $data;
}

飞行猿博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论