Contents
Unsplash APIとは?
Unsplash APIは、高品質なフリー画像をプログラムで取得できるWebサービスです。データセット作成やプロジェクトの素材収集に利用可能なこのAPIは、Pythonなどプログラミング言語を通して簡単に活用できます。公式サイトでは「Unsplash API」と検索することでアクセス可能で、画像の検索・ダウンロードが可能です。以下では、具体的な使い方と注意点を解説します。
APIキーの取得方法
Unsplash APIを利用するためにまず必要なのはAPIキーです。以下に取得手順をステップ形式で説明します。
- https://unsplash.com/developers にアクセスし、「Get an API key」を選択
- ユーザー登録(またはログイン)後、アプリケーションの作成画面へ移動
- アプリ名を入力し「Create Application」をクリック
- 生成されたClient IDとClient Secretをメモしておきましょう
注意: 無料枠では月に100回程度のAPI呼び出しが可能です。ただし、この制限はアプリケーションごとに適用されるため、複数アプリを作成する場合は別々にカウントされます。商用利用や高頻度アクセスの場合は、有料プランへの切り替えが必須です。
Python環境でのOAuth2.0認証設定
Unsplash APIはOAuth2.0認証でアクセス権を取得します。Pythonにおいては requests と oauthlib ライブラリを使用することで実装可能です。以下に手順を説明します。
必要なライブラリのインストール
以下コマンドで必要なパッケージをインストールしてください。
|
1 2 |
pip install requests oauthlib |
認証トークンの発行フロー
認証には2ステップが必要です。クライアントIDとシークレットを使用し、アクセストークンを取得します。
- 認証URLにPOSTリクエスト送信
|
1 2 3 4 5 6 7 |
from requests_oauthlib import OAuth2Session unsplash = OAuth2Session('YOUR_CLIENT_ID') token_url = 'https://unsplash.com/oauth/token' token = unsplash.fetch_token(token_url, client_secret='YOUR_CLIENT_SECRET', include_client_id=True) |
セキュリティ注意:
client_secretの値は絶対に第三者に漏らさないでください。本番環境ではシークレットをハードコーディングせず、環境変数や秘密管理サービスを使用する必要があります。
- アクセストークンを使用したAPIリクエスト
|
1 2 3 |
response = unsplash.get('https://api.unsplash.com/photos') print(response.json()) |
画像検索APIのパラメータ設定
Unsplash APIでは、検索キーワードやページネーションを指定できます。以下に具体的な使い方を解説します。
検索キーワード指定
query パラメータで検索キーワードを指定可能です。例えば「cat」で猫の画像が取得されます。
|
1 2 3 |
response = unsplash.get('https://api.unsplash.com/search/photos', params={'query': 'cat'}) |
ページネーション処理
大量の画像を扱う際は、pageパラメータでページ指定が可能です。1ページあたり50件のデフォルト表示になります。
| パラメータ | 説明 |
|---|---|
query |
検索キーワード(例:cat) |
page |
表示ページ(例:2) |
per_page |
結果件数(最大100) |
重複画像防止策
Reddit投稿で指摘された「同じ画像が繰り返し表示される」課題に対応するには、URL管理による判定やハッシュ値比較が有効です。
URL管理による判定
取得した画像のURLを保存して重複チェックします。以下はシンプルな実装例です。
|
1 2 3 4 5 6 7 |
saved_urls = set() for item in response.json()['results']: url = item['urls']['full'] if url not in saved_urls: saved_urls.add(url) # ダウンロード処理 |
補足: 画像のURLが同一なら、内容も同じである可能性が高いです。ただし、URLの変更(サイズ指定など)で同じ画像が別々に取得されるケースもあり得るため、完全な重複防止にはハッシュ値比較を併用することを推奨します。
画像ダウンロード用コードサンプル
取得した画像データをファイルに保存するためのPythonコード例です。エラーハンドリングも含めて記載します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import os def download_image(url, save_dir='images'): if not os.path.exists(save_dir): os.makedirs(save_dir) try: response = unsplash.get(url) filename = url.split("/")[-1] with open(os.path.join(save_dir, filename), 'wb') as f: f.write(response.content) print(f"✅ {filename} 保存完了") except Exception as e: print(f"❌ ダウンロード失敗: {e}") # 実行例(検索キーワードを指定) response = unsplash.get('https://api.unsplash.com/search/photos', params={'query': 'sunset', 'page': 1}) for item in response.json()['results']: download_image(item['urls']['full']) |
注意: 実際に使用する際は
YOUR_CLIENT_IDとYOUR_CLIENT_SECRETを自身のAPIキーに変更してください。
GitHub Gistでの即時実験
以下に、上記コードを整理したGitHub Gistのリンクを掲載します。コピーして自分の環境で実行してみてください。
|
1 2 |
[GitHub Gist: Unsplash API画像取得サンプルコード](https://gist.github.com/your-username/your-gist-id) |
補足: 本記事で使用しているGistリンクは例です。実際のコードをGistにアップロードし、URLを変更してください。
注意事項と追加情報
無料枠の制限条件
- 月間リクエスト数: 100回(アプリケーションごとにカウント)
- リクエストが多すぎる場合、API側から
429 Too Many Requestsエラーが返される - 商用利用や大量アクセスが必要な場合は、Unsplashの有料プランをご検討ください
安全な認証実装のポイント
client_secretをコードに直接記述しない(環境変数や秘密管理サービスを使用)- アクセストークンは短時間有効で、必要最低限のスコープを持つように設定
- 不正アクセスを防ぐため、リフレッシュトークンを安全に保存
技術的制約について
- URLベースの重複チェックは、画像サイズ変更などでURLが異なる場合に失敗する可能性がある
- 完全な重複防止には、画像データ本体のハッシュ値比較(例: SHA256)を併用することを推奨
その他の実装例
- ダウンロードした画像をAWS S3やCloud Storageにアップロードする場合のコードサンプル
- 並列処理による効率的な画像取得(
concurrent.futuresやasyncioの利用)