以前、作って運用しつつもブラッシュアップ中のRaspberry Pi 3 Model B+とJulius、Open JTalkベースの自作スマートスピーカーがあります。
主な機能は、
尚、ラズパイ用ACアダプタを挿したスイッチ付きコンセントでのON/OFFとは別にラズパイ用boot/reboot/shutdown物理ボタン付き。
音声認識にJuliusを使った自作スマートスピーカーに伝言とメモの機能を実装するにあたり、マイクとスピーカーを専有してしまうOSSやALSAからPulseAudioに移行しました。
ちなみに便利なのでラズパイだけでなく、PC/Debianにも自作スマートスピーカー機能を搭載しています。
自ずとモニタ付きとなるPC版スマートスピーカーには、PC及びラズパイ双方のスマートスピーカー機能のデスクトップアプリとしてPyQt5/Qt Designerによる操作パネルも作成しました。
今回は、これらに加え、ニュース読み上げ機能を追加してみました。
無料のニュースAPIでめぼしいものってないな...という中、Yahoo! JAPAN デベロッパーネットワークでニュースもとれそうだった為、アプリケーションIDも取得したものの、ニュース取得クエリーがイマイチわからないなと思っていた矢先、Yahoo!ニュース RSSリストを発見。
そうだよAPIにこだわらなくてもRSSって手もあるじゃん...。
っていうか、リンク先にある通り、RSSならニュースソースは、めっちゃ豊富、どれにしようか悩ましいほど。
というわけで、とりあえず、Yahoo!ニュース・トピックス - 主要RSSからタイトルを取得・加工、Open JTalkで読み上げるpythonスクリプトを作成することにしました。
スマートスピーカーで機能させるなら、$HOME部分は、/home/xxxにしておいた方がよいかも。
詳細はリンク先に譲りますが、もちろん、独自辞書に適切なワードを登録後、必要に応じてエンコード変換、スピーカー用自作スクリプトに追記後、Julius&スピーカー用自作スクリプトの再起動などを要します。
メイさんトークだと記事によっては、聞き取りづらいものもありますが、とりあえず。
構成ファイル変更の反映については、systemd/systemctlならsystemd自動起動設定参照。
feedparserは、というか、pip/pip3 installは、一般ユーザーでもできますが、systemdなどで自動起動する際、自前スクリプトなどの実行においてsuしない場合、root起動となるので、その可能性があるなら、sudoなど管理者権限でインストールしておく必要があります。
自身は、当初一般ユーザーでfeedparserを入れており、他方、ある日、.serviceファイルから自前スクリプトをsuして一般ユーザーとして呼び出していたのをsuせずにroot起動に変更しました。
これにより、一般ユーザー環境には入っていたfeedparserが、root環境に入っていない状況となり、結果、自前スマートスピーカーでこのYahoo!ニューススクリプトを解析できず、応答しないという状況に。
端末で実行していれば、エラーが出力され一目瞭然ですが、IoTデバイスとして実装してしまうと原因を見つけにくくなるため、要注意です。
【更新】Yahoo!ニュース「RSS」のURL変更と一部サービス終了のお知らせにより、サンプルで取得していたURLも変更となったので修正。
最初のお知らせは、6月8日だった模様、あ、実際の変更は、8月24日(月)だった模様も今日になってラズパイスピーカーでニュースを聴いてみたら、冒頭で「URLが変更になる」といった旨の(テキストを読み上げた結果)音声が流れてきて気づいた次第。