はじめに
前の記事では結局php-fpmのチューニングが何とかうまくいったところまで書きました。
そこで、この記事では勢いに乗って、SNAP(NextScripts: Social Networks Auto-Poster)プラグインを使ってTwitterにWordpressの記事の新着情報を流すために必要な作業について書きたい… と最初は思ったのですが、
- この記事を最初に書いた時点ではTwitterにWordpressの記事の新着情報を流すこと自体に成功しているわけではないこと。
- また、SNAPプラグイン自体も機能が豊富そうなので、機会があれば別の記事として使い方を記述できるかもしれないこと。
- 一方で、GitHub Pages上に構築した「panda大学習帳外伝」はこの記事を最初に書いた時点では更新情報を流すことができていなかったこと。
から、「YouTube Data API v3を使って取得したYouTubeのチャンネル情報からGitHub Pages用のマークダウン形式のファイルを作ってから、その新着情報をTwitter APIを使ってTwitterに投稿する」機能を持つPython3のプログラムを作ってみることにしました。
この記事では上記のプログラムのうち、Twitter関連の部分を中心に書いていきます。
開発環境の準備。
Twitter APIを利用するためにはアクセス用のキーの取得と、Python3のライブラリのインストールが必要です。
開発者アカウントの作成からのTwitter APIへのアクセス用のキー等の取得。
Twitter APIへのアクセス用のキー等は https://apps.twitter.com/ にアクセスすると比較的簡単に取得できると思っていたのですが、実際にアクセスしてみると…
なんか書いてあります。2018年7月からTwitter APIを利用条件が厳格化されたようで、利用にはTwitterの開発者アカウントが必要になったようです。そこで、「Apply for a developer account」(上図の赤矢印)を押して開発者アカウントを作成することにします。
なお、上図はAPIのキーの取得後にスクリーンショットを取得していますので、”pandanote publisher”というアプリケーションがすでに表示されていますが、ここではいったん見なかったことにしていただく方向でお願いいたします。
あとは、開発者アカウントの使用目的とかいろいろ聞かれます。英語で適当に入力していくと開発者アカウントが作成されるのですが、スクリーンショットをとるのを忘れました…(´・ω・`)
開発者アカウントが取得できると、アプリケーションごとにAPIキー等を作成することができるようになり、以下の4種類のAPIキー等が取得できます。
- Consumer API key
- Consumer API secret key
- Access token
- Access token secret
これらをメモ帳などのエディタにコピーしておきます。なお、上記のキー等には他人に公開してはならないものも含まれていますので、用が済んだら削除した方が無難です。
twitterライブラリのインストール
次にtwitterライブラリを以下の手順でインストールします。なお、twitterライブラリの開発はここで行われているようです。
- pipのバージョンが古いとインストールができないことがありますので、root以外の権限で以下のコマンドを実行し、pipを最新版にしておきます。
$ pip3 install pip
- root権限で以下のコマンドを実行し、twitterライブラリをインストールします。
# pip3 install twitter
スポンサーリンク
これでインストールは完了です。
Twitter APIを使うアプリケーションを作ってみる。
さくさくコーディング。
参考文献のサイトにあるサンプルコードをもとにして、以下のコードを書いてみます。
#!/usr/bin/env python3 | |
import os | |
from twitter import * | |
import json | |
consumer_key_file = "consumer_key_file.json" | |
CONSUMER_KEY = "" | |
CONSUMER_SECRET="" | |
with open(consumer_key_file) as infile: | |
text = infile.read() | |
keypair = json.loads(text) | |
#consumer key, consumer secret key from https://apps.twitter.com/ | |
CONSUMER_KEY = keypair["consumer_key"] | |
CONSUMER_SECRET= keypair["consumer_key_secret"] | |
MY_TWITTER_CREDS = "pandanote_publisher_credentials.txt" | |
if not os.path.exists(MY_TWITTER_CREDS): | |
oauth_dance("Pandanote publisher", CONSUMER_KEY, CONSUMER_SECRET, MY_TWITTER_CREDS) | |
oauth_token, oauth_secret = read_token_file(MY_TWITTER_CREDS) | |
twitter = Twitter(auth=OAuth(oauth_token, oauth_secret, CONSUMER_KEY, CONSUMER_SECRET)) |
Consumer API Key及びConsumer API secret keyはファイルから読み出すように変更しています。
試しに実行。
コードが書き終わったら、以下のように実行してみます。
すると…
と表示されて、PINの入力を求められますので、ブラウザが実行可能な別のPCでブラウザを起動し、指定されたURLにアクセスしてPINを取得して入力します。すると…
上図のような画面が表示されますので、「連携アプリを認証」ボタンをクリックするとPINが記載された画面が現れますので、”Please enter the PIN:”のプロンプトに対して、記載されたPINを入力し、Enterキーを押します。すると…
と表示されて、pandanote_publisher_credentials.txtにoauth_token及びoauth_secretが保存されます。
タイムラインを取得する。
次に、前節のコード例に1行追加して、タイムラインを取得してみます。コード例は以下の通りになります。
#!/usr/bin/env python3 | |
import os | |
from twitter import * | |
import json | |
consumer_key_file = "consumer_key_file.json" | |
CONSUMER_KEY = "" | |
CONSUMER_SECRET="" | |
with open(consumer_key_file) as infile: | |
text = infile.read() | |
keypair = json.loads(text) | |
#consumer key, consumer secret key from https://apps.twitter.com/ | |
CONSUMER_KEY = keypair["consumer_key"] | |
CONSUMER_SECRET= keypair["consumer_key_secret"] | |
MY_TWITTER_CREDS = "pandanote_publisher_credentials.txt" | |
if not os.path.exists(MY_TWITTER_CREDS): | |
oauth_dance("Pandanote publisher", CONSUMER_KEY, CONSUMER_SECRET, MY_TWITTER_CREDS) | |
oauth_token, oauth_secret = read_token_file(MY_TWITTER_CREDS) | |
twitter = Twitter(auth=OAuth(oauth_token, oauth_secret, CONSUMER_KEY, CONSUMER_SECRET)) | |
print(twitter.statuses.home_timeline()) |
これを実行してみると、以下のように出力されます。
JSONフォーマットのタイムラインのデータが取得できているようです。なお、この記事では取得したデータのフォーマットや使用方法には触れないことにします。
投稿のテスト。
さらに、前節で追加したコードを以下のようにちょいと変えて更新情報を投稿してみます。
#!/usr/bin/env python3 | |
import os | |
from twitter import * | |
import json | |
consumer_key_file = "consumer_key_file.json" | |
CONSUMER_KEY = "" | |
CONSUMER_SECRET="" | |
with open(consumer_key_file) as infile: | |
text = infile.read() | |
keypair = json.loads(text) | |
#consumer key, consumer secret key from https://apps.twitter.com/ | |
CONSUMER_KEY = keypair["consumer_key"] | |
CONSUMER_SECRET= keypair["consumer_key_secret"] | |
MY_TWITTER_CREDS = "pandanote_publisher_credentials.txt" | |
if not os.path.exists(MY_TWITTER_CREDS): | |
oauth_dance("Pandanote publisher", CONSUMER_KEY, CONSUMER_SECRET, MY_TWITTER_CREDS) | |
oauth_token, oauth_secret = read_token_file(MY_TWITTER_CREDS) | |
twitter = Twitter(auth=OAuth(oauth_token, oauth_secret, CONSUMER_KEY, CONSUMER_SECRET)) | |
twitter.statuses.update(status="panda大学習帳外伝の更新情報も流してみることにしました。https://sidestory.pandanote.info/") |
これを実行してみると…
何も出力されることなく終了しますが、Twitterのタイムラインを見ると…
モザイクだらけですみませんが、投稿に成功しているようです。(`・ω・´)
既存のプログラムへの組み込み。
最後にこの記事のプログラムの末尾に上記のプログラムを追加します(import文は先頭の方に追加します)が…
動作確認は「panda大学習帳外伝」のコンテンツの更新時に別途やります…(´・ω・`)
まとめ
Twitter APIを使ってGitHub PagesのWebサイトの更新情報をTwitterに投稿できるようになりました。
Twitter APIは徐々に使用条件が厳格化されたり呼び出し回数等の使用制限が厳しくなったりで、大量にデータを収集してデータ解析を行うといったような用途に無料で利用するのはかなり難しくなってきています。
この記事で書いたような単純な自動投稿(それも頻度低め。)という用途であればしばらくの間は使えそうなので、投稿内容を工夫したりしながら少し様子を見たいと思います。
この記事は以上です。