Google の「Custom Search API」と「カスタム検索エンジン」で画像をダウンロードする

Amazon SageMaker で使用する画像を集めるためにGoogleの「Custom Search API」とカスタム検索エンジンを使ってみる

## Custom Search API と カスタム検索エンジン(CSE)について
Custom Search API は Google の検索結果を API で取得できるもの。
1日あたり100件の検索クエリを無料で、追加のリクエストは1000クエリあたり5ドル。(2018/10/25現在)
Custom Search API を使うには、カスタム検索エンジンが必須となる。
カスタム検索エンジンはサイト内検索が出来るやつで無料です。

Custom Search API は1日あたり100件の検索クエリが無料で、1クエリで得られる検索結果は10件なので、
100クエリ * 10件で1,000件の結果が得られる。
画像ダウンロードはダウンロード出来ない画像もあって、1日700〜800枚くらいしかダウンロード出来ないっぽい。

### 1. Google Developers Console にアクセス
Google にアカウントを作って [Google Cloud Console のAPIとサービス](https://console.cloud.google.com/apis/dashboard) にアクセスする。

### 2. API とサービスの有効化にする
API とサービスの有効化 をクリックする。
![APIサービス有効化.png](https://qiita-image-store.s3.amazonaws.com/0/128902/f5a48dbc-cb53-8222-abb5-878dfaf9fbd4.png)

### 3. Custom Search API を検索する
新しい API ライブラリ画面になるので「custom search」で検索して「Custom Search API」をクリックする。
![APIライブラリ検索.png](https://qiita-image-store.s3.amazonaws.com/0/128902/b91b57ff-f0e4-62b8-6315-e746063cfb10.png)

### 4. Custom Search API を有効化する
「Custom Search API」を有効にする。
![API有効化.png](https://qiita-image-store.s3.amazonaws.com/0/128902/65760ae7-eb1f-3f7c-2bcb-959f86a42589.png)

### 5. プロジェクトを作成する
API を有効にするとプロジェクトが1個も無ければプロジェクト作成を促される（多分）ので作成ボタンをクリックする。
![APIサービス有効化後.png](https://qiita-image-store.s3.amazonaws.com/0/128902/3d9b6578-78c5-d896-1a4f-222a6fa918c3.png)

適当なプロジェクト名を入力して、プロジェクトを作成する。
![新しいプロジェクト作成.png](https://qiita-image-store.s3.amazonaws.com/0/128902/88145319-8c8d-7dca-ac3e-249a241ee288.png)

### 6. APIキーを取得する
メニューの認証情報から認証情報を作成のプルダウンでAPIキーをクリックする。
![APIキー発行.png](https://qiita-image-store.s3.amazonaws.com/0/128902/3df9edcc-0ad1-faf2-8f0e-8fbce7c2ab6c.png)

APIキーを作成しましたのダイアログが出るので、キーを制限をクリックする。
![APIキー発行完了.png](https://qiita-image-store.s3.amazonaws.com/0/128902/7a72ea86-62cd-7af7-f635-bfd5024148a2.png)

キーに名前を付けて保存する。APIキーをプログラムで使用するのでメモっておく。
![APIキーを制限.png](https://qiita-image-store.s3.amazonaws.com/0/128902/430dcf87-6012-2605-eec4-2ffbd2ef2c61.png)

### 7. カスタム検索エンジンを作成する
[Google カスタム検索エンジンのサイト](https://cse.google.com/cse/)にアクセスするして Add をクリックする。
![CSE追加.png](https://qiita-image-store.s3.amazonaws.com/0/128902/01890735-d44e-dfbf-1c51-6f351f6182ee.png)

検索するサイトに「https://www.google.co.jp/ 」 を入力、検索エンジンの名前を適当に入力して作成をクリックする。
![CSE設定.png](https://qiita-image-store.s3.amazonaws.com/0/128902/71de7d42-f529-b3ee-d4ab-6d7a969b9773.png)

### 8. カスタム検索エンジン設定を更新する
メニューの検索エンジンの編集の設定から、画像検索をオン、検索するサイトの google を削除、ウェブ全体を検索をオンにする。
検索エンジンIDをプログラムで使用するのでメモっておく。
![CSE設定更新.png](https://qiita-image-store.s3.amazonaws.com/0/128902/611a8a61-82ff-8a09-84ed-0a5a0b265b2e.png)

### 9. Python の実行環境を作成する
AmazonLinux2 上に Python3 をインストールする。

```
$ sudo amazon-linux-extras install python3
$ sudo pip3 install --upgrade pip
$ sudo yum install -y  gcc gcc-c++ python3-devel
```

必要となる python モジュールを vendor ディレクトリにインストール

```
$ pip3 install google-api-python-client -t ./vendor
$ pip3 install httplib2 -t ./vendor
```

### 10. Python スクリプトを用意する

[Googleの画像検索APIを使って画像を大量に収集する](https://qiita.com/ysdyt/items/02a9e6b4e70f26385abc) から拝借しました。
google_api.py の httplib2 の import を vendor ディレクトリからに修正。
sha3 でエラーが出てコメントアウトしたらいけました。
「API_KEY」にCustom Search API のAPIキーを入力、「CUSTOM_SEARCH_ENGINE」にカスタム検索エンジンの検索エンジンIDを入力する。

```
import sys
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'vendor'))
import httplib2
#import sha3
・
・
・
if __name__ == '__main__':
    # -------------- Parameter and Path Settings -------------- #
    API_KEY = 'xxxxxxxxxxxxx'
    CUSTOM_SEARCH_ENGINE = 'xxxxxxxxxxxxxxx'
```

### 11. Python を実行する
スクリプトを実行すると「save_dir_path」に指定したディレクトリの「imgs/」に画像が保存される。

```
$ python3 google_api.py
```