LoginSignup
34

More than 5 years have passed since last update.

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

Posted at

やったこと

  • 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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34