mobile hack 楽しい生活情報を携帯しよう

コンセプト「楽しい生活情報を携帯する」


機械学習の画像を取得するのに面倒臭いので Google のサービスを遺憾なく発揮して好き勝手に!?画像を集め Google Drive に入れる。

f:id:mobile_hack:20160520163214j:plain 面倒臭いので tumblr api を使いましょう。 tumblr に登録する方法は説明しません。

import os
import sys
import time
import requests

api_url = 'https://api.tumblr.com/v2/tagged'
api_key = sys.argv[1]
tag = sys.argv[2]
num = int(sys.argv[3])

prefix = ''
dir_name = ''

if (sys.argv[4] != ''):
    dir_name = sys.argv[4]
    prefix = dir_name + '_'

full_dir = 'tumblr_images'

if (dir_name != ''):
    full_dir = os.path.join(full_dir, dir_name)

os.makedirs(full_dir, exist_ok=True)

payload = {
    'api_key': api_key,
    'tag': tag,
    'before': ''
}

photo_urls = []

for i in range(num):
    r = requests.get(api_url, params=payload)
    r_json = r.json()

    for data in r_json['response']:
        if data['type'] != 'photo':
            continue
        for photo in data['photos']:
            photo_urls.append(photo['original_size']['url'])
    if(len(r_json['response']) == 0):
        continue

    payload['before'] = r_json['response'][len(r_json['response']) - 1]['timestamp']
    time.sleep(1)

image_idx = 0

for url in photo_urls:
    image_idx += 1
    extension = url[-3:]

    if extension != 'jpg' and extension != 'png':
        continue
    with open(full_dir + '/' + prefix + str(image_idx) + '.jpg', 'wb') as handler:
        response = requests.get(url)
        if not response.ok:
            continue
        handler.write(response.content)
    time.sleep(1)

これで Google Colaboratory を使って下記のセルを用意します。 Google ColaboratoryGoogle Chrome で使うものになります。

下記は Google Drive をマウントするセルです。

from google.colab import drive
drive.mount('/content/drive')

下記が Google Drivedeep/tumblr_image_get.py にある前提で下記のセルを用意。

#!drive/My\ Drive/deep; python tumblr_image_get.py tumlr_API_KEY "中条あやみ" 100 prefix

こんな感じだと思います。

で画像はこんな感じ。 f:id:mobile_hack:20200202013440j:plain f:id:mobile_hack:20200202013550j:plain f:id:mobile_hack:20200202013651j:plain f:id:mobile_hack:20200202014016j:plain f:id:mobile_hack:20200202013806j:plain