# -*- coding: utf-8 -*- from requests_oauthlib import OAuth1Session import json import urllib import os import sys CK = 'xxxxxxxxxxxxxxxxxxxxxxxxx' #ConsumerKey CS = 'xxxxxxxxxxxxxxxxxxxxxxxxx' #ConsumerSecret AT = 'xxxxxxxxxxxxxxxxxxxxxxxxx' #AccessToken AS = 'xxxxxxxxxxxxxxxxxxxxxxxxx' #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":"retore", "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"] print u'id', tweet["id"] 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) urllib.urlretrieve(img_url_large, savepath) #画像をDLしたツイートへのファボ解除 destroyFav(tweet["id"]) print u'Donwload completed.' #1つのツイートに複数枚の画像がある可能性を考慮 imgnum += 1 except KeyError: #画像がないツイートの場合 #ファボを解除 destroyFav(tweet["id"]) print u'No Image.' except: print u'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 u'destroyed my fav to', id, u'.' getFavImage(200)
Sponsored Link
主に取得したブツ(オブジェクトって言って良いのか?)がどういう構成なのか、という点についてこちらを参考にさせていただいた。
リクエストのステータスコードによる篩分け等も同様である。
画像のDL部分は以前私が書いた画像一括DLスクリプトをだいたい流用している。
実際の上のコードを動かすにはPython関連の環境整備はもちろん、CK,CS,AT,ATSの取得も必要になる。
その辺りはここが参考になるだろう。
あと一応書き加えておくと、このスクリプトで確認したツイートへのファボは解除されるので注意されたし。
API叩ける回数がどうとか、ファイルの書き込み方がどうとか、プログラミングに詳しい人が見れば突っ込みどころが満載だろうが、とりあえず動いているので満足している。
APIを叩く回数制限のあたりはちょっと気になるので、気が向いたらもう少し深掘りしようと思う。
0 件のコメント:
コメントを投稿