ターミナルで電子掲示板風にYahooニュースを表示させる
きっかけ
BTTでTouch Barにyahooニュースを表示する。
こちらの記事を読んで、電光掲示板風に流れるニュースが見たくなったのがきっかけです。
完成したもの
ソースコード
Yahooニュースの取得には上記の記事をほとんど参考に
作りました。
from bs4 import BeautifulSoup
import requests
import random
import time
import numpy as np
# 表示文字数
text_num = 20
url = requests.get('https://news.yahoo.co.jp/hl?c=bus')
soup = BeautifulSoup(url.content, 'html.parser')
news = soup.find_all("dt")
r = random.randrange(len(news))
# ランダムに新着ニュースを選ぶ
news_text = news[r].get_text().strip()
# 表示させるテキストのnumpy配列作成(空白で表示文字数だけ埋める)
display_text = np.array([" "]*text_num)
print()
# ニュースを一文字ずつ追加していく
for s in news_text:
# 1文字、左にずらす
display_text = np.roll(display_text, -1)
# 一番右の要素に新しい文字を入れる
display_text[text_num-1] = s
# 表示
print("".join(display_text), '\r', end='')
# 一定時間スリープ
time.sleep(0.2)
# 文字の削除
for i in range(text_num):
# 1文字、左にずらす
display_text = np.roll(display_text, -1)
# 一番右に空白を入れる
display_text[text_num-1] = " "
# 表示
print("".join(display_text), '\r', end='')
# 一定時間スリープ
time.sleep(0.2)
ポイント
標準出力(ターミナル上での出力)で上書きする方法を初めてしりました。
print("".join(display_text), '\r', end='')
参考:https://www.haya-programming.com/entry/2018/04/11/181635
実装自体はすごくシンプル(パッと思いつくのがこれしかなかった)で、
ただニュースのタイトルをnumpy配列に格納して、ずらしていくだけです。
本当にやりたかったこと
本当はこれをBTTで用いて、touchbar上に表示させたかったのですが
上手くいきそうもなかったので、ターミナルでの出力に切り替えました。
実用性皆無!