2016/04/14

[Python]艦これSS取得スクリプトver3.0

以前、「Pillowがうまく動かない!」と騒いだときに艦これのSS取得スクリプトを修正した。

一応動いてはいるのだが、使ってみるとスクリプト実行時のPython.exeのウィンドウが艦これ画面部に被り、SSにPythonのウィンドウが写って邪魔になることがわかった。

というわけで、今回はその部分を修正するスクリプトを。
前回は起動時の画面を取得する形にしていたが、今回はver1.0と同様、プリントスクリーンでクリップボードに画面を保持させた状態で起動し、クリップボードを取得しトリミングするという形を取ることにした。

# coding:utf-8
# Project_SS
from PIL import ImageGrab

img = ImageGrab.grabclipboard()
imgFile = img.crop((560, 188, 1360, 667)) 
#()内の数字は環境によって違う?
#詳しくは http://blog.retore.xyz/2015/12/151206.html を参照。
imgFile.save('[保存パス]','PNG')

と、いうことでした。

2016/04/05

[Python]Twitterでファボったツイートの添付画像を一括DLする。

# -*- 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)

主に取得したブツ(オブジェクトって言って良いのか?)がどういう構成なのか、という点についてこちらを参考にさせていただいた。
リクエストのステータスコードによる篩分け等も同様である。

画像のDL部分は以前私が書いた画像一括DLスクリプトをだいたい流用している。

実際の上のコードを動かすにはPython関連の環境整備はもちろん、CK,CS,AT,ATSの取得も必要になる。
その辺りはここが参考になるだろう。
あと一応書き加えておくと、このスクリプトで確認したツイートへのファボは解除されるので注意されたし。

API叩ける回数がどうとか、ファイルの書き込み方がどうとか、プログラミングに詳しい人が見れば突っ込みどころが満載だろうが、とりあえず動いているので満足している。
APIを叩く回数制限のあたりはちょっと気になるので、気が向いたらもう少し深掘りしようと思う。

2016/04/01

桜を見に行った。

色々あって、桜を見に出かけた。

最初に行ったのは六義園。駒込駅近くにある大名庭園らしい。らしい、と言うのも、こんなにアクセスがいいスポットにも関わらず今までこの存在を知らなかったからである。

3月下旬が枝垂れ桜の見頃ということだが、桜以外にも色々ないかにも和風な綺麗な景観が広がっている。
雰囲気的には兼六園に似ている。桜以外にも紅葉の時期や雪が降った時にまた見に行くのもよさそうだ。


続いて市ヶ谷へ移動し靖国神社へ。最近ちょくちょく神保町へ行って、靖国通り沿いに秋葉原方面へ向かうのが定番のパターンと化していたが、神保町から逆方向へ進んだあたりに位置するらしい。

ここもまた桜が綺麗だったが、午後6時の閉門ギリギリだったのであまりじっくり見ることができなかったのが残念。
写真を撮って即撤退。


まだ時間があったので、飯田橋まで歩いて、外濠公園を市ヶ谷方面へ歩いた。
わざとらしいライトアップがあるわけでもないのだが、あちこちの光が桜を照らしてとても綺麗だった。


最近思うのだが、スマホのカメラは画質は申し分ないが、広角という点でみるとやはりデジカメが優れている。
いっそコンデジを買うのもいいかなあとも思うが、スマホの手軽さも捨てがたい。
特に勝手にOneDriveにアップロードしておいてくれるのが大変ありがたく、PCでブログを書くときに非常に便利だ。

調べてみるとスマホ用の広角レンズアタッチメントも売っているらしいが、ちょっと邪魔になりそう。
カバンからゴソゴソクリップ型のレンズを取り出してスマホに付けて~というのはちょっとメンドクサイかなあ。