最近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 URLOutputs
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;
}
}