各ページからタイトルと日付を取得 - PHPプロ!Q&A掲示板
キーワード / キーワードが設定されていません
分け合って、1つ1つのページからタイトルを抽出したいと思い、
自分なりに改造したのですが、エラーが出てしまいます。。。
http://tenvi.nexon.co.jp/support/notice_view.asp?bid=tenvinotice&idx=
こちらのidx=の後に数字が来るわけで、その数字を変数で出し、それを代入しました。
それで、例えば34615の記事を表示したとします。
http://tenvi.nexon.co.jp/support/notice_view.asp?bid=tenvinotice&idx=34615
こうなるわけです。タイトルはフルで表示されるので、1つ1つのページから取得したいと思いました。
また、以前は画像や閲覧数を載せてくれていただいたのですが、 日付とタイトルだけで構いません。
尚、今回試したページは
http://tenvi.nexon.co.jp/support/notice_view.asp?bid=tenvinotice&idx=34615
です。php暦は1週間で変数しか使えません。ただ、関数やif-elseif-elseなどde
どのような形でどのようにしたいかはアバウトですがわかります。
元ソースの少し改造
- // 念の為、言語、エンコードの指定
- //mb_internal_encoding('ja');
- //mb_language('utf-8');
- //mb_regex_encoding('shift-JIS');
- //ログファイルへの階層チェックなしでの記述
- $log_addres = 'Handle/Source/Dat/info.log';
- $Rows_Line = ' | ';
- $log = ''; // 結果を納める変数の初期化
- // データの読込み
- $str = file_get_contents('http://tenvi.nexon.co.jp/support/notice.asp');
- // 目的の table タグのデータのみ抽出
- preg_match('/<table.*?id="info-tbl">(.*?)<\/table>/s', $str, $res);
- // 1行分のデータは </tr> で終わるので、これを目印に1行毎に配列に納める
- $src = explode('</tr>', $res[1]);
- // 配列の各要素に1行分のデータがあるので、各要素ごとに必要データを抜き出す作業をする
- foreach($src as $s){
- // アイコンのアドレスの抜き出し
- // 失敗した時=関係ない行であったとして、読み飛ばす(次の配列要素を処理する)
- if (!preg_match('/<td class="info-icn"><img src="(.+?)"/', $s, $res)) continue;
- $icon = $res[1];
- // ページアドレスとタイトルの抜き出し
- preg_match('/<td class="info-txt"><a href="(.+?)">(.+?)<\/a>/', $s, $res);
- $page = $res[1];
- $title = trim($res[2]); // タグで括られた部分の余分な空白を削除してから代入する
- // 日付の抜き出し
- preg_match('/<td class="info-date">(.+?)<\/td>/', $s, $res);
- $date = trim($res[1]);
- // 閲覧数の抜き出し
- preg_match('/<td class="info-view">(\d+)<\/td>/', $s, $res);
- $view = $res[1];
- // 結果変数に追加する
- if (mb_strlen($title) > 35) {
- // 35 文字以上の場合
- $title = mb_substr($title, 0, 35) . '...';
- }
- //2バイト数値は利用不可と確認。1バイト以内で収める事。
- $log .= '20'.$date.$Rows_Line.'<a href="http://tenvi.nexon.co.jp'.$page.'">'.$title.'</a><!--約('.$view.")人が閲覧--><br>\n";
- }
- //UTF-8 から Euc-Jpに変換する
- mb_convert_variables("EUC-JP", "utf-8", $log);
- // ファイルのオープンと書き出し
- $fp = fopen("$log_addres", 'w');
- $res = fwrite($fp, $log);
- include("$log_addres");
1つ1つのページからタイトルと日付を抽出しようと試みたソース。
- // 念の為、言語、エンコードの指定
- //mb_internal_encoding('ja');
- //mb_language('utf-8');
- //mb_regex_encoding('shift-JIS');
- //ログファイルへの階層チェックなしでの記述
- $Rows_Line = ' | ';
- $log = ''; // 結果を納める変数の初期化
- // データの読込み
- $str = file_get_contents('http://tenvi.nexon.co.jp/support/notice_view.asp?bid=tenvinotice&idx=' . $number . '');
- // 1行分のデータは </tr> で終わるので、これを目印に1行毎に配列に納める
- $src = explode('</div>', $res[1]);
- $table = explode('</tr>', $res[1]);
- // 目的の table タグのデータのみ抽出
- preg_match('/<div id="info-cont">(.*?)<\/div>/s', $str, $res);
- // 配列の各要素に1行分のデータがあるので、各要素ごとに必要データを抜き出す作業をする
- foreach($src as $s){
- // アイコンのアドレスの抜き出し
- // 失敗した時=関係ない行であったとして、読み飛ばす(次の配列要素を処理する)
- //if (!preg_match('/<td class="info-icn"><img src="(.+?)"/', $s, $res)) continue;
- //$icon = $res[1];
- // タイトルの抜き出し
- if (!preg_match('/<h5 class="detail-ttl"><img src="(.+?)">(.+?)/', $s, $res));
- $icon = $res[1]
- $titlea = $res[2];
- // 日付の抜き出し
- preg_match('/<p class="detail-view">(.+?)/', $s, $res);
- $date = trim($res[1]);
- // 閲覧数の抜き出し
- //preg_match('/<p class="detail-view">(\d+)<\/td>/', $s, $res);
- //$view = $res[1];
- // 結果変数に追加する
- if (mb_strlen($title) > 35) {
- // 35 文字以上の場合
- $title = mb_substr($title, 0, 35) . '...';
- }
- //2バイト数値は利用不可と確認。1バイト以内で収める事。
- $log .= $date.$Rows_Line.'<a href="'.$str.'">'.$titlea.'</a><br>\n";
- }
- // 目的の table タグのデータのみ抽出
- preg_match('/<table border="0" cellpadding="0" cellspacing="0" id="info-tbl">(.*?)<\/table>/s', $str, $res);
- // 配列の各要素に1行分のデータがあるので、各要素ごとに必要データを抜き出す作業をする
- foreach($table as $s){
- preg_match('/<td class="info-txt"><a href="/support/notice_view.asp?bid=tenvinotice&idx=(.+?)/', $s, $res);
- $number = trim($res[1]);
- }
- //UTF-8 から Euc-Jpに変換する
- mb_convert_variables("EUC-JP", "utf-8", $log);
- // ファイルのオープンと書き出し
- $fp = fopen("test.log", 'w');
- $res = fwrite($fp, $log);
- include("test.log");
- ?>
上記のソースですと、1つのページから検索をみたいなんですが・・・
この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。





ページのトップへ


GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。