コードを改めて。
どれも20行足らずの簡単なものだ。
Pythonコード:BBCのRSSを取得
bbcrssget.pyとした。
import feedparser import pprint url = "http://feeds.bbci.co.uk/news/world/rss.xml" f = feedparser.parse(url) for article in f['entries']: print(article['title']) print(article['summary']) print('\n')
このまま使うことにした。
python bbcrssget.py > ./bbcnews.txt
こんなかんじで、RSSからテキストを出力できる。
Pythonコード:テキストをキャラクタ液晶に表示
以前Raspberry Pi Picoに似たようなプログラムを書いていたので、それをちょいちょいして作る。
MicropythonからPythonの移植はとても楽だ。bbcrssshow.pyとする。
import RPi.GPIO as GPIO import time from RPLCD import CharLCD lcd = CharLCD(pin_rs = 17, pin_rw = None, pin_e = 18, pins_data = [25,24,23,22], numbering_mode = GPIO.BCM, cols=8, rows=2, dotsize=8) with open('bbcnewsrss_today.txt','r') as file1: for line in file1: data_lines = file1.read() for word in data_lines.split(" "): lcd.write_string(word[:16]) time.sleep(1.0) lcd.clear()
これが基本である。
RSSからfeedparserで切り出したテキスト(bbcnewsrss_today.txt)を読み込んで、単語にスプリットして格納し、1秒ごとに16文字ずつキャラクタ液晶に送り込んでいる。
上記ソースだと、1ワードずつ液晶にパカパカと表示されるはずだ。
これだと昔のルパンのサブタイトルを想起させる。
しかし間違ってもここで、Zeroにブザーを繋ぎ、ニュース1件ごとに「あのタイプライター音とBGM」を演奏させる方向にしてはいけない。それでは、イロモノガジェットに転落である。
あとはキャラクタ液晶の文字数に合わせて、複数ワードを上手に表示するよう工夫するだけである。うちの場合は、if分岐とlenで文字数カウントでごにょごにょして、16x1文字に収まるよう調整した。
#その辺は、長ったらしいだけなので書かない。
なおキャラクタ液晶は、スクロール表示させると視認性が地獄なので、やめといたほうがいいぞ(経験者)
そろそろ、"Putting all together"だ。
シェルスクリプトbbcrssnewsを作る。
#!/bin/sh
python bbcrssget.py > ./bbcnewsrss_today.txt
echo bbcnewsrss_today created.
python bbcrssshow.py
と記載し、./bbcrssnewsを実行してやれば、
RSSから取得された最新のニュースがキャラクタ液晶に表示されるはずだ。*1
これで、おいらもいよいよ情報通だね?(せやろか)
(あとちょっとつづく)
*1:中身のある一文を表示させるなら、20文字 x 4行とか文字数多い液晶が魅力的だ。なお、検討中ちょい試してみたのだが、画面がでかくうっとうしいので善し悪しだった。小窓に表示されるほうが邪魔くさくなくていいと感じた。