LoginSignup
5
3

More than 5 years have passed since last update.

ターミナルで電子掲示板風にYahooニュースを表示させる

Posted at

ターミナルで電子掲示板風にYahooニュースを表示させる

きっかけ

BTTでTouch Barにyahooニュースを表示する。
こちらの記事を読んで、電光掲示板風に流れるニュースが見たくなったのがきっかけです。

完成したもの

qiita.gif

ソースコード

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上に表示させたかったのですが
上手くいきそうもなかったので、ターミナルでの出力に切り替えました。

実用性皆無!

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3