twitterで腐り芸人botを作りたい

腐り芸人

この前ゴッドタンを見ていたら腐り芸人の発言でかるたを作ろうという回だった。読み札を眺めていると、なんかtwitterっぽいなぁと思ったので、これを元ネタにbotを作ってみたくなった。やったことないけど多分簡単だろうと高を括りつつやってみる。

データを作る

幸いTVerで配信していたので、それを一時停止しながらデータを打ち込んだ。いくつか複数読み札がある。あ、い、う…は一応見出しでつけたけど、いらないかもしんない。エクセルに打ち込んだけど、とりあえずtxtで保存しとく。

twitterのアカウントを作る

https://twitter.com/RottenComedian

PCからだと一旦ログアウトしないと新規アカウントを作れないみたいなので、一旦ログアウトしたらパスワードを忘れていることに気づき焦った。アイコンとヘッダ画像を変えて、名前を変えられるようにして腐り芸人botという名前にしようと思う。

 

形から入るタイプ。アイコンとヘッダ作ったけど、なーんか野暮ったいね。素人だからしょうがないっかー。

twitter側の設定をする

APIを使ってアクセスする感じらしく、その場合こんな感じの流れで準備してくらしい。

How to get started with the Twitter APIs

To get started using the Labs endpoints, standard APIs, premium APIs, enterprise APIs, or Ads APIs, you need to create a developer account and generate keys and tokens.

  1. Apply and receive approval for a Twitter developer account.
  2. Create a Twitter developer app.
  3. Generate your app’s API keys and user’s access tokens.
  4. Generate your app’s bearer token.
  5. Apply and receive access to the desired API.
  6. Find the documentationlibraries, code examples, and other resources that you need to make your first successful request.

twitterの開発者登録をする

APIを使うには開発者登録が必要みたいなのでする。

https://developer.twitter.com/en/docs/basics/getting-started

ここの、Standard APIっていうのを使いたい。

https://developer.twitter.com/en/docs/basics/developer-portal/overview

開発者ポータル?

https://developer.twitter.com/en/application/use-case

ほんでこっから登録かな。

理由を聞かれるので選択。

アカウントの確認、電話番号の登録が必要だった。国名と開発者名?を入力。

APIを利用するのにどうしようと思ってるかの作文をしなさいと…。200単語以上だと…。その他にも質問があって、どれも100単語ぐらいは書かんといけんみたい…。機械翻訳を駆使しつつ頑張って入力する。

んで、入力確認して、利用規約にオッケーしたら完了。メールが送られてくるので確認してクリック。

でけたー。

新規アプリを作成する

アプリではないんだけど、アプリ作んないとAPIキーが発行されないみたいなので作る。

https://developer.twitter.com/en/apps

ここから右上のボタン押す。

詳細を入力。とりまRequiredだけ入れてる。また作文がある…。

そうすると、Keys and tokensが表示されるようになる。やっとAPIKeyをゲットやで。あと、OAuthっていうのがあるみたい。なにそれ。

OAuthってなんなんすかね

https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be

https://ja.wikipedia.org/wiki/OAuth

ここら辺読んでみたんですが、IDとパスワードを使わずにAPIの認可とかに使われる技術らしい。OAuth1.0aとOAuth2とあって、ツイートを投稿するだけなら1.0aだけでいいみたい。いまいちよく分かってないが、それを実装するわけでないしライブラリがあるっぽいのでおとなしくそれ使おうと思う。んでボタン押すとまた2つのKeyが表示された。初回しか表示されないので忘れず保存~。

サーバー側の準備する

ブログのためにサーバー借りてみたはいいけど、それ以外になんも使ってなかったのでこの機会に使ってみたい。っていうのもあってbot作ろうと思った。言語なんにしようかなーって思ったんだけど、phpとpythonで迷って、pythonにすることにした。以前使ってみたことあるしね。

pythonの準備する

VPSに入ってたっけ?と思ったので

python --version

したら

Python 2.7.5

だった。古い気ガス。2.7.5は俺じゃもう使わないだろうし、3系にしたいなーと思ったので

https://www.python.jp/install/centos/index.html

ここを見つつやってこうと思う。公式だし大丈夫だよ…ね?

$ sudo yum groupinstall "development tools"
$ sudo yum install bzip2-devel gdbm-devel libffi-devel \
  libuuid-devel ncurses-devel openssl-devel readline-devel \
  sqlite-devel tk-devel wget xz-devel zlib-devel

これやった。そんでソースダウンロードしてくる代わりに

curl -OL https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz

こう。関係ないけどLinuxって自分のファイルどこに置けばいいか迷う。今回はhomeにdalomoってフォルダ作った。んで

tar xzf Python-3.8.3.tgz

てやって解凍。できたフォルダに移動してー

