Python
Twitter
tweepy

【Python】 Tweepyで、ツイート・フォロー・リムーブ・検索・画像投稿する方法をまとめてみた

More than 1 year has passed since last update.

やったこと

  • PythonからTwitterを扱えるTweepyの使い方をまとめてみました。
    • Tweepyのインストール
    • Twitter apiを使ってログイン
    • それぞれのユーザー名を取得し、そのユーザーのコメントにいいねとフォロー
    • フォロワー数が100未満のユーザーはすべてリムーブ
    • Tweepyから画像投稿
    • Tweepyからツイート検索
    • heroku schedulerを利用して、上記の機能を定期処理で自動化
  • 詳しいコードの解説はブログを見てね

Tweepyの使い方まとめ https://review-of-my-life.blogspot.jp/2017/07/python-cloud9-tweepy.html

それぞれのユーザー名を取得し、そのユーザーのコメントにいいねとフォロー

# 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)

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(user_id)
        print("をフォローしました")
    except:
        print("もうすでにふぁぼかフォローしてますわ")
    print("##################")

フォロワー数が100未満のユーザーはすべてリムーブ

# 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)
userid = "never_be_a_pm" #ここに自分のuseridを入れる

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)

Tweepyから画像つきツイートをする

import urllib.request
from requests_oauthlib import OAuth1Session # ライブラリ(1)
from bs4 import BeautifulSoup 
from TwitterAPI import TwitterAPI
import requests
import tweepy
import os


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

#apiを取得
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)

# ツイート投稿用のURL
url = "https://api.twitter.com/1.1/statuses/update_with_media.json"

# DMMのAPP ID, AFFILIATE ID, 検索キーワードをセット

APPID = "[APPID]"
AFFILIATEID = "[AFFILIATEID]"
KEYWORD = "your keyword here"

#DMMのAPIを取得し、XMLをBeautifulsoupで取得
html = urllib.request.urlopen("https://api.dmm.com/affiliate/v3/ItemList?api_id=" + APPID + "&affiliate_id=" + AFFILIATEID + "%20&site=DMM.R18&service=digital&floor=videoa&hits=2&sort=date&keyword=" + KEYWORD + "&output=xml")
soup = BeautifulSoup(html,"html5lib")

#取得したXMLを整理して表示する

print("取得したデータを表示します")
print(soup.prettify())

#タイトル・女優・画像URL・動画URLを追加

items = soup.items #1つ1つのitemオブジェクトを取得
print("取得したitems数:{}".format(len(items.item)))
for item in items:
    print("--------------")
    title = item.title.string #動画タイトル
    title = (title[:40] + "..動画はこちら→") if len(title) > 75 else title #タイトルが40字過ぎたら省略
    print("title:{}".format(title))
    photoURL = item.imageurl.large.string  #画像URL
    print("photoURL:{}".format(photoURL))

    #動画によってはサンプル動画がない。ない場合エラーになるので、tryで囲む

    try:
        videoURL = item.samplemovieurl.size_476_306.string
        print("videoURL:{}".format(videoURL))

        #ツイート内容
        content = title + "|" + videoURL
        print("ツイート内容:{}".format(content))

        #DMMから取得した画像を一度ローカルに保存

        request = requests.get(photoURL, stream=True)
        filename = "temp.jpg"
        if request.status_code == 200:
            print("status_code == 200")
            with open(filename, 'wb') as image:
                for chunk in request:
                    image.write(chunk)
            api.update_with_media(filename, status = content)
            print("ツイートに成功しました")
            os.remove(filename)
        else:
            print("画像をダウンロードできませんでした")
    except Exception as e:
        print(e)
print("プログラムを終了しました")

Tweepyから検索する

import urllib.request
from requests_oauthlib import OAuth1Session # ライブラリ(1)
from bs4 import BeautifulSoup 
from TwitterAPI import TwitterAPI
import requests
import tweepy
import os


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

#apiを取得
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)

# twitter内を検索し、結果をエクセルに書き込む
for status in api.search(q='', lang='ja', result_type='recent',count=100): #qに検索語句,countに検索結果の取得数
    status.user.name #useridが出てくる
    status.user.screen_name)#ユーザー名が出てくる
    status.text #ツイート内容が出てくる
    status.created_at+ datetime.timedelta(hours=9),format #投稿時間が出てくる

参考

【Python】Tweepyの使い方まとめ
https://review-of-my-life.blogspot.jp/2017/07/python-cloud9-tweepy.html