ExtJS HttpProxy+XmlReaderのサンプル

4月 20th, 2008 | By yuki | Category: Ext JS

前回のデモのHttpProxy+XmlReader版デモです↓

HttpProxy+XmlReaderデモ

コードの説明については↑のページのソースをご覧ください。前回と異なるのは、

  • Proxy : ScriptTagProxy → HttpProxy
  • Reader : JsonReader → XmlReader

データを取得するためのProxyと読み込みのためのReaderがそれぞれ変わっています。注意点ですが、

  • JsonReaderとXmlReaderではパラメーター名とパスの指定方法が異なる(レコードを指すパラメータはJsonReaderが「root」なのに対しXmlReaderは「record」、トータルのレコード数は「totalProperty」に対し「totalRecords」といった感じです。以下比較)

XmlReader

reader: new Ext.data.XmlReader({
  record: ‘usedcar’,
  totalRecords: ‘results_available’,
  id: ‘id’,
  fields: [
    {name:’photo’, mapping: ‘photo/main/s’},
    {name:’model’},
    {name:’grade’},
    {name:’brand’, mapping: ‘brand/name’},
    {name:’url’, mapping: ‘urls/pc’},
    {name:’price’}
  ]
})

JsonReader

reader: new Ext.data.JsonReader({
  root: ‘results.usedcar’,
  totalProperty: ‘results.results_available’,
  id: ‘id’,
  fields: [
    {name:’photo’, mapping: ‘photo.main.s’},
    {name:’model’},
    {name:’grade’},
    {name:’brand’, mapping: ‘brand.name’},
    {name:’url’, mapping: ‘urls.pc’},
    {name:’price’}
  ]
})

JsonReaderのrootとtotalRecordsは上記例ではそれぞれ、「results.usedcar」、「results.results_available」と最上位からのパスになっていますが、XmlReaderは最上位のノードは省略して「usedcar」「results_available」となります。パスの表現もJsonReaderは「.」で区切るのに対して、XmlReaderは「/」となります

  • HttpProxyのデフォルトリクエストは「POST」なので、必要に応じてコンストラクターで「GET」に設定

以下、サーバー側のPHPのコードになります:

// Carsendor.NET データ取得スクリプト

// 入力パラメータの処理
$start = ($_GET['start']!==null && is_numeric($_GET['start']))?(integer)$_GET['start']:1;
$count = ($_GET['count']!==null && is_numeric($_GET['count']))?(integer)$_GET['count']:20;

// APIクエリの設定
$url = 'http://webservice.recruit.co.jp/carsensor/usedcar/v1/';
$params = array(
	'key' 	=> 'd66bf4106270fae4', // 自分のAPI-KEYを入れてください
	'person'=> 2, // Carsensor.NET API用必須パラメーターの一つ(乗車定員)これでほぼ全データを取得
	'order' => 1,
	'format'=> 'xml',
	'start'	=> $start,
	'count' => $count
);
$param_str = array();
foreach($params as $key => $value){
	$param_str[] = $key."=".$value;
}
$query = $url.'?'.implode('&',$param_str);

// XMLヘッダーの送信
header("Content-Type: text/xml");

// 余計なデータをサーバー側で削ってクライアントに送るような処理を入れた方がベターかも
echo file_get_contents($query);

Trackback URL

Leave Comment