携帯版NHKニュースのヘッドラインおよび記事本文を取得し、新着記事をメールで送信するPHPスクリプト。

テレビは点けないし、新聞は取っていない、Webニュースの巡回すら億劫だという(筆者のような)人間でも、これを携帯に送るようにしておけば、移動時間や休憩時間を使ってニュースチェックできますよっと。

【注意】 以下のコードでは、不具合によりバックスラッシュが表示されていないので注意。(紺色太文字で表示されている“n”の前に入る。)(スタイルはちゃんと適用されるのに、なんで表示されないかなぁ・・・)

【使用方法】 1.自身で利用可能なサーバマシンにこのスクリプトを設置し、2.キャッシュファイルを作成、3.cronで定期的に実行するように設定。

PHP
<?php
	//変数初期化
	$root_url = "http://www3.nhk.or.jp/knews/";
	$mailto = "<MAIL ADDRESS>";
	$output = "";
	//エンコード設定
	mb_language("Japanese");
	mb_internal_encoding("EUC-JP");
	mb_detect_order("ASCII,UTF-8,EUC-JP,JIS,SJIS");
	//キャッシュファイル指定(※パーミッション注意)
	$f_name = "cache_list.txt";
	//ファイルの内容を1行ごとに配列に格納
	$cache = file($f_name);
	$cache = array_map("trim", $cache); 

	//ニュース一覧を取得
	$data = file_get_contents("$root_url");
	$data = mb_convert_encoding($data, "EUC-JP", "auto");
	$pattern = '/(t[0-9]+.html)/is';
	preg_match_all($pattern, $data, $matches);

	//個々の記事を取得
	foreach( $matches[1] as $match ){
		//キャッシュに無ければ、記事を取得
		if(!in_array($match, $cache)){
			$url = $root_url . $match;
			$data = file_get_contents($url);
			$data = mb_convert_encoding($data, "EUC-JP", "auto");

			$pattern = '/<body>(.*?)<div/is';
			preg_match($pattern, $data, $matches);

			$body = $matches[1];
			$body = "◇". $body;
			$body = preg_replace('/<br><br>/', "n◇", $body);
			$output .= $body;
			$output .= "nn";
		}
		$new_cache[] = $match;
	}
	$new_cache = implode("n", $new_cache);

	//キャッシュファイル更新
	$fp = fopen($f_name, "w+");
	fwrite($fp, $new_cache);
	fclose($fp);

	//メール送信
	if($output!=""){
		$sbject = "NHK News";
		mb_send_mail($mailto, $sbject, $output, $headers);

		echo("Mail Sended.n");
	}else{
		echo("Null.n");
	}
?>