目次
サンプル・プログラムの実行例
サンプル・プログラム
searchndl.exe | 実行プログラム本体 |
searchndl.bcp | コンパイル・ファイル |
libeay32.dll ssleay32.dll | 実行時に必要になるDLL |
searchndl/searchndl.phpw | サンプル・プログラム |
searchndl/searchndl.rc | リソース |
searchndl/searchndl.ico | アイコン・ファイル |
searchndl/php.ini | php設定ファイル |
searchndl/PEAR.php | PEAR |
php_curl.dll php_openssl.dll php_mbstring.dll php_winbinder.dll | 実行プログラムにバインドするDLL |
searchndl/include/ | winbinder用ファイル |
searchndl/XML | PEAR XMLパーサ関係 |
解説:ListView
0440: //ListViewの設定
0441: wb_set_text(wb_get_control($window, IDC_RES_LISTVIEW), array(
0442: array('NDC', 50),
0443: array('ISBN', 120),
0444: array('書籍名', 360),
0445: array('作者', 120),
0446: array('出版社', 100),
0447: array('出版日', 120)
0448: ));
ListViewの見出しは、2次元配列で指定する。第1引数は見出しを、第2引数は幅を意味する。第2引数は省略可能である。
解説:httpsサイトからコンテンツを受信
0062: /**
0063: * httpsサイトからコンテンツを受信
0064: * @param string $url "https://" から始まるURL
0065: * @return string取得したコンテンツ/FALSE取得エラー
0066: */
0067: function file_get_contents_ssl($url) {
0068: $ch = curl_init($url);
0069: curl_setopt($ch, CURLOPT_HEADER, FALSE);
0070: curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
0071: curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //サーバ証明書検証をスキップ
0072: curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 〃
0073: $result = curl_exec($ch);
0074: curl_close($ch);
0075:
0076: return $result;
0077: }
解説:結果の表示
0297: /**
0298: * 検索結果一覧
0299: * @param int $windowウィンドウID
0300: * @return stringなし
0301: */
0302: function putItems($window) {
0303: global $Items;
0304:
0305: clear_error($window);
0306: wb_delete_items(wb_get_control($window, IDC_RES_LISTVIEW));
0307: $Items = array();
0308:
0309: $query = wb_get_text(wb_get_control($window, IDC_QUERY_EDIT));
0310: $url = getURL_searchNDL($query);
0311: if ($query != '') {
0312: $i = searchNDL($query);
0313: }
0314: //表示
0315: if ($i > 0) {
0316: wb_create_items(wb_get_control($window, IDC_RES_LISTVIEW), $Items);
0317: } else if ($i == 0) {
0318: put_error($window, ERROR_NOTHIT);
0319: } else {
0320: put_error($window, ERROR_NOTCONNECTED);
0321: }
0322: }
配列変数 $Items を ListView に代入するには、WinBinder関数 wb_create_items を利用する。
解説:Amazon商品ページ表示
0367: /**
0368: * イベントハンドラ:メインウィンドウ
0369: * @param int $windowウィンドウID
0370: * @param int $id イベントID
0371: * @param int $ctrl コントロール
0372: * @param int $param パラメータ
0373: */
0374: function process_main($window, $id, $ctrl=0, $param=0) {
0375: global $Items;
0376:
0377: switch($id) {
0378: //検索
0379: case IDC_EXEC_BUTTON:
0380: putItems($window);
0381: break;
0382: //ダブルクリックでAmazonページを開く
0383: case IDC_RES_LISTVIEW:
0384: if ($param == WBC_DBLCLICK) {
0385: $arr = wb_get_selected(wb_get_control($window, IDC_RES_LISTVIEW));
0386: $i = $arr[0];
0387: $arr = wb_get_text(wb_get_control($window, IDC_RES_LISTVIEW), $i);
0388: $asin = isbn2asin($arr[1]);
0389: $url = ($asin == FALSE) ? '' : 'https://www.amazon.co.jp/gp/product/' . $asin;
0390: if ($asin != '') wb_exec($url);
0391: }
0392: break;
0393: //ヘルプ
0394: case IDC_HELP:
0395: create_help($window, 'process_help');
0396: break;
0397: //プログラム終了
0398: case IDCLOSE:
0399: wb_destroy_window($window); //ウィンドウを破棄
0400: break;
0401: }
0402: }
ここで注意しなければならないのが、ListViewは見出しをクリックすることでソートができるため、この時点で wb_get_selected が返す行番号と元になっている配列変数 $Items の添え字が一致しない可能性があることだ。
そこで、WinBinder関数 wb_get_text を利用し、ListViewの選択されている行の内容を直接取得する。
あとは、「PHPで国立国会図書館を検索」と同様に、ISBNコードをASINコードに変換し、WinBinder関数 wb_exec を利用してブラウザを起動する。
コンパイル
参考サイト
- PHPで国立国会図書館を検索:ぱふぅ家のホームページ
- C++ で国立国会図書館検索:ぱふぅ家のホームページ
- 国立国会図書館サーチ:公式
(2021年1月9日)国立国会図書館サーチAPIをhttpsに変更