IT-TOP.BIZはPHP/CGI/AJAXベースのWEBサイト・システム製作に助力致します。

トップ 新着 ソフトウェア サポート&サービス 更新履歴 2008/11/21
WWWフロンティア〜IT-TOP.BIZ

Yahoo API の使い方

 Yahoo Web APIは、パラメータを指定したURLを実行する事で使えます。
 PHPのサンプルは、レスポンスとしてXMLを受け取ります。

4.Yahoo API / PHPサンプル.2を動かす

サンプル2.ではxmldomとxpathを使います。
サンプル1と同様、サンプル2には「common.php」「YJSearchExample.php」が含まれます。

4.1.「common.php」の内容

「common.php」はYahoo API PHPサンプル1と全く同じものです。

4.2.「YJSearchExample.php」の内容

<?php
// Yahoo! JAPAN Search Services PHP Example Code Ver.1(2005/11/30)
//
/*====ここから==========================*/

require './common.php';
$q=build_query();
// Then send it to the appropriate service
$xml = file_get_contents($service[$_REQUEST['type']].$q);

// Parse the XML and check it for errors
if (!$dom = domxml_open_mem($xml,DOMXML_LOAD_PARSING,$error)) {
  echo "XML parse error\n";
  foreach ($error as $errorline) {
  /* For production use this should obviously be logged to a file instead */
    echo $errorline['errormessage']."<br />\n";
    echo " Node  : " . $errorline['nodename'] . "<br />\n";
    echo " Line  : " . $errorline['line'] . "<br />\n";
    echo " Column : " . $errorline['col'] . "<br />\n";
  }
  done();
}

/*====ここまで==========================サンプル1と同じ*/

// Now traverse the DOM using XPath
// 
function xml_to_result($dom) {
  $ctx = $dom->xpath_new_context();
/* サンプル1では $root = $dom->document_element();
を使っていましたが、ここでは、以下 xpath を使う。*/
  // Populate $res with the root node attributes
  $attr = $ctx->xpath_eval('//@*');
  /*xpath_eval()メソッド*/
  foreach($attr->nodeset as $node) $res[$node->name] = $node->value;
  /*totalResultsAvailable / totalResultsReturned / firstResultPositionを取得する*/
  // Pick out all the Result nodes
  $results = $ctx->xpath_eval("//*[name()='Result']");
  /*Resultノードにアクセスする*/
  foreach($results->nodeset as $i=>$node) {
    $subnode = $node->first_child();
    /* Resultの子ノード「Title」「Summary」「Url」「ClickUrl」
    「ModificationDate」「MimeType」「Cache」にアクセスする*/
    while($subnode) {
      $subnodes = $subnode->child_nodes();
      if(!empty($subnodes)) foreach($subnodes as $k=>$n) {
        if(empty($n->tagname)) $res[$i][$subnode->tagname] = trim($n->get_content());
        else $res[$i][$subnode->tagname][$n->tagname]=trim($n->get_content());
        /*サンプル1と同じ*/
      }
      $subnode = $subnode->next_sibling();
    }
  }
  return $res;
}

$res = xml_to_result($dom); /*上記の実行*/

/* 以下サンプル1と同じ*/
// Ok, now that we have the results in an easy to use format,
// display them.  It's quite ugly because I am using a single
// display loop to display every type.
$first = $res['firstResultPosition'];
$last = $first + $res['totalResultsReturned']-1;
echo "<p>Matched ${res[totalResultsAvailable]}, showing $first to $last</p>\n";
if(!empty($res['ResultSetMapUrl'])) {
  echo "<p>Result Set Map: <a href=\"${res[ResultSetMapUrl]}\">${res[ResultSetMapUrl]}</a></p>\n";
}
for($i=0; $i<$res['totalResultsReturned']; $i++) {
  foreach($res[$i] as $key=>$value) {
    switch($key) {
      case 'Thumbnail':
        echo "<img src=\"${value[Url]}\" height=\"${value[Height]}\" width=\"${value[Width]}\" />\n";
        break;
      case 'Cache':
        echo "Cache: <a href=\"${value[Url]}\">${value[Url]}</a> [${value[Size]}]<br />\n";
        break;
      case 'PublishDate':
      case 'ModificationDate':
        echo "<b>$key:</b> ".strftime('%X %x',$value)."<br />\n";
        break;
      default:
        if(stristr($key,'url')) echo "<a href=\"$value\">$value</a><br />\n";
        else echo "<b>$key:</b> $value<br />";
        break;
    }
  }
  echo "<hr />\n";
}

next_prev($res, $first, $last);
done();
?>
(※)「DOM XML」:PHPのアドインです。
  このサンプルでは「xpathコンテキスト関数」を使ってDOMノードを取得しています。

4.3.サンプル2を動かしてみよう

サンプル1と同様です。ローカルのサーバーの適当なディレクトリに上記の2つのファイルをアップロードし、「YJSearchExample.php」にアクセスします。
YahooAPI PHPサンプル2のようになります。
<前へ 次へ>
目次
1.Yahoo APIでできる事 
2.Yahoo API サンプルを取得する 
3.Yahoo API PHPサンプル1 を動かしてみる 
4.Yahoo API PHPサンプル2 を動かしてみる
5.Yahoo API PHPサンプル3 を動かしてみる 
6.Yahoo API PHPサンプル4 を動かしてみる 
7.Yahoo API PHPサンプル5 を動かしてみる 
サイトマップ お問い合わせ 相互リンク 免責事項
Copyright© 2005 IT-TOP.BIZCopyright© 2005 IT-TOP.BIZ