エセプログラマーの戯言

プログラムやリナックスなどについてのメモです

全体表示

[ リスト ]

WebAPIクラス

最近、WebAPIを使うことが多くなってきたので、以前作ったクラスを紹介したいと思います。


とりあえず、わかりきってる処理は、全て抽象クラスで実装しちゃおうって考えです。
ちなみに、xmlしか対応してません。

抽象クラス

  /******************************
   * WebAPIの抽象クラス
   * 2008.06.22 (C) よっくん
   *****************************/

abstract class AbstractWebApi{
  protected $appid;
  protected $url;
  protected $id;
  protected $param;
  protected $results;

  public function __construct($appid){
    $this->appid = $appid;
    $this->url = $url;
    $this->id = 0;
    $this->param = array();
    $this->results = array();
  }

  abstract public function results_set($xml);

  public function set($index, $value){
    foreach(array_keys($this->param) as $key){
      if($index == $key){
        $this->param[$index] = $value;
        break;
      }
    }
  }

  public function record($id){
    if(!isset($this->results[$id])){
      return false;
    }
    $this->id = $id;
    return true;
  }

  public function get($index, $default=""){
    return isset($this->results[$this->id]->$index) ? $this->results[$this->id]->$index : $default;
  }

  public function request_url_set($url){
    foreach($this->param as $key => $value){
      if($value !== null){
        $this->url .= '&'.$key. "=".$value;
      }
    }
  }

  public function request(){
    $this->request_url_set();
    $xml = simplexml_load_file($this->url);
    $this->results_set($xml);
  }
}

サブクラス

さて、サブクラスは、例えば、ぐるなびのWebサービスを実装する場合、
  /**********************************
   * ぐるなびレストラン検索 クラス
   * 2008.06.22 (C) よっくん
   *********************************/
require_once 'AbstractWebApi.class.php';

class GnaviShopSearch extends AbstractWebApi{

  public function __construct($appid){
    parent::__construct($appid);
    $this->url = 'http://api.gnavi.co.jp/ver1/RestSearchAPI/?keyid='.$this->appid;
    $this->param['id'] = null;
    $this->param['name'] = null;
    $this->param['name_kana'] = null;
    $this->param['tel'] = null;
    $this->param['address'] = null;
    $this->param['area'] = null;
    $this->param['pref'] = null;
    $this->param['category_l'] = null;
    $this->param['category_s'] = null;
    $this->param['input_coordinates_mode'] = null;
    $this->param['equipment'] = null;
    $this->param['coordinates_mode'] = null;
    $this->param['latitude'] = null;
    $this->param['longtitude'] = null;
    $this->param['range'] = null;
    $this->param['sort'] = null;
    $this->param['offset'] = null;
    $this->param['hit_per_page'] = null;
    $this->param['offset_page'] = null;
    $this->param['freeword'] = null;
    $this->param['freeword_condition'] = null;
  }

  public function results_set($xml){
    $this->results = $xml->rest;
  }
}

まず、リクエストパラメータを格納する$this->paramをnullで定義します。
必要なパラメータだけで良いんですが、とりあえず、全部定義してました。

んで、結果を格納する$this->resultsに、結果で欲しいものを格納します。この場合、レストラン情報が欲しいので、$xml->restを格納しています。

使い方

このクラスの使い方は、

require_once 'GnaviShopSearch.class.php';

$keyid='xxxxxxxxxx'; //発行されたアクセスキー
$shop = new GnaviShopSearch($keyid);
$shop->set('freeword', '沖縄そば'); //リクエストパラメータをセット
$shop->request();

for($i=0; $shop->record($i); $i++){
   echo $shop->get('name')."<br />";
}

まぁ、こんなクラスを作らなくても、簡単に出来るのが、WebAPIなんですが、管理しやすくなるんじゃないかなぁと思います。

何かおかしいところとか、意見とかありましたら、よろしくお願いします。

.


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事