ウェブマスターがウェブのことを書いたら

ウェブマスターとして働いている管理人がウェブで躓いたこと、ググったことを備忘録として書いています。主に技術的なこと、WEBサイト設計のこと

Yahoo!知恵袋Web APIで特定のカテゴリの質問のみを表示させるページのデモサンプル

      2023/09/17

 - API

Yahoo!知恵袋Web APIで特定のカテゴリの質問のみを表示させるページを作成した時のデモサンプルを公開します。キーワードで絞込み検索可です。phpの記述内容をダウンロードできますが、このページは自分用の備忘録として残していますのでご自身でわかる範囲で使ってください。以下サンプルのデモページです。

デモページ内容

Yahoo!知恵袋の『子育て、出産』のカテゴリの在回答受付中の質問の最新100件を取得して表示させています。

表示させている質問の中から、指定したキーワードで絞込みが可能です。
demo1

通常に表示させているときのページのURLは以下です。

https://tuono034s.com/demo/chiebukuro/chiebukuro_demo.php?query=+

phpの後に?query=+をつけることでクエリを渡して表示させています。絞込み時はこの部分にキーワードを付与しています。

デモページのコードすべて

<?php

/**
 * Yahoo! JAPAN Web APIのご利用には、アプリケーションIDの登録が必要です。
 * あなたが登録したアプリケーションIDを $appid に設定してお使いください。
 * アプリケーションIDの登録URLは、こちらです↓
 * http://e.developer.yahoo.co.jp/webservices/register_application
 */
$appid = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // <-- ここにあなたのアプリケーションIDを設定してください。

$type = 'phrase';
$condition = 'open';
$sort = '-posteddate';
$results = '100';
$categoryid = '2078297879'; // YahooカテゴリID
$categoryname = '子育て、出産'; // Yahooカテゴリ名

$CHIE_SEARCH_API_HOST = 'chiebukuro.yahooapis.jp';
$CHIE_SEARCH_API_URL = '/Chiebukuro/V1/questionSearch';
$CHIE_SEARCH_API_APPID = $appid;


function escapestring($str) {
 return htmlspecialchars($str, ENT_QUOTES);
}

mb_internal_encoding ('UTF-8'); // mb_strimwidth のためにエンコーディング設定

print<<<EOM
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="ja" xml:lang="ja" xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <meta http-equiv="Content-Script-Type" content="text/javascript" />
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <meta name="robots" content="noindex" />
 <meta name="viewport" content="width=device-width,user-scalable=no,maximum-scale=1" />
 <link rel="stylesheet" type="text/css" href="common.css" media="all" />
 <link rel="stylesheet" type="text/css" href="style.css" media="all" />
 <link rel="stylesheet" media="all" type="text/css" href="tablet.css" />
 <link rel="stylesheet" media="all" type="text/css" href="smart.css" />
 <title>【デモページ】Yahoo!知恵袋カテゴリ:[$categoryname]</title>
 </head>
<body>
<div class="main_all">
 <div id="header_all">
 <div id="header">
 <h1>Yahoo!知恵袋 回答受付中の質問 <span class="Ycat">Yahoo!知恵袋カテゴリ:[$categoryname]</span></h1>
 </div>
 </div>
 <div class="apidemo_mes"><span>このページはYahoo!知恵袋Web APIを使用したQ&Aサイトのデモページです。</span></div>
 <div class="main_body">
 <p class="topP">Yahoo!知恵袋の<span class="cattit">『{$categoryname}』</span>のカテゴリで現在回答受付中の質問をまとめています。質問をクリックするとYahoo!知恵袋の質問ページに移動しますので、
 回答のできる質問があればクリックして回答してみましょう。</p>
 <div class="mdNvgthActnBx"><div class="srchBx clrfx">

EOM;
 print '<form action="./'. basename($_SERVER['SCRIPT_NAME']) .'">';
 print '<input type="text" class="txtKywrd" size="50" name="query" value="' . escapestring($_GET['query']) . '">';
 print '<p class="btnSrch"><input type="submit" value="検索"></p>';
 print '</form><p class="kensaku">※検索ボックスにキーワードを入力すると質問をさらに絞り込むことができます。</p></div></div>';
print<<<EOM

 <div class="tag_li">
 <span class="bold">Q&Aを人気のキーワードで絞り込む</span>
 <ul>
 <li><a href="chiebukuro_demo.php?query=妊娠" title="『妊娠』で絞り込みます">妊娠</a></li>
 <li><a href="chiebukuro_demo.php?query=出産" title="『出産』で絞り込みます">出産</a></li>
 <li><a href="chiebukuro_demo.php?query=新生児" title="『新生児』で絞り込みます">新生児</a></li>
 <li><a href="chiebukuro_demo.php?query=生後3か月" title="『生後3か月』で絞り込みます">生後3か月</a></li>
 <li><a href="chiebukuro_demo.php?query=ベビーカー" title="『ベビーカー』で絞り込みます">ベビーカー</a></li>
 </ul>
 <div class="btnclr"><a href="/chiebukuro/$categoryid.php?query=+">絞り込み解除/再読み込み</a></div>
 </div>
EOM;


 $responseXML = '';
 {
 $curl = curl_init();
 curl_setopt($curl, CURLOPT_URL, "http://${CHIE_SEARCH_API_HOST}${CHIE_SEARCH_API_URL}?appid=${CHIE_SEARCH_API_APPID}&condition=$condition&sort=$sort&results=$results&categoryid=$categoryid&query=".urlencode($_GET['query']));
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 $responseXML = curl_exec($curl);
 curl_close($curl);
 }
 {
 $xmlObj = simplexml_load_string($responseXML);
 foreach($xmlObj->{'Result'}->{'Question'} as $que) {
 $_c = mb_strimwidth($que->Content, 0, 350, '…');
 $_d = date("Y/m/d H:i", strtotime($que->PostedDate));
 print("<li class='qlist'><a href=\"{$que->{'Url'}}\" title='クリックすると質問ページへ移動します'><span class='qico'>Q</span><p class='content'>{$_c}</p><p class='purl'>{$que->{'Url'}}</p><p class='pdate'>質問日時:{$_d} 回答数:{$que->{'AnsCount'}} カテゴリ:{$que->{'CategoryPath'}}</p></a></li>\n");
 }
 }

print<<<EOM

<hr />
<!-- Begin Yahoo! JAPAN Web Services Attribution Snippet -->
<a href="http://developer.yahoo.co.jp/about">
<img src="http://i.yimg.jp/images/yjdn/yjdn_attbtn2_105_17.gif" width="105" height="17" title="Webサービス by Yahoo! JAPAN" alt="Webサービス by Yahoo! JAPAN" border="0" style="margin:15px 15px 15px 15px"></a>
<!-- End Yahoo! JAPAN Web Services Attribution Snippet -->

 </div>
</div>
</body>
</html>
EOM;

?>

サンプルデモのテキスト

参考ページ

知恵袋サンプルコード:質問検索(php)
Yahoo!知恵袋WebAPIを使用したQ&Aサイトの作成パート1
Yahoo!知恵袋Web APIを使用したQ&Aサイトの作成パート2