もうIT業界には近寄りたくありませんが、渋谷でやってそうな意識高い系の勉強会には参加してみたいなと思っているライラプスです。
せっかく購入したのに使っていなかったラズパイで何かできることはないかなと考え、もう何番煎じかもわかりませんが、今回は当ブログの記事URLを自動でツイートしてくれる仕組みを勉強がてら作ってみました。
Raspberry Piとは?
Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団(英語版)によって開発されている。
日本ではラズパイとも呼ばれる。
Raspberry Pi – Wikipediaより引用
こんなやつです。決してお菓子ではありません。笑
この小さなコンピュータ、元々は欧州で教育用として誕生したらしいです。
それが転じて、低消費電力や広い汎用性などの観点から、ホビーからロボット、IoTなど、幅広く活用されるようになりました。
今回は、そんなRaspberry Pi(以下ラズパイ)を活用して、ブログの記事を自動でツイートしてくれる仕組みを作ってみました。
処理の流れ
今回は、
当ブログの最新記事の中から
ランダムに1件を抽出して
タイトルとURLを毎日0時、6時、12時、18時に自動でツイートする
というとてもシンプルな流れで考えました。
Twitter連携
Twitterに自動ツイートするプログラムを作るにあたり、TwitterAPIを利用します。
TwitterAPIを利用するにあたって、電話番号認証を済ませたTwitterアカウントを用意する必要があります。
TwitterAPIで新しいアプリケーションを作成する場合、まずはTwitter Application Managementにアクセスし、「Create New App」を選択します。
次に、アプリケーション情報を登録します。
今回は、タイトル、アプリの説明、サイトURLだけ設定すれば大丈夫です。
登録が完了したら、「Key and Access Token」をクリックし、自分のAPIキーとアクセストークンを確認しましょう。これは自分のアプリケーションを開発するときに使用します。シークレットキーは漏洩させてはならないので気をつけてください。
TwitterAPIを利用するための手順はこれで完了です。
Twitterクライアントを作成したり、複雑なアプリを作成する場合はより高度な設定が必要となりますが、最低限これだけ覚えておけば大丈夫でした。
記事をツイートするプログラムを作ろう
TwitterAPIを利用できるようにしたところで、次に本題のプログラムを作るところに入ります。
RSSを取得しよう
まずはどうやってURLとタイトルを取得するか考えましたが、RSSを取得し、そこからタイトルとURLを抽出する方法をとりました。
WordPressにおいては、
http://(任意のサイトURL)/feed
でRSSを取得できます。一般のブログなど、他サービスでの方法については各自で検索願います。
取得できる件数については、ダッシュボードの「設定」→「表示設定」→「RSS/Atomフィードで表示する最新の投稿数」から変更します。
タイトルとURLを取得するには
このRSSを取得してから、タイトルとURLだけを取得する仕組みを作ってみましょう。
フィードのURLを自分のブログに設定し、RSSのエントリーを1件ずつ抽出します。そして、1件毎にタイトルとURLをさらに抜き出して表示するように設定します。
なお、今回はfeedparserを利用しました。pipからインストールしましょう。
pip3 install feedparser
ソースコード
# -*- coding: utf-8 -*-
import feedparser
page_url = "http://lailapspocket.com/feed/" #表示したいフィードのURL
rss = feedparser.parse(url)
type(rss)
# 取得件数はWP側より操作
for entry in rss["entries"]:
print("{0}\n{1}\n".format(entry["title"], entry["link"])) #タイトルとURLを抽出して表示
実行結果
以下、実行結果のスクリーンショットとなります。
当ブログにおける当時の最新記事より、タイトルとURLを出力しています。
ツイートできるプログラムを作ろう
続いて、先ほど設定したTwitterAPIからツイートするプログラムをテストします。
TwitterAPIを利用してツイートするために、先ほど取得したAPIキーとアクセストークンをOAuth認証します。
今回はOAuth認証を行うためにrequest_oauthlibというライブラリを利用します。こちらもpipでインストールします。
pip3 install request_oauthlib
ツイートするサンプルはこちら。適当につぶやきたいことを入力して送信すると、Twitter上に反映されます。
# -*- coding: utf-8 -*-
from requests_oauthlib import OAuth1Session
import json
# 各キー設定
CK = "自分のコンシューマー(API)キー"
CS = "自分のコンシューマーシークレット(極秘)"
AT = "自分のアクセストークン"
AS = "自分のアクセストークンシークレット(極秘)"
# 取得したキーとアクセストークンを設定する
twitter = OAuth1Session(CK, CS, AT, AS)
tweet_url = "https://api.twitter.com/1.1/statuses/update.json"
tweet = input('ツイートを入力 >> ')
params = {"status": tweet}
req = twitter.post(url, params=params)
ランダムにツイートさせてみる
ツイートのテストが完了したら、いよいよ実際に使うプログラムを作ってみます。
現状の最新記事の中から、ランダムに1件抽出し、ツイートする内容を設定します。
ソースコード
# -*- coding: utf-8 -*-
from requests_oauthlib import OAuth1Session
import json
import feedparser
import random
# 各キー設定
CK = "自分のコンシューマー(API)キー"
CS = "自分のコンシューマーシークレット(極秘)"
AT = "自分のアクセストークン"
AS = "自分のアクセストークンシークレット(極秘)"
# url設定
page_url = "http://lailapspocket.com/feed/"
tweet_url = "https://api.twitter.com/1.1/statuses/update.json"
# 取得したキーとアクセストークンを設定する
twitter = OAuth1Session(CK, CS, AT, AS)
# RSS取得(取得件数はWordPressの設定から操作)
rss = feedparser.parse(page_url)
type(rss)
# 取得したRSSからランダムに抽出
entry = random.choice(rss["entries"])
tweet = "【自動/ブログ宣伝】\n{0}\n{1}".format(entry["title"], entry["link"])
# ツイート!
params = {"status": tweet}
req = twitter.post(tweet_url, params=params)
実行すると、設定した内容がツイートされます。
ラズパイから自動ツイートするには?
最後に、ラズパイから自動でツイートするための設定を行います。
自動でツイートするために、今回はcronを利用しました。cronとは、決まった時間に決まった処理を実行してほしいときに設定するプログラムの一種だそうです。
今回は、6時間おきに自動でツイートしてくれるように設定します。
cronの設定をするにはまずLinuxのコマンドより、
$ crontab -e
を実行し、編集画面に移動します。
cronのスケジュールの項目は、「分」「時」「日」「月」「曜日」の順に指定します。
以下に一例を示します。例えば、毎日6時間おきに実行したい場合にはこのように記述します。
0 */6 * * * sudo python3 /home/example/hoge/hogehoge.py
cronが実行されない場合は?
もしcronが実行されない場合には、
・そもそもcronが動作しているか
・実行したいファイルの所有者および実行権限がどうなっているか
・エラーログはどうなっているか
を確認しましょう。
cronの設定はcrontab -lで確認できます。
$ crontab -l
実行ファイルの権限は755に設定しましょう。ファイルパスが間違っていないかも確認しておきましょう。
$ chmod 755 hogehoge.py
自動ツイート完了
cronの設定が完了し、設定した時間にツイートしてくれるようになったらシステムの完成です!
参考程度に、自動ツイートしたものを掲載します。
現在僕は、6時間おきに自動ツイートするよう運用しています。
多くの方に見ていただけるよう、なおかつ過剰な告知にもならないよう、そこは適度に調節していきたいと思います。
ここまで書いてようやく気づいたのですが、今回の手法はあらゆるLinux系で応用が効きますね…笑
また、多くのブログやSNS、動画投稿サイトにも応用していくことができます。
ラズベリーパイをお持ちの方も、Linuxを使用している方も、自分の持っているものを告知するのに活用してみてはいかがでしょうか?
まとめ
今回は、自身の勉強、ブログの宣伝、ラズパイの活用方法の模索、この3つの目的を満たした上ですぐに作れるものを考えて作ってみました。
今回のようなシステムのみならず、ありとあらゆる可能性を秘めたラズベリーパイ。もっと様々な活用方法を見出して、無限大に活用してみたいと考えています。
元々は教育用であったこともあり、価格も安く、消費電力も低く、できることも多いこのラズベリーパイ。皆様もぜひ、手にとってみてはいかがでしょうか?
では!