1. 程式人生 > >生成介面 XML、json、jsonp

生成介面 XML、json、jsonp

<?php
   //需求:對外提供一個介面,要求在外部輸入新聞標題,可以獲取到相應的內容,要求提供支援三種格式的介面
   //生成介面  XML、json、jsonp
   /*
   說明:
     1、介面地址http://www.study.com/seven7/1410phpB/20160726/app.php
2、請求方式 get
3、支援的資料格式 xml/json/jsonp
     4、引數說明
        title   必須     使用者要獲取的條件引數
        type    可選     xml/json/jsonp 預設為json
        key     必填     使用者申請該介面時生成的祕鑰
        callback  可選   獲取jsonp資料的時候必填
5、介面案例
  json例項:
   http://www.study.com/seven7/1410phpB/20160726/app.php?title=你好&key=88888888
  xml例項:
  http://www.study.com/seven7/1410phpB/20160726/app.php?title=你好&key=88888888&type=xml
  jsonp例項:
  http://www.study.com/seven7/1410phpB/20160726/app.php?title=你好&key=88888888&type=jsonp&callback=data
   */




   //第一步  判斷祕鑰
   $token='8888888888888888888';  //使用者申請介面成功後的key值,假設我們是直接session中取出來,就是使用者申請時存進去
   $key=$_GET['key'];  //接收使用者傳遞的祕鑰
   $type=isset($_GET['type']) ?  $_GET['type'] : 'json'; //接收使用者要獲取的資料的格式
   $condition=$_GET['title'];
   //判斷使用者是否是正常訪問
   if($token!=$key){
     echo '請輸入正確的key值';
     die;
   }
   $pdo=new PDO('mysql:host=localhost;dbname=test','root','root');
   $pdo->exec('set names utf8');
   $data=$pdo->query("select * from news where title like '%$condition%'")->fetchAll(PDO::FETCH_ASSOC);
    if($type=='xml'){
  //1)xml格式
  header('content-type:text/xml;charset=utf-8');
  echo "<?xml version='1.0' encoding='utf-8' ?>";
  echo '<news>';
  foreach($data as $v){
     echo '<new>';
          echo '<title>'.$v['title'].'</title>';
          echo '<content>'.$v['content'].'</content>';
     echo '</new>';
  }
  echo '</news>';
}elseif($type=='jsonp'){
header('content-type:text/json');
  //2)jsonp格式
   $str=json_encode($data); //把陣列轉換json格式的字串,使用者回撥函式返回資料
$callback=$_GET['callback']; //接收回調函式的名稱
echo $callback."(".$str.")";
}else{
  //3)json格式
  echo json_encode($data);
}