Contents
Unsplash APIの準備とAPIキーの取得方法
Unsplash APIをPythonで利用するためには、まず開発者アカウントの登録とAPIキーの取得が不可欠です。このセクションでは、アプリケーション登録の手順やAPIキーの管理方法について詳しく解説します。
Unsplash APIは商用利用に際して明確なライセンス規約を遵守する必要があります。無料トライアル制度とは異なり、すべての利用形態において「利用規約」を事前に確認することを強く推奨いたします。以下に具体的な手順を示します:
- Unsplashの開発者アカウントに登録
- アプリケーション名・リダイレクトURL(
http://localhostなど)を入力し作成 - 生成されたAPIキー(Access Key)を控え、環境変数や
.envファイルで管理
| 管理方法 | 優点 | 注意点 |
|---|---|---|
| 環境変数 | ソースコードから分離できる | 複数人での開発時にも適切に共有する必要あり |
| .envファイル | プロジェクト内に集中管理可能 | .gitignoreで外部流出を防ぐ |
注意: APIキーは公開しないようにし、本番環境では暗号化やローテーション対策を検討してください。
PythonでOAuth2.0認証を行う手順
Unsplash APIにはOAuth2.0認証が必須です。このセクションでは、requests_oauthlibライブラリを使ってアクセストークンを取得するフローを解説します。
Python初心者でも導入しやすいrequests_oauthlibは、OAuthの流れを簡潔に実装できます。認証プロセスには「クライアントID」と「クライアントシークレット」が必須です(アプリケーション登録時に発行されます)。以下にコード例を示します:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
from requests_oauthlib import OAuth2Session unsplash = OAuth2Session(client_id="YOUR_CLIENT_ID", redirect_uri="http://localhost") authorization_url, state = unsplash.authorization_url("https://unsplash.com/oauth/authorize") # ブラウザで認証URLを開き、コードを取得 code = input("Enter the code: ") token = unsplash.fetch_token( "https://unsplash.com/oauth/token", client_secret="YOUR_CLIENT_SECRET", code=code, include_client_id=True ) |
このようにして得たアクセストークンは、有効期限(通常1時間)が存在するため、定期的に再取得が必要です。トークンの保存にはセキュリティに配慮した方法を採用しましょう。
注意: クライアントシークレットをコード内にハードコーディングしないでください。環境変数やシークレット管理ツールを使用してください。
OAuth2.0フローではstateパラメータの処理が重要です。これはCSRF攻撃対策として、リダイレクト先での認証コードと一致するかを検証するために使用されます。また、認証後にセッション管理やトークンの暗号化も検討が必要です。
画像検索APIの活用とダウンロードコード
Unsplash APIのsearch endpointは、キーワードから画像リストを取得するための核心機能です。ここでは、検索結果のJSON構造解析や、画像URLからファイル保存処理の例を紹介します。
検索キーワードによる画像リスト取得
以下に、指定されたキーワード(例:sunset)で画像を検索するコードを示します:
|
1 2 3 4 5 6 7 8 9 |
import requests headers = {"Authorization": "Client-ID YOUR_ACCESS_KEY"} response = requests.get("https://api.unsplash.com/search/photos", params={"query": "sunset"}, headers=headers) data = response.json() for item in data["results"]: print(f"URL: {item['urls']['regular']}, 作者: {item['user']['name']}") |
JSONレスポンスには、画像のURLやライセンス情報(item['links']['download_location'])が含まれます。
高解像度画像のダウンロード処理
取得した画像を保存する場合、requests.get()でURLからバイナリデータを取得し、ファイルに書き込みます:
|
1 2 3 4 5 6 7 |
import os url = "https://images.unsplash.com/photo-1234567890" response = requests.get(url) with open("downloaded_image.jpg", "wb") as f: f.write(response.content) |
このコードでは、画像のURLを指定してローカルに保存します。複数の画像を処理する際は、ループ内でファイル名を一意化(例:UUID付与)する必要があります。
注意: ダウンロードURLを使用する際には、ライセンス許諾が必須です。Unsplashの利用規約を確認し、商用利用可否を明確に理解してください。
API利用時のエラーハンドリングとトラブルシューティング
Unsplash APIでは、認証失敗やレートリミット超過などのエラーが発生することがあります。ここでは、Pythonでこれらを捕捉・処理する方法を解説します。
典型的なエラーケースと対応策
| エラー種別 | 対処法 |
|---|---|
| 認証失敗(401) | APIキーが正しいか、有効期限を確認 |
| レートリミット超過(429) | 一定時間待機後、再実行(time.sleep()使用) |
| ネットワークエラー | 再トライロジックを組み込む(try-exceptで処理) |
Pythonコードでの例外処理例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import time try: response = requests.get(url, headers=headers) response.raise_for_status() # HTTPステータス異常時エラー送出 except requests.exceptions.HTTPError as e: if response.status_code == 429: print("レートリミットに達しました。10秒待機します") time.sleep(10) else: print(f"HTTPエラー: {e}") except Exception as e: print(f"予期せぬエラー: {e}") |
このように、例外を捕獲し、適切なロジックで再実行やエラーロギングを行うことで、スクリプトの信頼性が向上します。
注意: レートリミットに達した場合、
time.sleep()だけでなく、非同期処理による分散リクエストも検討してください。
Unsplash API利用時のベストプラクティスと制限
Unsplash APIは月間10,000リクエスト(無料枠)に制限があるため、実務では以下の点を意識する必要があります:
- 検索キーワードの最適化:人気画像が返されるキーワードを選定
- キャッシュ活用:同じキーワードで複数回アクセスする場合に、既存データを使用
- 非同期処理:大量リクエスト時は
concurrent.futures.ThreadPoolExecutorなどで分散
また、高解像度画像をダウンロードする際は、画像のサイズとファイル形式(PNG/WEBPなど)に応じた処理も検討が必要です。
注意: 商用利用にはライセンス確認が必要です。Unsplashの利用規約を必ず確認してください。
Unsplash開発者アカウントを登録して実際にAPIをテストしよう
本記事で紹介した内容をすぐに試すためには、以下の手順で環境構築を行ってください:
- Unsplashの開発者アカウントに登録
requests_oauthlibとrequestsライブラリをインストール(pip install requests-oauthlib)- 本文で紹介したコードをベースに、自身のAPIキーを反映
無料トライアル制度ではありませんが、すべての利用形態において「利用規約」を確認することが必須です。また、商用目的では画像ライセンスの明確な確認が不可欠です。
装飾と情報整理ルール:
- 各 H2 セクションには以下のうち最低 1 つ以上を必ず含めること:
- 比較表 (Markdown table)
- 箇条書きリスト (3 項目以上)
- 番号付きリスト (手順説明時)
- 配置場所 (H2 直下 / H3 サブセクション内 など) は内容に応じて最適と判断した場所に置く
- 比較・分類・スペック整理が可能な内容は積極的にテーブル化する (
| 項目 | 値 | 補足 |形式) - 手順・段階的な説明は番号付きリスト (1. 2. 3.) を使う
- 並列の項目・特徴・条件は箇条書き (
- 〜) を使う - 重要な数値・キーワード・項目名は 太字 で強調する (例:
**38%**、**項目名**:説明) - 重要なポイントや注意事項・出典は
> blockquoteで目立たせる - 各 H2 セクションの末尾には
---(水平線) を入れて視覚区切りする
見出し直後の導入文ルール (必ず守る):
- H2 / H3 見出しの直後に、いきなり箇条書き・番号リスト・表・サブ見出しを置かないこと
- 各 H2 セクションの冒頭には必ず 2〜3 文 (80〜200 字程度) の導入段落を書くこと
- 導入段落では「このセクションで扱う内容」「なぜ読者にとって重要か」「結論の方向性」を簡潔に提示する
- 各 H3 セクションの冒頭にも、最低 1 文の短い導入文 (リストや表の趣旨を説明する 30〜80 字程度) を書くこと
- 悪い例(H2で導入なくいきなりリスト):
## mixiイベントを実務で使うときの要点- イベント情報の主要項目を確認してください。
- RSVPとチケット購入は別扱いです。
-
良い例(H2に導入段落あり):
## mixiイベントを実務で使うときの要点
mixiイベントを実務で使う際は、情報の信頼性とユーザー体験の両面で押さえるべき要点があります。特に複数の主催者が混在するイベントでは、公式情報と外部情報の使い分けが重要です。以下の項目を確認してください。- イベント情報の主要項目を確認してください。
- RSVPとチケット購入は別扱いです。
- 悪い例(H3で導入なくいきなりリスト):
主要項目の確認方法
- イベント名
- 開催日時
- 主催者
- 良い例(H3に短い導入文あり):
主要項目の確認方法
イベントページで以下の項目を順に確認してください。
- イベント名
- 開催日時
- 主催者
Markdown テーブル構文ルール (必ず守る):
- テーブルの直前と直後に必ず空行を 1 行入れる (空行が無いとパーサが表として認識しない)
- 各行は
|で始めて|で終わる (例:| A | B | C |) - ヘッダ行の直下に区切り行
|---|---|---|を必ず入れる (各列にハイフン 3 文字以上) - 全行で列数 (パイプ
|の数) を必ず統一する (3 列なら全行 3 列) - セル内で改行禁止 (改行が必要なら
<br>を使うか、別のセルに分ける) - セルが空の場合も
| |で空セルを明示し、列数を保つ
正しいテーブル例:
|
1 2 3 4 5 6 7 8 9 10 |
ここは表の前の説明文です。 | 項目 | 値 | 補足 | |------|----|------| | **速度** | 30 tok/s | RTX 5090 基準 | | **VRAM** | 17 GB | Q6_K 量子化時 | | **コスト** | 無料 | ローカル運用 | ここは表の後の説明文です。 |
Markdown 箇条書き / 番号付きリストの構文ルール:
- リスト全体の直前と直後に必ず空行を 1 行入れる
- 箇条書きは
-(ハイフン + スペース)、番号付きは1.(数字 + ピリオド + スペース) - ネストする場合は半角スペース 2 個でインデント
- リスト項目間に空行を入れない (連続行で書く)