ニュース速報を電光掲示板でまとめて表示 ラズパイで電光掲示板 part5
60爺は、前回の記事で、天気予報を電光掲示板に流すことに成功しました。
次は、NHKニュース速報を、電光掲示板に表示します。
手順は上記の通りです。
NHKニュース速報をテキスト出力
NHKニュースに関しては、師匠50オヤジが、毎日、家でしゃべらせてると言うことを聞いていましたので、そのプログラムをもらいました。
もらったプログラムに手を入れて、ニュース速報を一塊にまとめたテキストを吐き出すようにしました。
それが、こちらです。
<?php
header('Content-Type: text/html; charset=UTF-8');
$url = 'https://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;
}
?>
お約束のエラーの対処
出来上がったテキストをコンバートして、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.
テキストファイルが長すぎてダメなのかなんて考えて、短くしても同様のエラーが出ます。
きちんと、エラーメッセージの内容を読みましょう!
原因究明
このエラーメッセージは、イメージ形式にエンコードできないと言ってますので、テキストファイルが適当でないと思われます。
たしか、お天気のイメージを作る際、UTF-8で無いとダメと書いてあったような。
そこで、ググルとこんな記事がありました。
PHPでの文字化けを今のところ100%回避している対処法
この中に、「header関数で文字コードを指定する」というのがあって、次の行を<?PHPの直下に入れれば良いようです。
header('Content-Type: text/html; charset=UTF-8');
ニュース速報を電光掲示板で流す
テキストファイル作成⇒コンバート
それでは、上記の対処を施して早速やり直してみましょう。上記の行をプログラムにコピーして更新し、再実行してテキストファイルを作成します。
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ファイルを作成できました。
ニュース速報を電光掲示板へ表示
この 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
ラズパイで電光掲示板の記事は、part11まであります。是非、続けてごらんください。
最後に
ラズパイで電光掲示板の記事もpart5となりました。
天気予報をやった後、さらに実用化を兼ねて、今回はニュースを電光掲示板に流すことにしました。
イントロで示した手順に従い、テキストをjpg化して電光掲示板に流して完成のはずが、お約束のエラーが発生して、何度か行きつ戻りつしました。
削rでも、最後は何とかなりましたよ~!
※気づけば電光掲示板の記事も増えてきました
ディスカッション
コメント一覧
まだ、コメントがありません