About

【Python twitter】tweepyを利用してlike、follow、removeを実装したbotを作る




なぜやるか


・ブロガーをやっているので、自分のファンになってくれる可能性があるユーザーをフォローしたい。
・そのユーザーのコメントにいいねして、後で見返したい。フォローしてきたスパムアカウントはりむーぶしたい。
・毎日自分の手でやるのは社会人になってしまったので時間がない。ということで自動化したい。


環境

- python 3
- Cloud9を利用
- すでにherokuにpythonプロジェクトをdeploy済みです。
deployまでは下の記事を参考にしてください!


やりたいこと


0. とりあえずtwitter apiを使ってログインしてみる
1.  それぞれのユーザー名を取得し、そのユーザーのコメントにいいねとフォローを行う
2. 自分のタイムラインからツイートを10つ取得し、上から下までいいねを行う
3.フォロワー数が100未満のユーザーはすべてりむーぶする
4. heroku schedulerを利用して、上記の機能を定期処理で自動化する

0. pythonのtwitter apiであるtweepyを利用してログインしてみる


APIを利用して、ツイッターからの情報とるためには、最初に情報を準備しておかなければならない。詳しいことはこの記事に書いてあるので、参照してほしい。

# Tweepyライブラリをインポート
import tweepy

# 各種キーをセット
CONSUMER_KEY = 'xxxxxxxx'
CONSUMER_SECRET = 'xxxxxxxx'
ACCESS_TOKEN = 'xxxxxxxx'
ACCESS_SECRET = 'xxxxxxxx'

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)

#APIインスタンスを作成
api = tweepy.API(auth)


PythonでTwitterを使う 〜Tweepyの紹介〜
http://kivantium.hateblo.jp/entry/2015/01/03/000225

Tweepyでpythonについて呟いたアカウントをフォローしまくってみた - 駆け出し眼鏡のプログラミング道場
http://taikomegane.hatenablog.jp/entry/2017/07/08/151110

1. ユーザーのツイートにいいね(like)とフォロー(follow)を行う


自分のブログのURLを入れて、そのURLをシェアしているツイートを100取得。まだフォローしていないユーザーだけ、いいねしてフォローする。

import oauth
api = oauth.api

q = "PythonとかScrapyとか使ってクローリングやスクレイピングするノウハウを公開してみる"
count = 100
search_results = api.search(q=q, count=count)

for result in search_results:
    username = result.user._json['screen_name']
    user_id = result.id #ツイートのstatusオブジェクトから、ツイートidを取得
    print(user_id)
    user = result.user.name #ツイートのstatusオブジェクトから、userオブジェクトを取り出し、名前を取得する
    print(user)
    tweet = result.text
    print(tweet)
    time = result.created_at
    print(time)
    try:
        api.create_favorite(user_id) #ファヴォる
        print(user)
        print("をライクしました")
        api.create_friendship(username)
        print("をフォローしました")
    except:
        print("もうすでにふぁぼかフォローしてますわ")
    print("##################")

2. 自分のタイムラインからツイートを10つ取得し、上から下までいいねを行う

自分のタイムライン(自分とフォローしているユーザーのツイートが見れるページ)にアクセスし、上からツイートに自動でいいねしていく。



import oauth
api = oauth.api

q = "PythonとかScrapyとか使ってクローリングやスクレイピングするノウハウを公開してみる"
count = 100
search_results = api.search(q=q, count=count)

for result in search_results:
    username = result.user._json['screen_name']
    user_id = result.id #ツイートのstatusオブジェクトから、ツイートidを取得
    print(user_id)
    user = result.user.name #ツイートのstatusオブジェクトから、userオブジェクトを取り出し、名前を取得する
    print(user)
    tweet = result.text
    print(tweet)
    time = result.created_at
    print(time)
    try:
        api.create_favorite(user_id) #ファヴォる
        print(user)
        print("をライクしました")
        api.create_friendship(username)
        print("をフォローしました")
    except:
        print("もうすでにふぁぼかフォローしてますわ")
    print("##################")

3. 一週間に一度、フォロワー数が100未満のユーザーはすべてりむーぶする



自分のフォローしている人を取得、そしてその人が自分をフォローしていない人を取得。さらに、その中でフォロワー数が100未満のユーザーはすべてリムーブする。


import oauth
api = oauth.api

userid = "never_be_a_pm"

followers_id = api.followers_ids(userid) #自分のアカウントのフォロワーをすべて取得する
following_id = api.friends_ids(userid) #自分のアカウントのフォロイングをすべて取得する
for following in following_id: #自分がフォローしているユーザーだけ取得する
    if following not in followers_id: #自分のフォローしているユーザーで、フォロワーに属さなユーザーを取得する 
        userfollowers = api.get_user(following).followers_count
        if userfollowers < 100:
            print("リムーブするユーザー名")
            username = api.get_user(following).name
            print(username)
            print("フォロワー数")
            print(userfollowers)
            api.destroy_friendship(following)

4. heroku schedulerを利用して、上記の機能を定期処理で自動化する


heroku schedulerの使い方については前記事を見て参照してください。

【Python】 Cloud9を利用して、Seleniumで定期処理をherokuから行う|Review of My Life 

これみて進めたけど、requirement.txtでエラーでました。tweepyをrequirement.txtに
追加するの忘れていた。

参考 Reference


PythonでTwitterを使う 〜Tweepyの紹介〜
http://kivantium.hateblo.jp/entry/2015/01/03/000225

Tweepy API Reference
http://docs.tweepy.org/en/v3.5.0/api.html

Pythonでファボツール
http://morris555.hatenablog.com/entry/20120104/1325683862

Tweepyのstatusリストで何が取れるのかわからなかったので、取り出してみた
http://qiita.com/Ryo87/items/61b5d54cbfd7ae520fe6

tweet.favorited returns false tweepy even the tweet is favorited
https://stackoverflow.com/questions/40850547/tweet-favorited-returns-false-tweepy-even-the-tweet-is-favorited

'Favorited' reports as False even if status is already favorited by the user - REST API / REST API v1.1 - Twitter Developers
https://twittercommunity.com/t/favorited-reports-as-false-even-if-status-is-already-favorited-by-the-user/11145

Return a users tweets with tweepy
https://stackoverflow.com/questions/25588272/return-a-users-tweets-with-tweepy

スポンサーリンク

Read more↓

書評














教育











キャリア

プログラミング・ライフハック

About me


・ 最近The Academic Timesというアカデミック専用メディアを立ち上げました。