☆Yuus Memo☆
非エンジニアの方でも業務を効率化できるプログラムを紹介します!
PHP

【PHP】2チャンネルをスクレイピングする

皆さんこんにちは!!
以前、下記の記事で書いた「スクレイピング」について、実装を知りたいとコメントやお問い合わせをいただきましたので、簡単に補足したいと思います。

【PHPスクレイピング】WEBサイトの情報を取得してみよう『Goutte』 皆さんこんにちは!!今回は、以前書いた記事の手法解説記事になります。 以前書いた記事とは、下記の【WordPress】Kataw...

WordPressへの自動投稿より、2ちゃんねるのスクレイピング方法を知りたいという、お問い合わせが多かったので、簡単に記事を取得するコードを解説したいと思います。

掲示板のデータを取得する

<?php
$url = "http://hayabusa3.2ch.net/test/read.cgi/mnewsplus/{スレ番号}/";
$raw_contents = file_get_contents($url);
$raw_contents = mb_convert_encoding($raw_contents, "UTF-8", "SJIS");

// タイトル取得
preg_match('/<title>.+?<\/title>/', $raw_contents , $match_title);
$title = removeStr($match_title[0], array("<title>", "</title>"));
echo($title. "\n");

// コメント取得
mb_ereg('<dl class=\"thread\">(\n|.)*?<\/dl>', $raw_contents, $match_dl);
preg_match_all('/<dt>(\n|.)*?<br><br>/', $match_dl[0] , $match_dt);
foreach($match_dt[0] as $dt){
    // コメントNo
    preg_match('/<dt>\d+/', $dt , $match_comment_no);
    $comment_no = removeStr($match_comment_no[0], array("<dt>"));
    echo($comment_no. "\n");

    // ハンドルネーム
    preg_match('/<b>.*?<\/b><\//', $dt , $match_name);
    $name = removeStr($match_name[0], array("<b>", "</b></"));
    echo($name. "\n");

    // 投稿時間
    preg_match('/\d{4}\/\d{2}\/\d{2}\(.*?\)\s\d{2}:\d{2}:\d{2}/', $dt , $match_time);
    $time = $match_time[0];
    echo($time. "\n");

    // ID
    preg_match('/ID:.*<dd>/', $dt , $match_id);
    if(isset($match_id[0])){
        $id = removeStr($match_id[0], array("ID:", "<dd>"));
    } else {
        $id = "";
    }
    echo($id. "\n");

    // コメント
    preg_match('/<dd>.*\s<br><br>$/', $dt , $match_contents);
    $comment = removeStr($match_contents[0], array("<dd> ", " <br><br>"));
    $comment = str_replace("<br>", "<br/>", $comment);
    echo($comment. "\n");
}
exit();

function removeStr($data, $remove_array){
    foreach($remove_array as $remove_data){
        $data = str_replace($remove_data, "", $data);
    }
    trim(mb_convert_kana($data, "s"));
    return $data;
}
?>

基本的には上記のコードで指定した板のデータを取得できます。
ただ、スクレイピングするだけなら、上記のコードで簡単にできますが、「自動まとめサイト」の様なものを作成しようとすると、次の事を考える必要があります。

・Wordpress(ブログ)への自動投稿
・既に投稿した記事と重複しない様にする
・取得するスレッドを動的に変更する

など、少し考えるだけでも複数出てきます。
私は勉強の為に、「自動まとめサイト」を作成したので、結構いい加減な感じになっていますので、全てのコードを公開するのは恥ずかしいので、皆さんも是非、ご自身で作ってみてください。

私はWordpressで「自動まとめサイト」を作ったので、Wordpressへの自動投稿等、作ってみたおかげで便利な知識が身につきました。

実際に調べて手を動かすことが一番勉強になると思うので、頑張ってください!!

コメントを残す