RSSから情報を取得してラズベリーパイに自動ツイートさせた話


TwitterAPI取得して誰得情報を呟くBOTを作った話

前提条件

Raspberry Pi 3 Model B+を使用。2でも4でもZeroでもできると思います。
TwitterAPI Keyの発行は以下記事かなんかを参考にして済ませておいてください。
https://qiita.com/kazupen2018/items/ff9828cc853ab9c3357e

必要ライブラリのインストール

お約束コマンドを実行

sudo apt-get update
sudo apt-get upgrade

Twythonのインストール

sudo pip install twython

サンプルファイルの作成

nano tweet.py
tweet.py
# coding: utf-8
from twython import Twython, TwythonError

# API Keyなどの必要情報を入力。
APP_KEY = "Consumer Key (API Key)"
APP_SECRET = "Consumer Secret (API Secret)"
OAUTH_TOKEN = "Access Token"
OAUTH_TOKEN_SECRET = "Access Token Secret"

# 変更するのは上の4つのみで大丈夫です
twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)

try:
    twitter.update_status(status='Qiita uses @ kazupen2018 posted article script.')
except TwythonError as e:
    print e

API Key・APISecret・Access Token・Access Token Secret
この記事を参考にして取得し、上記プログラムに入力してください。

テストツイートの実行

python tweet.py

Twitterを確認してみてください。無事にツイートされていましたか?
されていない場合はライブラリやAPIを再確認してください。

RSSを取得しツイート

feedparserをインストール

sudo pip install feedparser

RSSを取得

例として、Yahoo!天気から今日の東京の予報を取得します。
https://weather.yahoo.co.jp/weather/rss/

取得したいところをクリックします。例として東京都都庁所在地。

すると、このように表示されます(ブラウザによって表示が異なります)
そのページのURL欄のURLをコピーします。
ここでは
https://rss-weather.yahoo.co.jp/rss/days/4410.xml
でした。

RSSを取得してツイート

nano rss.py
rss.py
# coding: utf-8
from twython import Twython, TwythonError

import feedparser

APP_KEY = "Consumer Key (API Key)"
APP_SECRET = "Consumer Secret (API Secret)"
OAUTH_TOKEN = "Access Token"
OAUTH_TOKEN_SECRET = "Access Token Secret"

# 先ほど取得したRSSのURLを下に貼り付けます
RSS_URL = "RSS_URL(ここをRSSのURLと置き換えてください)"
news_dic = feedparser.parse(RSS_URL)
latest_entry = news_dic['entries'][0]
message = latest_entry.title + latest_entry.link

twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)

try:
    twitter.update_status(status=message)
except TwythonError as e:
    print e

APIキー、RSS URLは各自で置き換えてください。

python rss.py

はい。ツイートされていました。

注意事項

Twitterの使用により重複したツイートはできません。たとえば「rss.py」を連続実行するとこのようなエラーがでます。

Twitter API returned a 403 (Forbidden), Status is a duplicate.

同じ内容を繰り返し投稿することができないことに留意して、cronなどに登録して遊んでみてください。