天将奔烈

日々の記録や学習内容を書いていきます

tweepyを使って検索したユーザーをフォローする

ブログを始めたのもあって、折角だったらフィードバック貰えたらなぁとか、PV増やせたらなぁとか、あわよくばアフィリエイトでお小遣いもらえたらなぁとか、邪な事を考えたので、ツイッターで拡散したいと考えた。

まずは、ユーザーをフォローして自分のツイッターを見てもらうのがスタートかな でも、さすがに手動でやるのはめんどくさい。。。 そもそもエンジニアブログ書いてるんだからエンジニアの人に見てもらわないとフィードバックなんか貰えないよなぁって事で

これを使う

www.tweepy.org

api叩いてユーザー検索できるしフォローもできるっぽい! ということで早速

# package install
pip3 install tweepy

apiを使用する時に認証を行わないといけないので、auth情報を下記から取得。

developer.twitter.com

申請は英語でしなければならないのだが、拙い英語力のせいで何度も差し戻しにあって停滞した。。。

やっとこさAPI利用申請が通ったので、ソースを書いていく。

import sys
import tweepy
import configparser

if __name__ == "__main__":

    # get stdin
    search_word = sys.argv[1]
    print(search_word)

    config = configparser.ConfigParser()
    config.read('config.ini')
    API_KEYS = config['api_key']
    ACCESS_KEYS = config['access_key']
 API_SETTING = config['api_setting']

    auth = tweepy.OAuthHandler(API_KEYS['API_KEY'], API_KEYS['SECRET_API_KEY'])
    auth.set_access_token(ACCESS_KEYS['ACCESS_TOKEN'], ACCESS_KEYS['SECRET_ACCESS_TOKEN'])

    tweepy_api = tweepy.API(auth)

一応configにAPIの認証情報を置いておいた。

config.ini

[api_key]
API_KEY = xxxxxxxxxxxx
SECRET_API_KEY = xxxxxxxxxxxx

[access_key]
ACCESS_TOKEN = xxxxxxxxxxxx
SECRET_ACCESS_TOKEN = xxxxxxxxxxxx

[api_setting]
# 大量に一括フォローを避けるために5件にしておく。
SEARCH_LIMIT = 5

検索ワードはベタ下きで毎回書き換えるのが面倒だったので、標準入力から取得するようにしておいた。

一旦実行してみる。

python3 run.py "python3"
// python3

これで標準入力から入力を取得できることと、APIに接続する準備ができた。

APIに接続して、ユーザーを検索する。

results = tweepy_api.search(q=search_word, count=API_SETTING['SEARCH_LIMIT'])

キーワード引数で検索文字列と検索数を指定。

あとはこの結果を自動でフォローしていく。

    for i, result in enumerate(results, start=1):
        # 総件数と処理中の件数を表示しておく
        print('processing...{} of {}'.format(len(results), i))
   # 取得結果のjsonからユーザーIDを取得
        user_id = result.user._json['screen_name']
        print('user_id', user_id)
        # フォロー処理
        tweepy_api.create_friendship(user_id)

一応ツイッターでフォローできている事を確認できた。

気になる分野とかでまとめてフォローしたい時に使ったら便利かも。 (そこまでツイッターやってないけど。。。)

ディレクトリ構成はこんな感じ。

app/
├── config.ini
└── run.py

0 directories, 2 files

例外とかは全く考慮してないので、まだまだ課題はあるけど一旦はこんな感じでやりたい事は満たせたのでよしとする。