ニュース速報を電光掲示板でまとめて表示 ラズパイで電光掲示板 part5

シェアする

Pocket

■電光掲示板へニュース表示の手順

60爺は、前回の記事で、天気予報を電光掲示板に流すことに成功しました。

次は、NHKニュース速報を、電光掲示板に表示します。

手順は左記の通りです。

1.NHKニュース速報をテキスト出力

NHKニュースに関しては、師匠50オヤジが、毎日、家でしゃべらせてると言うことを聞いていましたので、そのプログラムをもらいました。

もらったプログラムに手を入れて、ニュース速報を一塊にまとめたテキストを吐き出すようにしました。

それが、こちらです。

<?php
header('Content-Type: text/html; charset=UTF-8');
$url = 'http://www3.nhk.or.jp/rss/news/cat0.xml';

$xml = @file_get_contents($url);
$json = simplexml_load_string($xml);
$txt = '';

if($json == '') {
 $txt = '残念ですがニュースが取得出来ませんでした。';
 exec('/home/pi/python_pg/open_jtalk/jtalk.sh '.$txt);
// exec('/usr/local/bin/jsay '.$txt);
}else{
 if(isset($json->channel->lastBuildDate)){
 $tmp = $json->channel->lastBuildDate;
 $date = explode(' ',$tmp);
 $time = explode(':',$date[4]);
 $time_str = $date[3].'年'.month_name_conv($date[2]).$date[1].'日'.date_name_conv($date[0]).'、'.$time[0].'時'.$time[1].'分時点の、';

$txt .= $time_str;
 }

if(isset($json->channel->description)){
 $txt .= $json->channel->description.'をお伝えします。';
 }

$i = 0;
 while (isset($json->channel->item[$i])) {
 if($i == 0) {
 $txt .= 'はじめに、';
 }else{
 $txt .= '次は、';
 }

if(isset($json->channel->item[$i]->title)) {
 $txt .= $json->channel->item[$i]->title.'についてのニュ ースです。';
 }

if(isset($json->channel->item[$i]->description)) {
 $txt .= $json->channel->item[$i]->description;
 }
 $i++;
 }
}

$txt .= '以上、'.$time_str.$json->channel->description.'をお伝えいたしました。';

echo $txt;

function date_name_conv($date_name) {

switch (trim($date_name)) {
 case 'Mon,':
 $date_name = '月曜日';
 break;
 case 'Tue,':
 $date_name = '火曜日';
 break;
 case 'Wed.':
 $date_name = '水曜日';
 break;
 case 'Thu,':
 $date_name = '木曜日';
 break;
 case 'Fri,':
 $date_name = '金曜日';
 break;
 case 'Sat,':
 $date_name = '土曜日';
 break;
 case 'Sun,':
 $date_name = '日曜日';
 break;
 default:
 $date_name = '';
 break;
 }

return $date_name;
}

function month_name_conv($month_name) {

switch ($month_name) {
 case 'Jan':
 $month_name = '1月';
 break;
 case 'Feb':
 $month_name = '2月';
 break;
 case 'Mar':
 $month_name = '3月';
 break;
 case 'Apr':
 $month_name = '4月';
 break;
 case 'May':
 $month_name = '5月';
 break;
 case 'Jun':
 $month_name = '6月';
 break;
 case 'Jul':
 $month_name = '7月';
 break;
 case 'Aug':
 $month_name = '8月';
 break;
 case 'Sep':
 $month_name = '9月';
 break;
 case 'Oct':
 $month_name = '10月';
 break;
 case 'Nov':
 $month_name = '11月';
 break;
 case 'Dec':
 $month_name = '12月';
 break;
 default:
 $month_name = '';
 break;
 }

return $month_name;
}

?>

2.お約束のエラーの対処

出来上がったテキストをコンバートして、jpgファイルを作成すれば一丁上がりだった・・・んですけど。

pi@raspberrypi:~ $ convert -background white -fill blue -font /usr/share/fonts/truetype/fonts-japanese-gothic.ttf -pointsize 16 label:@/home/pi/2news.txt news.jpg

下記のエラーが出てうまくいかない。

convert: no encode delegate for this image format `LABEL’ @ error/constitute.c/WriteImage/1167.

テキストファイルが長すぎてダメなのかなんて考えて、短くしても同様のエラーが出ます。・・・ちゃんと、エラーメッセージの内容を読みましょう!

3.原因究明

このエラーメッセージは、イメージ形式にエンコードできないと言ってますので、テキストファイルが適当でないと思われます。

たしか、お天気のイメージを作る際、UTF-8で無いとダメと書いてあったような。

そこで、ググルとこんな記事がありました。

PHPでの文字化けを今のところ100%回避している対処法

この中に、「header関数で文字コードを指定する」というのがあって、次の行を<?PHPの直下に入れれば良いようです。

header('Content-Type: text/html; charset=UTF-8'); 

4.ニュース速報を電光掲示板で流す

(1) テキストファイル作成⇒コンバート

それでは、上記の対処を施して早速やり直してみましょう。上記の行をプログラムにコピーして更新し、再実行してテキストファイルを作成します。

pi@raspberrypi:~ $ php test_nhk_news.php > 2news.txt
pi@raspberrypi:~ $ cat 2news.txt
2017年9月05日火曜日、21時02分時点の、日本放送協会 NHKニュースをお伝えします。はじめに、JAL機緊急着陸 エンジン内部の不具合かについてのニュースです。5日午前 、羽田発ニューヨーク行きの日本航空機が羽田空港に緊急着陸したトラブルで、会社側が・・・・・

そして、このテキストファイルをコンバートします。

pi@raspberrypi:~ $ convert -background white -fill blue -font /usr/share/fonts/truetype/fonts-japanese-gothic.ttf -pointsize 16 label:@/home/pi/2news.txt 2news.jpg
pi@raspberrypi:~ $

おー、先程のエラーは出ませんね。無事に、jpgファイルを作成できました。

(2) ニュース速報を電光掲示板へ表示

このjpgファイルを電光掲示板に流してみると、やったー、できました。

以下の動画のように、見事にニュース速報が電光掲示板に流れます。

pi@raspberrypi:~ $ sudo python3 /home/pi/rpi-rgb-led-matrix/python/samples/image-scroller.py --led-no-hardware-pulse yes -c 2 -r 16 -b 50 -i /home/pi/2news.jpg
Press CTRL-C to stop sample

以下の記事もご覧になってください。

天気予報を電光掲示板に流してみた(part4)はこちら。

Pythonでコマンドを呼び出す(part6)はこちら。

スポンサーリンク

シェアする

フォローする