ロケタッチには、’駅データ’の駅コードからスポットデータを取得するAPIが提供されている。今回はこのAPIを使って、路線単位で駅のスポットIDを取得することを考える。
例えば駅コードが’1122501′のスポットデータは、以下のリクエストで取得できる。
https://api.loctouch.com/v1/railway/stations/1122501
- 駅コードを指定してスポットデータを取得&保存する関数
駅コードを指定してロケタッチサーバに問い合わせ、得られたスポットIDをデータストアに保存する関数を作成する。サーバへの負荷軽減のため、一定間隔で呼び出す前提。(そのため対象をグローバル変数に保持しておく。)// JavaScript // データストアにある駅データに、ロケタッチのスポットIDを追加する //// 対象はグローバル変数 gTgtStations[i] に保持されている //// 配列のインデックスを指定して処理を実行する function addLoctSpotByStation(i){ // ロケタッチサーバのURI var uri = 'https://api.loctouch.com/v1/railway/stations/' + gTgtStations[i].station_cd + '?callback=?'; // サーバにリクエストを発行する $.getJSON(uri, function(res){ if (res.code == 200){ // 処理成功 // レスポンスからスポットIDを取り出して、データにセットする gTgtStations[i].loc_loct = res.station.station_spot_id; // データストアを更新する gDSrwStation.dbUpd(gTgtStations[i].station_cd, gTgtStations[i], function(){ console.log('updated:' + i + ' ' + gTgtStations[i].station_name); }); } else { // 処理失敗 console.log('error:' + i) } }); }
- 路線コードを指定して駅データを取得する関数
路線コードを指定してデータストアから駅データを取得し、結果をグローバル変数に保持しておく。// JavaScript function addStationsByLinecd(line_cd, callback){ var query = 'line_cd:' + line_cd; //console.debug(query); gDSrwStation.dbRev('', query, function(stations){ for (var i = 0; i < stations.length; i++) { gTgtStations.push(stations[i]) } callback(); }); }
- 2つの関数を組み合わせる
保持している駅データをループで取り出し、(タイマー機能を使って一定間隔で)ロケタッチサーバにリクエストを発行&結果をデータストアに保存する。
例えば、路線コード’11225′の駅データを10秒間隔で処理したい場合は、以下のようにする。// JavaScript addStationsByLinecd('11225', function(){ for (var i = 0; i < gTgtStations.length; i++) { var func = 'addLoctSpotByStation(' + i + ')'; setTimeout(func, 10000 * i); } });
- 画面イメージ: xttrwconv02.html