Yahoo API を使うクラス? for php

最近Yahoo  や Technorati のAPIを使いまくってます。

それようにクラスを作ったので、公開してみます。
(一番下に張っておきます。)

使い方

とりあえず パラメータを作成します。
といっても引数名のキーで引数の値を入れた配列をいれればOKです。

Technorati でも Yahoo でも使えますが、
とりあえずYahooだと

  $params[‘appid’] = “id”;
  $params[‘query’] = $_POST[‘keywords’];
  $params[‘results’] = “100”;
  $params[‘start’] = “1”;

こんなかんじです。

appid(Yahooで必要なんで)が id で
query(YahooSearchのクエリー)が $_POST[‘keyword’]で
結果数は100開始行は1
という設定です。

Techonrati なら

  $params[‘language’] = ‘en’;
  $params[‘query’] = $_POST[‘keywords’];
  $params[‘limit’] = 100;
  $params[‘authority’] = ‘a7’;

こんなかんじです。

  $UseApi = new UseApi($params,’http://api.search.yahoo.co.jp/AssistSearchService/V1/webunitSearch?’);
  print_r $UseApi->apiData;

作った配列とAPIのURLを引数にクラスを生成すると
$UseApi->apiData にデータ(Array)がくるので
それを上手くつかってください。

Yahoo Technorati にかぎらずRESTなAPIなら
大抵上手くいくとおもいます。

なお本クラスは
PHPテクメモさんのものを使わせてもらっています。
*問題があったら消しますので。。

以下丸コピしてはっつけてください。
もしくはこちらからダウンロード
UseApi.zip

/*
Using API Class
ex.
  $params[‘appid’] = “id”;
  $params[‘query’] = $_POST[‘keywords’];
  $params[‘results’] = “100”;
  $params[‘start’] = “1”;

  $UseYahooApi = new UseYahooApi($params,’http://api.search.yahoo.co.jp/AssistSearchService/V1/webunitSearch?’);
  print_r $UseYahooApi->apiData;
*/
Class UseApi{

  var $requestUrl;
  var $params;
  var $apiData;
  
/*
Inputs
  1:Request Parameter Array
  2:Request Service Main URL

Outputs
  return true
  return data in $apiData
  
*/
  function UseApi($params=null,$url=”){
    foreach($params as $key => $value){
      $this->params .= $key.”=”.rawurlencode($value).”&”;
    }
    $this->requestUrl = $url.$this->params;
    
    $xmlData = file_get_contents($this->requestUrl);
    $XmlToArray = new XmlToArray($xmlData);
    $this->apiData = $XmlToArray->createArray();
    return true;
  }
}
/*
Xml Exchanges to Array
*/
Class XmlToArray
{
  var $xml=”;

  function XmlToArray($xml)
  {
   $this->xml = $xml;
  }

  function _struct_to_array($values, &$i)
  {
    $child = array();
    if (isset($values[$i][‘value’])) array_push($child, $values[$i][‘value’]);
    
    while ($i++ < count($values)) {       switch ($values[$i]['type']) {         case 'cdata':            array_push($child, $values[$i]['value']);           break;         case 'complete':           $name = $values[$i]['tag'];           if(!empty($name)){             $child[$name]= ($values[$i]['value'])?($values[$i]['value']):'';             if(isset($values[$i]['attributes'])) {               $child[$name] = $values[$i]['attributes'];             }           }           break;                  case 'open':           $name = $values[$i]['tag'];           $size = isset($child[$name]) ? sizeof($child[$name]) : 0;           $child[$name][$size] = $this->_struct_to_array($values, $i);
          break;
        case ‘close’:
          return $child;
          break;
      }
    }
    return $child;
  }

  function createArray($targetEncoding=”,$sourceEncoding=”,$caseFolding=0,$skipWhite=1,$skipTagStart=0)
  {
    $xml = $this->xml;
    $values = array();
    $index = array();
    $created= array();
    $parser = xml_parser_create($sourceEncoding);
    if($targetEncoding && $sourceEncoding!=$targetEncoding) xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $targetEncoding);
    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, $caseFolding);
    xml_parser_set_option($parser, XML_OPTION_SKIP_TAGSTART, $skipTagStart);
    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, $skipWhite);
    xml_parse_into_struct($parser, $xml, $values, $index);
    xml_parser_free($parser);
    return $values;
  }
}