久しぶりにTwitterでふぁぼった画像を一掃しようということでスクリプトを動かしてみたのだが,以前書いた時はPython2.x系,今の環境は同3.x系.微妙なところで互換性がなくエラーを吐くので3.x系で動くように小改造しました.
# -*- coding: utf-8 -*- from requests_oauthlib import OAuth1Session import json import urllib import os import sys CK = 'xxxxxxxxxxxxxxxx...
前回のやつ.
Sponsored Link
コード
# -*- coding: utf-8 -*- import requests from requests_oauthlib import OAuth1Session import json import os import shutil import sys CK = 'xxxxxxxxxxxxxxxxxxxxxx' #ConsumerKey CS = 'xxxxxxxxxxxxxxxxxxxxxx' #ConsumerSecret AT = 'xxxxxxxxxxxxxxxxxxxxxx' #AccessToken AS = 'xxxxxxxxxxxxxxxxxxxxxx' #AccesssTokenSecert folder = os.path.abspath('[画像を保存するフォルダのパス]') #OAuth認証 twitter = OAuth1Session(CK, CS, AT, AS) def getFavImage(cntnum): url = "https://api.twitter.com/1.1/favorites/list.json?" params = {"screen_name":"[screen nameを入れる]", "count":cntnum, "include_entities":1} #ふぁぼったツイートを取得する req = twitter.get(url, params = params) # レスポンスを確認 if req.status_code == 200: tweets = json.loads(req.text) #取得したツイート(複数)からツイートを取り出し、画像があればダウンロードする。 for tweet in tweets: try: img_list = tweet["extended_entities"]["media"] imgnum = 1 for img in img_list: img_url = img["media_url"] root, ext = os.path.splitext(img_url) img_url_large = img_url + ':large' filename = str(tweet["id"]) + u'_' + str(imgnum) + ext savepath = os.path.join(folder, filename) r = requests.get(img_url_large, stream=True) with open(savepath, 'wb') as f: r.raw.decode_content = True shutil.copyfileobj(r.raw, f) #画像をDLしたツイートへのファボ解除 destroyFav(tweet["id"]) print('Donwload completed.') #1つのツイートに複数枚の画像がある可能性を考慮 imgnum += 1 except KeyError: #画像がないツイートの場合 #ファボを解除 destroyFav(tweet["id"]) print('No Image.') except: print('Error.') elif req.status_code == 404: print("Error code: {0}".format(req.status_code)) else: print("Error code: {0}".format(req.status_code)) sys.exit() def destroyFav(id): req = twitter.post("https://api.twitter.com/1.1/favorites/destroy.json", params={"id":id, "include_entities":True}) if req.status_code != 200: print("Error code: {0}".format(req.status_code)) sys.exit() else: print('destroyed fav') getFavImage(200)
変更点
一番大きいのは画像のDL周りで,2.x系のときのurllibではなくてrequestsというものを使っている.この辺りは3系のほうがスムーズにやれる印象.
デバッグ用のprintでエラーを吐いたのはさすがに萎えたが,そこも直した.
OAuth認証周りも何か変更があるような話をちらほら見かけたが,修正しなくても動いているのでそのまま.
参考にしたサイト
python3のrequestsを使って画像を保存(Qiita)を参考にした.urllibではできたファイル保存のやり方がよくわからなくなって困っていたので助かった.
おわりに
相変わらず時間が経つとコードが読みにくくなる.コメントをつけないのとそもそもコードが汚いのが原因なんだが,なんとかならんもんか.
悲しみのIT系社畜になることが確定したので本気で勉強せねば.
0 件のコメント:
コメントを投稿