🦄

tweepyを使っていいねした画像を保存する

2022/06/02に公開

一度作ろうとして挫折してしまっていたが、今回やってくれている人がいたそれを参考にして(ほぼパクリ)作成した。(本当にありがとう)
やってくれていた人の記事を参考にtweepyの仕様が変わっているところに変更して作成した。

コード

import os
import pprint
import time
import urllib.error
import urllib.request
import re
import datetime

import tweepy

auth = tweepy.OAuth1UserHandler("XXXXX", "XXXXX","XXXXX", "XXXXX")
api = tweepy.API(auth)

#URLから画像をダウンロードする
def download_file(url, dst_path):
    try:
	with urllib.request.urlopen(url+'?format=jpg&name=orig') as web_file:
	    data = web_file.read()
	    with open(dst_path, mode='wb') as local_file:
		local_file.write(data)
    except urllib.error.URLError as e:
	print(e)

dt_now = datetime.datetime.now()
#画像を保存する用のフォルダ作成
try:
    os.makedirs('D:/picture/paint/'+dt_now.strftime('%Y'))
except:
    pass

try:
    os.makedirs('D:/picture/paint/'+dt_now.strftime('%Y')+'/'+dt_now.strftime('%m'))
except:
    pass

#いいね欄から最新100件取得する、
likeList = api.get_favorites(screen_name="twitterのid", count=100)

failue_tweet = []
	dir_path = 'D:/picture/paint/'+dt_now.strftime('%Y')+'/'+dt_now.strftime('%m')

for tweet in likeList:
    user  = tweet.user.screen_name
    page = 0
    print(user,':',tweet.id_str)
    try:
	# いいねしたツイートのURLを取得する
	for data in tweet.extended_entities['media']:
	   #画像が二枚以上の場合は、それぞれを保存する
	    if(len(tweet.extended_entities['media']) > 1):
		if(data['type'] == 'photo'):
		    download_file(data['media_url'], dir_path+'/'+user+'_'+tweet.id_str+'_'+str(page)+'.jpg')
               
		    page += 1
	    # 画像が1枚
	    else:
		if(data['type'] == 'photo'):
		    download_file(data['media_url'], dir_path+'/'+user+'_'+tweet.id_str+'.jpg')
                
    except AttributeError:
	msg = '[NotFoundImg] : https://twitter.com/i/web/status/'+ tweet.id_str+'\n'
	failue_tweet.append(msg)
	continue

f = open('error.txt','a')
f.writelines(failue_tweet)
f.close()

これをタスクスケジューラで週一で回すようにすればダウンロードしてフォルダ分けもしなくて良くなり、twiiterライフをもっと満喫できる。
tweepy一度挫折したが、前はプログラミング学び始めのときだったからできなかったけど、今ではレベルアップして色々いじくれるようになってきているから他にも少し触ってみようと思う。

参考にした人の記事

https://qiita.com/hxbdy625/items/3806bdc2b36f64986119

tweepyドキュメント

https://docs.tweepy.org/en/stable/

Discussion