LINKIT HACKS(キョロイリー本)

とりあえず検索結果一覧はsearchN.cgiにこんな感じでやれば取れます.


require_once "HTTP/Request.php"; // PEARのやつ

$obj =& new HTTP_Request("http://***/cgi-bin/searchN.cgi");
$obj->setMethod(HTTP_REQUEST_METHOD_POST);

$obj->addPostData("SW1", "MySQL"); // 検索キーワード,あとは知らん
$obj->addPostData("CO1", 0);
$obj->addPostData("SL1", "全て");
$obj->addPostData("RI1", "ALL");
$obj->addPostData("OP1", "なし");
$obj->addPostData("OB1", "");
$obj->addPostData("AC", 1);
$obj->addPostData("FR", 1);
$obj->addPostData("FQ", 0);
$obj->addPostData("LINE", 20);

if (!PEAR::isError($obj->sendRequest())) {
// 全てのHTMLソース取得
$html = $obj->getResponseBody();
// とりあえずタグ除去
$html = strip_tags($html);
// 件数取得
preg_match("/([0-9]+) 件です/", $html, $matches);
echo "検索結果 " . $matches[1] . "件";

//echo $html;
}

んでこの結果の中からPJB2050076577みたいな書誌番号と呼ばれるもののリストを取得すれば他は洋ナシです.この書誌番号のリストをゲトしたらresultN.cgiに投げます.ここで取るのはISBNと書誌状態くらいでしょうか.書誌状態周辺のタグがかなりクソなため切り分けるのがめんどいので途中で飽きてしまっていますがその辺は補間して下さい.


require_once "HTTP/Request.php"; // PEARのやつ
require_once "CLASS/Product.php"; // 自作クラス

$obj = new HTTP_Request("http://***/cgi-bin/resultN.cgi");
$obj->setMethod(HTTP_REQUEST_METHOD_POST);

$obj->addPostData("AC", 1);
$obj->addPostData("CD", 1);
$obj->addPostData("LINE", 20);
$obj->addPostData("HC", 28);
$obj->addPostData("MS", 1);
$obj->addPostData("PRID1", "PJB2050076577");

if (!PEAR::isError($obj->sendRequest())) {
$html = $obj->getResponseBody();
//$html = strip_tags($html);
$html = mb_convert_encoding($html, "UTF-8", "SJIS");

$kind = array("書名", "著者", "出版社", "形態", "注記",
"刊行年", "件名", "ISBN", "NDC", "書誌番号");

for ($i = 0; $i < 10; $i++) {
preg_match("/\[$kind[$i]\](.+)/", $html, $matches);
//echo "$kind[$i]: $matches[1] <br />";
}

$html = preg_replace("/\n/", "<br />", $html);
preg_match("/\[資料状態\](.+)/", $html, $matches);
preg_match_all("/<tr>(.+?)<\/tr>/", $matches[1], $matches);
$matches[1][1] = preg_replace("/<td.*?>/", "<td>", $matches[1][1]);
preg_match_all("/<td>(.+?)<\/td>/", $matches[1][1], $matches);

foreach ($matches[1] as $info) {
echo "$info <br />";
}
}

だいたいこんな感じです.ググったら普通にURLがキャッシュされてたのでw別にいーやとか思いましたが一応アドレスは***で伏せてあります.問題があれば言って下さい.