ぽよメモ

レガシーシステム考古学専攻

Pythonでツイートする

実は休講通知botは完成しました((超雑なコードで
結局本当にこれまでやって来たことを一つにまとめただけなのですが、一応動いてはいます()

今回はpythonでツイートする方法をまとめておきます。
twitterにツイートするまでにはまず「apps.twitter.com」にアクセスし、ツイートするクライアント(アプリケーション)を作成する必要があります。
これまでならすべてのアカウントで作成できたのですが、最近Twitter社のクソな仕様粋な図らいにより電話番号がひも付けされたアカウントでしかアプリケーションが作成できなくなりました。またツイート時に必要なアクセストークンはアプリケーションの作成画面から見ることができるのは、そのアプリケーションを作成したアカウントの分だけです。
当然電話番号は一つしか持っていません(大体の人はそうだと思います
メインのアカウントにひも付けされています(大体の人はそうだと思います

ど う す ん の

というわけでこういうサイトを発見しました→Twitter BOT作るときOAuthのAccess token取得するのがめんどいから簡単に取得できるwebサービスつくった 先人は偉大です。ありがたく使わせていただきました。

  1. 番号を紐付けしたアカウントでapps.twitter.comにログインしアプリケーションを作成
  2. ログアウト後botで使うアカウントでログイン
  3. 先程のサイトを使ってアクセストークンを取得

これで使うアカウントの「Access Token(以下AT)」「Access token Secret(以下AS)」、そして作成したアプリケーションの「Consumer Key(以下CK)」「Consumer Secret(以下CS)」が揃いました。
ようやくpythonの方に入っていきます。
今回はTwitterAPIを叩くためにOAuth認証というモノを使います。
これにはすでにライブラリが用意されており、

pip install requests
pip install requests-oauthlib

pipでインストールすることができます。

# coding: utf-8
from requests_oauthlib import OAuth1Session

CK = "xxxxxxxxxxxxxxxxxx"
CS = "xxxxxxxxxxxxxxxxxx"
AT = "xxxxxxxxxxxxxxxxxxx"
AS = "xxxxxxxxxxxxxxxxxxx"

# ツイート投稿のURL
url = "https://api.twitter.com/1.1/statuses/update.json"
def tweet(text):
# ツイート内容を以下に記述
params = {"status":  text}
# OAuth認証して投稿
twitter = OAuth1Session(CK, CS, AT, AS)
req = twitter.post(url, params = params)
# 返ってくるコードを確認
if req.status_code == 200:
    print ("ツイート完了")
else:
    print ("ツイートできませんでした: %d" % req.status_code)

if __name__ == '__main__':
    print tweet("はじめまして") #確認

提供されているAPI一覧はこのあたりを参照してください。
APIは一定時間に指定回数以上叩くとアプリケーションごと規制されてしまいます。連投は避けたほうが無難です。
本当は連投時に遅延処理を仕込んだほうが良いんですが、昨日はそれ以外の部分の実装で忙しかったので…(言い訳
そのうちやりますそのうち