Twitter APIでツイートしてみる

Twitter APIでツイートしてみる

ある日私は、Twitterをスクレイピングしたいと考えていました。

しかし!

Twitterでは、事前承諾なしのスクレイピングが明示的に禁止されています

さて、どうしたものか。

Twitter APIに登録してみよう

ここで考えに至ったのが、Twitter APIに登録する方法です。

Twitter APIはその名の通り、Twitterが提供しているAPIです。これを使えば、Twitterの情報をスクレイピングできます。

登録の仕方はQitta等に書いてあると思いますが、だいたい、「(英語を和訳:)どうしてTwitter APIを使いたいと考えたのか、具体的に教えてね」というところで、だいたい落ちます(私も1度落ちました)

とりあえず、私が使った文言を記します。

I mainly use the Twitter APIs for studying, and analyze text of Twitter content.
I intend to analyze Tweets, Twitter users, and their content, using the statistic analyzing tools and the natural language processing tools of Python 3.x.
I display my website (id est https://github.com/278Mt). I contribute the advance of the Twitter APIs, explain how we use the Twitter APIs or how reasonable tools we can construct if we use the Twitter APIs.

和訳すれば、

Twitter APIを研究用に使いたい。Twitterのコンテンツを分析したい。

Python 3の統計分析ツールと自然言語処理ツールを用いて、ツイート、Twitterユーザー、そして彼らのコンテンツを分析したい。

とりあえず、GitHubのページを載せておきます。

Twitter APIの発展に貢献し、Twitter APIの使い方を広く伝えたい。

1回目の(落ちた)時はどうやら、「統計分析ツールと自然言語処理ツールを用いる(using the statistic analyzing tools and the natural language processing tools)」とか「Twitter APIの発展に貢献する(contribute the advance of the Twitter APIs)」といった部分がなくて落とされました。

他の記事を見ても、この部分はどうやら大事らしいです。

これ自体をパクっても別に構いませんが、「こいつ、パクリじゃん」とか思われるかもしれないので、そこら辺りは適宜、自分の言葉に置き換えてゆくことをおすすめします。

登録できた

申請して晴れて合格すると、こんな感じでページが表示されます。

(このTorみたいなスパイ味がある色が好き)

昔は合格するまでに数週間くらいかかっていたらしいが、最近では、翌日になれば合格通知が届きます。

次に、create new appから、アプリを作ってゆきます。

これを作ることによって、アクセスキーだったりを取得できます。

取得するもの

  • API key(教えても平気)
  • API secret key(教えてはいけない)
  • Access token(教えても平気)
  • Access token secret(教えてはいけない)

アクセスキーだったりを取得する時間は、登録と比べたらあっという間に終わります。

取得できたらコードを書いてゆきましょう。

Twitter APIに接続してみる

まず、以下のものをインストールしてください。すでにインストールしてあれば構いません。

  • tweepy

インストールの仕方はpip install tweepyです。

コードは以下のようになります。

# test.py
import tweepy
import json

def main():

    json_file = "login_info.json"
    with open(json_file) as file:
        payload = json.loads(file.read())

    consumer_key    = payload["Consumer_key"]
    consumer_secret = payload["Consumer_secret"]
    access_token    = payload["Access_token"]
    access_secret   = payload["Access_secret"]

    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_secret)

    api = tweepy.API(auth, wait_on_rate_limit = True)

    print(api.rate_limit_status())


if __name__ == '__main__':
    main()

別に、access keyとか直書きでも良かったかもしれませんが、セキュリティー的に怖いし、何しろ、後々、別のプログラムを組むときに、いちいちアクセスキーとかコピペしたくなかったので、JSONファイルにまとめました。

{
    "COMMENT": "login_info.json",
    "Consumer_key": "ここにconsumer keyを記述",
    "Consumer_secret": "ここにconsumer secret keyを記述",
    "Access_token": "ここにAPI access tokenを記述",
    "Access_secret": "ここにAPI access secret keyを記述"
}

test.pyを実際に実行すると、以下のようになります。

{'rate_limit_context': {'access_token': ...
limit': 180, 'remaining': 180, 'reset': 1557651646}}}}

「なんかやばいのが出てきた……」と思っていれば、それで合っています。これは15分間にTwitter APIで利用できるツイート数だったりを教えてくれるプログラムとなっています(15分間にTwitter APIで利用できるツイート数だったりは決まっています。詳細はRating Limit(en)だったり、Qittaだったり)

逆に、以下のようなTweepyErrorというのが出てきた場合、残念ながら、アクセスキーだったりが間違っている虞があるので、一度、登録したTwitter APIのウェブページを見直してみてください。

    raise TweepError(error_msg, resp, api_code=api_error_code)
tweepy.error.TweepError: [{'code': 32, 'message': 'Could not authenticate you.'}]




    raise TweepError(error_msg, resp, api_code=api_error_code)
tweepy.error.TweepError: [{'code': 89, 'message': 'Invalid or expired token.'}]

ツイートする

さて、長くなりましたが、プログラムからツイートをしてみましょう!

実際のプログラムは以下のようになります。

# test.py
import tweepy
import json

def main():

    json_file = "login_info.json"
    with open(json_file) as file:
        payload = json.loads(file.read())

    consumer_key    = payload["Consumer_key"]
    consumer_secret = payload["Consumer_secret"]
    access_token    = payload["Access_token"]
    access_secret   = payload["Access_secret"]

    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_secret)

    api = tweepy.API(auth, wait_on_rate_limit = True)

    #print(api.rate_limit_status())

    text = input("ツイートする内容は?: ")+"\n\n[この文章はTwitter APIからTweetしています]"
    api.update_status(text)


if __name__ == '__main__':
    main()

完成したプログラムを実行すると、以下のように、無事、ツイートすることができました!

さいごに

Twitter APIを使えば、TwitterをCUIで動かすのもお手の物になります。

ツイート以外にも、フォロー、フォロワー、お気に入り、リツイートもできます。

今後も、Twitter APIを利用して、様々なツール制作を書いてゆく所存です。