susutex’s blog

自転車、電子工作、プログラミングとかについて書くかもしれないブログ

サーバルちゃんbotに自動フォロー返し機能を追加する

サーバルちゃんbotのツイートのバリエーションを増やすには積極的にフォローしてTLをにぎやかにする必要がある。
現状手動でやっているが、自動でできるようにしておきたい。

そもそも前回のTLの取得はどうやっていたのか?

前回適当に検索して出てきたサイトのコードをコピペして行ったタイムラインのテキスト取得は以下の手順で行っていたようだ。

OAuth認証なるものによりtwitterと認証を行いセッションを開始する。細かい認証の手順はtwitterの開発者サイトで取得したキーとトークンをrequests_oauthlibというライブラリ内のOAuth1Sessionに渡せばやってくれる。

認証が完了したら

GET statuses/home_timeline — Twitter Developers

というtwitter APIなるものを使ってアクセスし、TLの情報が詰まったJSONなるものを取得する。

json.loads()を使って取得したJSONを整形し、タイムラインの情報を格納したオブジェクトを取得する。

 

 

API? OAuth? GET? JSON?なにそれ。
普段マイコンしかいじってないし、正直Web系のプログラミングには詳しくない。
言葉の定義を調べていると嫌になる。こういう言葉の定義はまずはいろいろ動かしてみてから、ある程度動きが見えてから調べたほうが見通しがいいと思っている

 

自動でフォローを行うにはどうすればいいのか

自動でフォローを行うには

  1. フォロワー情報を取得するtwitter APIを使用して情報を取得
  2. 取得したフォロワー情報からフォロー中か否かの情報を確認する
  3. フォローしていないユーザーがいたらそのフォロワーの識別子を取得し、取得した識別子のユーザーをフォローするよう指示を行うtwitter APIを使ってアクセスする

とすればよいだろうか。

1. フォロワー情報を取得する

Reference Documentation — Twitter Developers

APIはここにリストがあるのでここから良さそうなやつを探そう。

GET followers/ids — Twitter Developers

GET followers/list — Twitter Developers

どっちだろう。両方試してみる。

idsは本当にidしか手に入らなかった。

listはフォロワーの情報がたくさん手に入った。フォロー中かどうかわかる情報もきっとあるはず。

 

2. 取得した情報から必要な情報を抜き出す

ほしい情報は

followers = json.loads()

としたとすると

for follower in followers['users']:

    print(follower['id'], follower['screen_name'], follower['following'])

で取得できる。

である。'following'はフォロー中だとTrueになる。試しに手動でフォローを外して再取得するとFalseとなった。

 

3. フォローしていないユーザーをフォローする。

POST friendships/create — Twitter Developers

フォローを行うAPIはこれかな?

list APIで取得したidを入れてPOSTしたらちゃんとフォローできた。

 

POST friendships/destroy — Twitter Developers

は逆にフォローを外す。試してみたらちゃんとリムられた。

 

これらを組み合わせることで、フォローしていない相手がいたらフォローするという一連の動きを作ることができた。botの自動ツイート実行の先頭にこの処理を追加したので、ツイートを行うタイミングでフォロワーを自動でフォローしてくれるようになった。

 

言葉の意味メモ

ひととおり作り終わったので言葉の意味を調べておいた。

Web API

プログラムからWebを通じてデータをやり取りしてWebサービスを操作するための方法のことらしい。TLの取得はTwitterREST APIの中にあるhome_timilineを使い、データはJSONという形式でやり取りされている。

 

OAuth

認証を行うためのオープンスタンダードで、Twitterでも使用されている。Twitterの開発者サイトでキーとアクセストークンが入手できるのでそれを使って認証を行うことでWeb API経由でTwitterを操作できるようになる。

 

GET POST

どちらもHTTPリクエスト時にデータを送付する方法で、GETはURLに情報を載せ、POSTはHTTPリクエストのbody部分に情報が載るらしい。

 

JSON

JavaScriptにおけるオブジェクトの表記方法をベースとした、テキスト形式のデータの記述方法。人間にもプログラムにも読みやすいらしい。

 

 

なんとなくわかった気がする。他にもいろいろ試してみよう。