これまでpythonでtwitter APIを使用して、twitterを操作する方法を解説してきました
今回はそのまとめとして、pythonでtwitter APIを使用して自動化するツールを作りました
これまでの記事を参考にすれば作成することができます
もしpythonの環境構築ができていないけど、twitterを自動運用したい方は、ココナラから依頼をお願いします
twitter運用の効率化を図ります(ココナラのサイトに飛びます)
pythonでtwitter APIを取得する方法【全18枚の図解+例文あり】
pythonではtwitter以外にも自動化できるものが多くあります
pythonでtwitterを操作してみたい
pythonでtwitterのbotを作成したい
pythonでtwitterを自動化したい
といった方に向けて、書いていきます!
以下の記事では、pythonでtwitterを使う方法をまとめて解説しているので、参考にしてみてください
pythonでtwitterを扱えるようになると、twitterで行われている懸賞に自動で応募することができるようになります
Contents
pythonでtwitter APIを使用して自動化
下記のコードをうまく使えば、上記のようなインプレッションとか取れます
売り上げ上がります
コードはこれまでのを組み合わせればOKです
いいねをする
#Twitter情報。これは公開NG。
#********には自分自身のAPIキーなどを入力してください
consumer_key = '********'
consumer_secret = '********'
access_token = '********'
access_token_secret = '********'
#Twitterの認証
auth = tweepy.OAuthHandler(consumer_key, consumer_secret1)
auth.set_access_token(access_token, access_token_secret1)
api = tweepy.API(auth)
# 指定した条件(検索ワード、検索件数)に一致するユーザ情報を取得
#search_word = sys.argv[]
search_results = api.search_tweets(q="#********", result_type="mixed",count=20)
for result in search_results:
tweet_id = result.id #Tweetのidを取得
user_name = result.user._json['screen_name'] #ユーザーのidを取得
user_id= result.user._json['id']#ツイートidを取得
print(user_name,user_id)
try:
api.create_favorite(tweet_id) #ファボする
except Exception as e:
print(e)
ツイートを取得する
# ライブラリのインポート
import tweepy
from datetime import datetime,timezone
import pytz
import pandas as pd
# Twitterの認証
#Twitter情報。
#********には自分自身のAPIキーなどを入力してください
consumer_key = '********'
consumer_secret = '********'
access_token = '********'
access_token_secret = '********'
#Twitterの認証
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
# ”wait_on_rate_limit = True” 利用制限にひっかかた時に必要時間待機する
api=tweepy.API(auth,wait_on_rate_limit=True)
# 検索条件の設定
search_word = 'ブログ初心者 min_faves:200'
#何件のツイートを取得するか
item_number = 150
#検索条件を元にツイートを抽出
tweets = tweepy.Cursor(api.search_tweets,q=search_word, tweet_mode='extended',result_type="mixed",lang='ja').items(item_number)
#関数: UTCをJSTに変換する
def change_time_JST(u_time):
#イギリスのtimezoneを設定するために再定義する
utc_time = datetime(u_time.year, u_time.month,u_time.day, \
u_time.hour,u_time.minute,u_time.second, tzinfo=timezone.utc)
#タイムゾーンを日本時刻に変換
jst_time = utc_time.astimezone(pytz.timezone("Asia/Tokyo"))
# 文字列で返す
str_time = jst_time.strftime("%Y-%m-%d_%H:%M:%S")
return str_time
#抽出したデータから必要な情報を取り出す
#取得したツイートを一つずつ取り出して必要な情報をtweet_dataに格納する
tw_data = []
for tweet in tweets:
#ツイート時刻とユーザのアカウント作成時刻を日本時刻にする
tweet_time = change_time_JST(tweet.created_at)
create_account_time = change_time_JST(tweet.user.created_at)
#tweet_dataの配列に取得したい情報を入れていく
tw_data.append([
tweet.id,
tweet_time,
tweet.full_text,
tweet.favorite_count,
tweet.retweet_count,
tweet.user.id,
tweet.user.screen_name,
tweet.user.name,
tweet.user.description,
tweet.user.friends_count,
tweet.user.followers_count,
create_account_time,
tweet.user.following,
tweet.user.profile_image_url,
tweet.user.profile_background_image_url,
tweet.user.url
])
#取り出したデータをpandasのDataFrameに変換
#CSVファイルに出力するときの列の名前を定義
labels=[
'ツイートID',
'ツイート時刻',
'ツイート本文',
'いいね数',
'リツイート数',
'ID',
'ユーザー名',
'アカウント名',
'自己紹介文',
'フォロー数',
'フォロワー数',
'アカウント作成日時',
'自分のフォロー状況',
'アイコン画像URL',
'ヘッダー画像URL',
'WEBサイト'
]
#tw_dataのリストをpandasのDataFrameに変換
df = pd.DataFrame(tw_data,columns=labels)
#CSVファイルに出力する
#CSVファイルの名前を決める
file_name='tw_data.csv'
#CSVファイルを出力する
df.to_csv(file_name,encoding='utf-8-sig',index=False)
定期的にランダムでツイート
import random
import tweepy
#****には自身のコードを入力してください
CONSUMER_KEY = '****'
CONSUMER_SECRET = '****'
ACCESS_TOKEN = '****'
ACCESS_SECRET = '****'
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)
#****にツイートしたい内容を入力していきます.「,」で区切ることで、複数登録できます
tweetlist=["****"]
#リストに含まれるツイート内容をランダムでツイート
api.update_status(random.choice(tweetlist))
ダイレクトメッセージを送る
# ライブラリの読み込み
import tweepy
#****には自身のコードを入力してください
CONSUMER_KEY = '****'
CONSUMER_SECRET = '****'
ACCESS_TOKEN = '****'
ACCESS_SECRET = '****'
#twitter認証
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)
# アカウント指定(Twitterアカウントの@以降の英数字)
Account = '****'
# アカウントの内部IDを取得する
inner_id = api.user_timeline(Account, count=1, page=0)[0].user.id
api.send_direct_message(recipient_id=inner_id,text='Hello world!')
自動フォローをする
# ライブラリの読み込み
import tweepy
#****には自身のコードを入力してください
CONSUMER_KEY = '****'
CONSUMER_SECRET = '****'
ACCESS_TOKEN = '****'
ACCESS_SECRET = '****'
#twitter認証
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)
# フォロワーを新しい順で取得。(件数は5件としています。)
flist= api.followers(count=5)
for f in flist:
# 相手のアカウントの説明文にフォローバックしたくない[キーワード]があればここで登録。
#(例:副業など)
if "<相手のアカウントの説明文内のフォローバックしたくないキーワード>" in f.description:
continue
else:
api.create_friendship(f.id)
指定アカウントのツイートにいいね
# ライブラリの読み込み
import tweepy
#****には自身のコードを入力してください
CONSUMER_KEY = '****'
CONSUMER_SECRET = '****'
ACCESS_TOKEN = '****'
ACCESS_SECRET = '****'
#twitter認証
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)
#いいねするアカウントの指定及びいいね件数の設定
tweets = api.user_timeline(screen_name= "@****",count=3)
for tweet in tweets:
api.create_favorite(tweet.id)
twitterから画像を取得する
# IMPORT
import os
import tweepy
import time
import urllib.request, urllib.error
# 画像の保存先
#保存先のパス名を「*****」に入力
IMG_DIR = '******'
# 環境変数
CONSUMER_KEY = '******'
CONSUMER_SECRET = '******'
ACCESS_TOKEN_KEY = '******'
ACCESS_TOKEN_SECRET = '******'
# 検索キーワード
#好きなキーワードを「*****」に入力
TARGET = '*****'
# 検索オプション
SEARCH_PAGES_NUMBER = 10 # 読み込むページ数
PER_PAGE_NUMBER = 10 # ページごとに返されるツイートの数(最大100)
class imageDownloader(object):
def __init__(self):
"""初期設定
"""
super(imageDownloader, self).__init__()
self.set_api()
def run(self):
"""実行
1. twitterページを指定数取得
2. ページ内のツイートのうち、キーワードがあるtweetのみ取得
3. 画像URLを取得
4. ダウンロード実行
"""
self.max_id = None # ページを跨ぐ検索対象IDの初期化
for page in range(SEARCH_PAGES_NUMBER):
ret_url_list = self.search(TARGET, PER_PAGE_NUMBER)
for url in ret_url_list:
print('OK ' + url)
self.download(url)
time.sleep(0.1) # TimeOut防止
def set_api(self):
"""apiの設定
"""
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN_KEY, ACCESS_TOKEN_SECRET)
self.api = tweepy.API(auth)
def search(self, target, rpp):
"""twitterで検索実行
"""
# 検索結果
ret_url_list = []
try:
# 検索実行
if self.max_id:
# q: クエリ文字列, rpp: ツイート数, max_id: より小さい(古い)IDを持つステータスのみを返す
res_search = self.api.search_tweets(q=target, lang='ja', rpp=rpp, max_id=self.max_id)
else:
res_search = self.api.search_tweets(q=target, lang='ja', rpp=rpp)
# 結果を保存
for result in res_search:
if 'media' not in result.entities: continue
for media in result.entities['media']:
url = media['media_url_https']
if url not in ret_url_list: ret_url_list.append(url)
# 検索済みidの更新し、より古いツイートを検索させる
self.max_id = result.id
# 検索結果の返却
return ret_url_list
except Exception as e:
self.error_catch(e)
def download(self, url):
"""画像のダウンロード
"""
url_orig = '%s:orig' % url
path = IMG_DIR + url.split('/')[-1]
try:
response = urllib.request.urlopen(url=url_orig)
with open(path, "wb") as f:
f.write(response.read())
except Exception as e:
self.error_catch(e)
def error_catch(self, error):
"""エラー処理
"""
print("NG ", error)
def main():
"""メイン処理
"""
try:
downloader = imageDownloader()
downloader.run()
except KeyboardInterrupt:
# Ctrl-Cで終了
pass
if __name__ == '__main__':
main()
twitterデータからテキストマイニングを行う
import tweepy
from datetime import datetime,timezone
import pytz
import pandas as pd
import collections
import matplotlib.pyplot as plt
from wordcloud import WordCloud
CONSUMER_KEY = ''
CONSUMER_SECRET = ''
ACCESS_TOKEN = ''
ACCESS_SECRET = ''
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)
search_results = api.search_tweets(q="", result_type="recent",tweet_mode='extended',count=5)
tw_data = []
for tweet in search_results:
#tweet_dataの配列に取得したい情報を入れていく
tw_data.append([
tweet.id,
tweet_time,
tweet.full_text,
tweet.favorite_count,
tweet.retweet_count,
tweet.user.id,
tweet.user.screen_name,
tweet.user.name,
tweet.user.description,
tweet.user.friends_count,
tweet.user.followers_count,
create_account_time,
tweet.user.following,
tweet.user.profile_image_url,
tweet.user.profile_background_image_url,
tweet.user.url
])
#取り出したデータをpandasのDataFrameに変換
#CSVファイルに出力するときの列の名前を定義
labels=[
'ツイートID',
'ツイート時刻',
'ツイート本文',
'いいね数',
'リツイート数',
'ID',
'ユーザー名',
'アカウント名',
'自己紹介文',
'フォロー数',
'フォロワー数',
'アカウント作成日時',
'自分のフォロー状況',
'アイコン画像URL',
'ヘッダー画像URL',
'WEBサイト'
]
#tw_dataのリストをpandasのDataFrameに変換
df = pd.DataFrame(tw_data,columns=labels)
df1=df.iat[2,2]
df2=df.iat[3,2]
tw_text=df1 + df2
f=open('text.txt','w')
f.write(tw_text)
f.close
f= open("/text.txt", 'r', encoding='UTF-8')
text=f.read()
f.close()
word_list=[]
while node:
word_type = node.feature.split(',')[0]
if word_type in ["名詞",'代名詞']:
word_list.append(node.surface)
node=node.next
word_chain=' '.join(word_list)
c=collections.Counter(word_list)
font_path='/System/Library/Fonts/ヒラギノ明朝 ProN.ttc'
words = ['https','t','co','自民','し','w','そう', 'ない', 'いる', 'する', 'まま', 'よう', 'てる', 'なる', 'こと', 'もう', 'いい', 'ある', 'ゆく', 'れる', 'ん', 'の']
result = WordCloud(width=800, height=600, background_color='white',
font_path=font_path,regexp=r"[\w']+",
stopwords=words).generate(word_chain)
result.to_file("./wordcloud_sample1.png")
print(c.most_common(20))
fig = plt.subplots(figsize=(8, 10))
twitterを自動化する
定期実行ツールはcronの他にHerokuと呼ばれるものもあります
Herokuを使った方がうまくいく気がします
pythonを使ってtwitterの自動化-twitter運用効果あり-
上記note無料部分で、Herokuの設定ができますので、参考にしてください
もし代行で問題なければ、twitter運用の効率化を図りますからご連絡ください
まとめ
- twitter自動化はHerokuを使う
- リツイートをしたい場合には「api.retweet(tweet_id)」を使う
- うまく使えば認知度が爆上がりする