PythonとUnsplash APIを利用した猫の画像データセット作成入門

# はじめに
　こんにちは、Python初学者の皆さん。今日はPythonを使って(Jupyter notebook)、無料のAPIを使用して猫の画像データセットを作成する方法をご紹介します。この記事は初学者でも理解できるように、各ステップを詳しく説明します。さらに、必要なコードも提供し、それぞれの部分について詳しく解説します。

　まず、この記事で扱う「API」とは何か、理解しましょう。APIとはApplication Programming Interfaceの略で、異なるソフトウェア間で情報をやりとりするための仕組みです。特定のウェブサイトやサービスからデータを取得する際に、APIが非常に役立ちます。今回は、写真共有サービスのUnsplashから、猫の画像を取得するためのAPIを使用します。

　ただし、APIを利用する際には利用規約をよく読み、適切に利用することが重要です。特に、APIキーは個人情報と同様に扱い、他人に漏らさないように注意しましょう。また、取得したデータを商用利用する場合や大量にデータを取得する場合は、サービスの利用規約やAPIの利用制限をよく確認してください。

# PythonでAPIを使用して画像データセットを作成する 
## 必要なモジュールのインポート
　まずは必要なPythonのモジュールをインポートします。今回は`requests`, `os`, `urllib.request`の3つのモジュールを使用します。
```python
import requests
import os
import urllib.request
```
* `requests`: WebサイトなどのリソースにアクセスするためのPythonのライブラリです。今回は、APIにリクエストを送るために使用します。
* `os`: OSの機能を使うためのモジュールです。今回は、保存先のディレクトリを作るために使用します。
* `urllib.request`: URLを開き、その内容を扱うためのモジュールです。今回は、画像のURLから画像をダウンロードするために使用します。

## APIキーの指定
　次に、Unsplash APIを使用するためのAPIキーを指定します。自分のAPIキーを以下のように設定します。 
```python
api_key = '自分のキー'
```
　APIキーは **[Unsplashのウェブサイト](https://unsplash.com/ja)** から取得できます。取得方法がわからない場合は、 **[Digitalstage .inc 様 の creater blog](https://dsinside.digitalstage.jp/entry/2021/02/18/161756)** にわかりやすい解説が記載されているので、参考にしてみてください。APIキーは個人的なものであり、他人と共有しないように注意してください。

## 画像の取得
　以下に示す`fetch_images`関数は、指定したキーワードで画像を検索し、その結果から画像のURLを取得します。関数の引数は以下の通りです。

* `query`: 検索するキーワード
* `page`: 取得するページ番号（省略可能、デフォルトは1）
* `per_page`: 1ページあたりに取得する画像の数（省略可能、デフォルトは10）
```python
def fetch_images(query, page=1, per_page=10):
    url = f'https://api.unsplash.com/search/photos?query={query}&page={page}&per_page={per_page}'
    headers = {'Authorization': f'Client-ID {api_key}'}
    response = requests.get(url, headers=headers)
    data = response.json()
    image_urls = [item['urls']['small'] for item in data['results']]
    return image_urls
```
　この関数ではまず、検索クエリとページ番号、1ページあたりの画像数を使ってAPIのURLを作成します。次に、ヘッダーにAPIキーを指定します。このヘッダーはAPIにリクエストを送る際に必要となります。

`requests.get`関数を使ってAPIにリクエストを送り、その結果を取得します。取得した結果はJSON形式なので、`response.json()`を使ってPythonの辞書型に変換します。

　最後に、取得したデータから画像のURLを抽出し、それらをリストとして返します。このとき、各画像にはいくつかのサイズのバージョンがありますが、ここでは`small`サイズのURLを使用します。

## 画像の保存
　以下に示す`save_images`関数は、指定したURLの画像をダウンロードし、指定したディレクトリに保存します。関数の引数は以下の通りです。

* `urls`: 保存する画像のURLのリスト
* `save_dir`: 画像を保存するディレクトリのパス
```python
def save_images(urls, save_dir):
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)

    for i, url in enumerate(urls):
        response = urllib.request.urlopen(url)
        data = response.read()
        with open(os.path.join(save_dir, f'cat_img{i}.jpg'), mode="wb") as f:
            f.write(data)
```
　この関数ではまず、指定したディレクトリが存在しない場合は作成します。次に、URLのリストをループして各URLから画像をダウンロードします。

　ダウンロードした画像データはバイナリ形式なので、ファイルをバイナリ書き込みモード(`"wb"`)で開き、データを書き込みます。画像ファイルの名前は、リストのインデックス（`i`）を使って`cat_img0.jpg`, `cat_img1.jpg`, `cat_img2.jpg`...といった形で生成します。

## 画像の検索と保存の実行
　以上で必要な関数の定義が完了しました。最後にこれらの関数を使って、猫の画像を検索し、保存します。
```python
# 猫の画像を検索します。
image_urls = fetch_images('cat', page=1, per_page=10)

# 画像を保存します。
save_images(image_urls, 'cats')
```
　ここでは、`fetch_images`関数を使って猫の画像のURLを10件取得し、そのURLを`save_images`関数に渡して画像をダウンロードし、`cats`ディレクトリに保存します。

　以上が、Unsplash APIを利用して特定のキーワードの画像を検索し、ダウンロードするためのPythonコードです。

# まとめ
　この記事では、Pythonと無料のAPIを使用して猫の画像データセットを作成する方法を紹介しました。初学者でも理解できるように、必要なモジュールの説明から始め、APIキーの取得方法、画像の取得と保存方法について詳しく解説しました。

　APIを利用することで、簡単に大量のデータを取得することが可能ですが、利用規約や法的な注意点についても理解しておくことが重要です。

　これらの知識と技術を活用して、さまざまなデータを自由に取得し、Pythonのスキルをさらに深めていきましょう！

# 最後に
　最後まで記事を読んでいただきありがとうございます！
　この記事があなたのPythonの学習に少しでも役立ったら、"いいね"を押していただけると嬉しいです！これからも役立つ情報をお届けするので、ぜひフォローお願いいたします！。
　また、私が独学でPythonエンジニアになった方法を元に、1年間の独学ロードマップとスケジュールを下記に紹介していますので、どうぞご覧ください！
**[1年でPythonエンジニアになる！独学でスキルアップするためのロードマップとスケジュール](https://qiita.com/yutut/items/c55e7a9fcb514f624172)**