IoTデバイスを使って「自分だけのニュース端末」を作る——そんなことがRaspberry Pi Pico Wなら簡単にできます。
今回は、MicroPythonを使ってWi-Fi経由でNHKの最新ニュースを取得し、コンソールに表示するプログラムを実装してみました。
RSSフィードは、ニュースサイトが提供している「更新情報を機械的に取得するためのXMLデータ」です。
NHKの場合、以下のようなURLが公開されています。
この中から、今回は総合ニュース(cat0.xml
)を取得してみます。
プログラムの概要
以下のコードをMicroPythonで実行すると、Wi-Fiに接続してNHKの最新ニュース5件を取得し、タイトルを表示します。
import network
import time
import urequests as requests
from secrets import secrets
from machine import Pin
# ======= 設定 =======
NEWS_URL = "https://www3.nhk.or.jp/rss/news/cat0.xml" # NHKニュースRSS(総合)
MAX_RETRIES = 3
led = Pin('LED', Pin.OUT)
# ======= Wi-Fi接続 =======
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(secrets['ssid'], secrets['password'])
print("Wi-Fi接続中...")
for _ in range(20):
if wlan.isconnected():
print("✅ Wi-Fi接続完了:", wlan.ifconfig())
led.value(1)
time.sleep(1)
led.value(0)
return True
time.sleep(1)
print("❌ Wi-Fi接続失敗")
return False
# ======= ニュースを取得 =======
def fetch_news():
for attempt in range(1, MAX_RETRIES + 1):
try:
print(f"[{attempt}] ニュース取得中...")
res = requests.get(NEWS_URL)
xml_data = res.text
res.close()
return xml_data
except Exception as e:
print(f"ニュース取得エラー: {e}")
time.sleep(3)
raise RuntimeError("ニュース取得に複数回失敗しました。")
# ======= タイトル抽出(正規表現を使わずに) =======
def parse_news_titles(xml_data, limit=5):
titles = []
start = 0
while True:
start_tag = xml_data.find("<title>", start)
end_tag = xml_data.find("</title>", start_tag)
if start_tag == -1 or end_tag == -1:
break
title = xml_data[start_tag + 7:end_tag].strip()
titles.append(title)
start = end_tag + 8
# 最初のタイトル(RSS全体のタイトル)を除外して上位5件を返す
return titles[1:limit+1]
# ======= メイン処理 =======
def show_news():
if not connect_wifi():
return
try:
xml_data = fetch_news()
titles = parse_news_titles(xml_data)
print("\n📰【NHK最新ニュース】")
for i, title in enumerate(titles, 1):
print(f"{i}. {title}")
print("\n✅ ニュース取得完了")
except Exception as e:
print("❌ ニュース取得エラー:", e)
finally:
wlan = network.WLAN(network.STA_IF)
wlan.active(False)
print("Wi-Fi切断")
# ======= 実行 =======
show_news()
コードのポイント解説
Wi-Fi接続
Pico WのWi-Fi機能を使ってインターネットに接続します。
接続が成功すると、LEDが一瞬点灯します。
wlan = network.WLAN(network.STA_IF)
wlan.connect(secrets['ssid'], secrets['password'])
このようにsecrets.py
にWi-Fi情報を分離しておくことで、ソースコード内にパスワードを直接書かずに済み、安全です。
ニュースRSSの取得
NHKのRSSフィードをHTTPリクエストで取得しています。
MicroPythonの軽量HTTPクライアントurequests
を使用しています。
res = requests.get(NEWS_URL)
xml_data = res.text
実行結果
実際の出力例は以下の通りです。
Wi-Fi接続中...
✅ Wi-Fi接続完了: ('192.168.1.3', '255.255.255.0', '192.168.1.1', '192.168.1.1')
[1] ニュース取得中...
📰【NHK最新ニュース】
1. 政府、経済対策を発表へ
2. 台風20号が接近中
3. 株価は反発、円安続く
4. 新型AIが注目集める
5. 大リーグ 大谷が快挙
✅ ニュース取得完了
Wi-Fi切断
応用アイデア
このプログラムをベースにすれば、以下のような拡張も簡単です。
- 定期的にニュースを取得してメール送信
- 液晶ディスプレイ(I2C接続)にニュースを表示
- 天気予報APIと組み合わせて「今日のニュース+天気」を配信
IoTデバイスを使って「自分専用のニュースサーバー」を構築する第一歩になります。
コメント