$ ./configure --enable-shared
$ make
$ sudo make install
$ sudo sh -c "echo '/usr/local/lib' > /etc/ld.so.conf.d/custom_python3.conf"
$ sudo ldconfig

英語がすごい速さで流れるのを待つと終わった。そしたらかくにん。

python3 --version

どきどき

Python 3.8.3

できたー!プログラムも動くかしら

https://qiita.com/TakesxiSximada/items/65f8c018d25c6b08df85

こちらのtest.pyを拝借しまして実行すると…動いた!おっけーですね。でもこれもとから入ってた2系と共存してるんだけど大丈夫なのかな?まぁいいか。後で変ななったら考えよう。

プログラムを書く

ようやく書くんだけど、よく分かってないので取っ掛かりがほしい…。頑張ってtwitterの開発者ページを探すと、すごーーーく簡単に言うと、OAuthっていうのでAPIの使用許諾をもらって、APIのうち、statuses/updateっていうエンドポイントにPOSTする?とツイートできるみたい。そうですか。こう、1からやるとすると、OAuthの仕組みを理解してフローに沿ったコード書いたり、PythonでのHTTPリクエストのやり方を理解したり、まぁ無理そう…っておもいました。そしたら言語別の便利ライブラリっていうページをtwitterが用意してるのを見つけた。

https://developer.twitter.com/en/docs/developer-utilities/twitter-libraries

これだ。これでいこう。pythonのところを引用すると

Python

みたいなんがある。違いはよく分かりません。じゃあどれを使わせてもらおうとチラチラ見まして、簡単に書けそうかなぁっていう

https://github.com/sixohsix/twitter

こちらを使ってみることにする。ねこかわいい。すっごいふわふわしてるけど大丈夫かな。まぁとりあえず

pip install twitter

でインストールだ!…あれ?

pip: command not found

って出る。なんでやねん3.8.3やぞ、同梱されてるんちゃうんかとドキドキしながらググると

https://www.python.jp/install/centos/pip.html

ん?あ、なんかpip3ってコマンド使わないとダメみたい。へー。

pip3 install twitter
Collecting twitter
  Downloading https://files.pythonhosted.org/packages/85/e2/f602e3f584503f03e0389491b251464f8ecfe2596ac86e6b9068fe7419d3/twitter-1.18.0-py2.py3-none-any.whl (54kB)
     |????????????????????????????????| 61kB 4.2MB/s
Installing collected packages: twitter
Successfully installed twitter-1.18.0

おーできた。

そしたら、フォルダ作って、中にrottenbot.pyってファイル作って、サンプルに従いこんな

from twitter import *

token = "な"
token_secret = "い"
consumer_key = "し"
consumer_secret = "ょ"

t = Twitter(
    auth=OAuth(token, token_secret, consumer_key, consumer_secret))

t.statuses.update(
    status="Hello, World.")

コードを書きまして

python3 rottenbot.py

て実行すると…

https://twitter.com/RottenComedian/status/1271478032927092737

すげー!!!投稿できてる!感動するわこんなん。

そしたらあとはかるたデータを読み込んでランダムにツイートさせるようにすればいいんだな。

テキストから読み込んでランダムに選択する

とりあえずテストしてみるために、データをテキストファイルにして、一応文字コードをUTF-8に変換。そんでtest.pyってファイルを作って

import random

f = open('rotten.txt')
t = f.readlines()
f.close
r = random.choice(t)
print(r)

ってコード書いてみる。実行すると

python3 test.py
のびのびやれる番組は 2クールで終わる #腐り芸人

おおおー、表示された。でも、最後に改行が入ってる。これは一応削除しておきたい。strip()使えばいいみたい。

print(r.strip())

これでいいみたい。行末の改行がなくなった。そしたらrottenbot.pyの方にも書く。

from twitter import *
import random

def getword():
    f = open('rotten.txt')
    t = f.readlines()
    f.close
    r = random.choice(t)
    return r.strip()

token = "ひ"
token_secret = "み"
consumer_key = "つ"
consumer_secret = "。"

t = Twitter(
    auth=OAuth(token, token_secret, consumer_key, consumer_secret))

t.statuses.update(
    status=getword())

こんな?そしたら実行してみよう!どきどき

https://twitter.com/RottenComedian/status/1271532485331959809

やったー!できたー!わーい!そしたら、cronで定期実行すればいいね。

cronに設定する

https://crontab.guru/#0,30_*_*_*_*

こうした。

つまずき

http://www.gi.ce.t.kyoto-u.ac.jp/user/susaki/command/vi.html

https://ja.stackoverflow.com/q/20565

完成

できた!今んとこ30分に1回つぶやく感じかな。いやーできるもんだなぁ。

カテゴリー: したい, できた タグ: , , , , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です