目的
機械学習に使うために、ランダムな画像をたくさん集めたかったのが始まりです。
概要
imgurの画像、大体圧縮リンクがhttps://i.imgur.com/XXXXX[.jpg | .png]になってるようです。
じゃああとはお分かりですね。5文字のランダムな英数字(大文字・小文字・数字)からなる文字列を作成し、画像を取得すればいいだけです。
数回に1回はremoved.pngにリダイレクトされてしまうので、そうなったらやり直しです。
実装
# 再帰による実装
def get_imgur_url(length: int, start: str = None) -> str:
if length <= 0: # エラー処理
return ''
buffer = random.choice(string.ascii_letters + string.digits)
buffer = start + buffer if start else buffer
if length <= 1: # 再帰の末尾
return 'https://i.imgur.com/' + buffer + random.choice(['.png', '.jpg'])
return get_imgur_url(length-1, buffer)
# これも再帰
def get_imgur_random(count: int):
if count <= 0:
# 再帰の末尾
return
url = get_imgur_url(5)
ext = url.split('.')[-1].rstrip('/') # 拡張子
resp = requests.get(url) # 画像の取得
if resp.history: # historyが存在すればリダイレクトされてるってこと
return get_imgur_random(count)
binary = resp.content
resp.close()
with open(f'./imgur_images/{uuid.uuid4()}.{ext}', 'wb') as f:
f.write(binary)
return get_imgur_random(count - 1) # 再帰
if __name__ == '__main__':
get_imgur_random(10)