APIを初めて触ってみた！Pythonを使って湧き水APIを動かしてみる



## はじめに

私は今までAPIを触ったことがありませんでした。
今回は[湧き水API](https://tabi2api.docs.apiary.io/#)を動かしてみたので、その様子を紹介します。

## 開発環境

まず、今回使用した開発環境を紹介します：

- Windows 11 (AMD Ryzen 5 7530U with Radeon Graphics 2.00 GHz)
- Visual Studio Code 1.90.2
- Anaconda(仮想環境　Python3.11)

Pythonを動かす仮想環境として、Anacondaを使用しています。

## 環境構築

APIを使うための準備として、Anacondaを使ってPython3.11の動作する環境を作成します。
以下のステップで簡単に環境を構築できます：

1. Anacondaの仮想環境を確認
   ```
   conda info -e
   ```
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809434/397d703b-84f2-a156-dcc8-433c5bc3901b.png)


2. Python 3.11の環境を作成
   ```
   conda create -n py311 python=3.11
   ```
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809434/126548a8-f957-91b6-0ec3-061b8ee1a126.png)


3. 作成した環境を起動
   ```
   conda activate py311
   ```
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809434/e0a6dd72-5d03-9438-1c49-7db7b877af93.png)

   

4. Requestsをインストール
   ```
   pip install requests
   ```
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809434/f1d3f7dc-7858-a8c8-b55a-03dc7eaee4f5.png)


5. python-dotenvをインストール
   ```
   pip install python-dotenv
   ```
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809434/c65d4ae4-8be3-a820-1c69-8965c6f162ee.png)


これで、APIを試す準備が整いました！

## ソースコード

さて、いよいよ湧き水APIを使うためのコードを書いていきます。
こちらをコピペして使っていきます。
以下が完成したソースコードです：

### 「main.py」スクリプト

```python
import requests
import json
import os
from dotenv import load_dotenv

# .envファイルから環境変数を読み込む
load_dotenv()

def fetch_spring_water_list(pref, token):
    url = "https://app.livlog.xyz/webapi/v2/spring-water/list"
    
    params = {
        "pref": pref
    }
    
    headers = {
        "Authorization": f"Bearer {token}"
    }
    
    try:
        response = requests.get(url, params=params, headers=headers)
        
        if response.status_code == 200:
            data = response.json()
            
            # JSONデータをファイルに保存
            filename = f"spring_water_{pref}.json"
            with open(filename, 'w', encoding='utf-8') as f:
                json.dump(data, f, ensure_ascii=False, indent=4)
            print(f"JSONデータを {filename} に保存しました。")
            
            print("湧き水リスト:")
            for spring in data["results"]:
                print(f"名前: {spring['name']}")
                print(f"住所: {spring['address']}")
                print(f"概要: {spring['overview']}")
                print("---")
            
            print(f"合計 {len(data['results'])} 件の湧き水が見つかりました。")
        else:
            print(f"エラー: ステータスコード {response.status_code}")
            print(response.text)
    
    except requests.RequestException as e:
        print(f"リクエスト中にエラーが発生しました: {e}")

# 使用例
pref = "愛知県"
token = os.getenv("API_KEY")  # .envファイルからAPIキーを読み込む
fetch_spring_water_list(pref, token)
```

### 「.env」スクリプト

```
API_KEY=<ここに取得したAPIキーを入力します>
```

APIキーは湧き水検索の取得一覧から取得します。
![APIキー取得画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809434/a594c98d-0fa7-e694-87b4-0e0858630d43.png)

## コードの説明

このコードでは、以下のようなことを行っています：

1. 必要なライブラリをインポート
2. 環境変数（.envスクリプト）からAPIキーを読み込む
3. 湧き水リストを取得する関数を定義
4. APIにリクエストを送信
5. 取得したデータをJSONファイルに保存
6. 湧き水の情報を表示

使用例のpref="愛知県"の部分を書き換えることで、他の県の情報も調べることができます。

## 実行結果
湧き水APIから、愛知県の湧き水情報一覧を獲得することができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809434/c4348714-ea20-a56e-9204-a38aba86ca1b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809434/206de637-8ef7-9b67-b0ea-6fd7c24b147d.png)


取得したJsonファイル
![実行結果画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809434/ee9c6194-d103-781b-897b-65392bcdf258.png)

コードの一部を転記

```json
{
    "metadata": {
        "title": "Success",
        "detail": "OK",
        "status": 200
    },
    "_links": {
        "self": {
            "href": "/v2/spring-water/list"
        }
    },
    "results": [
        {
            "createDate": "2024-02-25T10:05:00.000+00:00",
            "createCd": "admin",
            "updateDate": "2024-02-25T10:05:00.000+00:00",
            "updateCd": "admin",
            "id": 1828,
            "name": "金明水",
            "furigana": "きんめいすい",
            "oldAddress": "愛知県名古屋市千種区天白町 金明水",
            "overview": "東山動植物園の東南の斜面から湧出しており、近傍には小さな祠が作られています。",
            "access": "◎",
            "activity": "市民モニターによる実態調査",
            "address": "愛知県名古屋市名東区藤巻町１丁目",
            "latitude": 35.1507491,
            "longitude": 136.9848604,
            "link": "https://www.env.go.jp/water/yusui/result/sub4-2/map/23100-1.jpg"
        },
        // ~~~~~~~~~~~~~~~~~~~~~~~~~~
        // 一部省略しています。
        // ~~~~~~~~~~~~~~~~~~~~~~~~~~
        {
            "createDate": "2024-02-25T10:05:00.000+00:00",
            "createCd": "admin",
            "updateDate": "2024-02-25T10:05:00.000+00:00",
            "updateCd": "admin",
            "id": 1861,
            "name": "恋の水神社",
            "furigana": "こいのみずじんじゃ",
            "oldAddress": "愛知県美浜町知多郡大字奥田字中白沢92-91 恋の水神社",
            "overview": "歴史的由緒ある泉を「恋の水」として奉り、拝殿・祠等と共に「恋の水神社」として管理保全されている。",
            "access": "◎",
            "activity": "観光地として神社の社守により、付近の清掃等が行われている。",
            "address": "愛知県知多郡美浜町大字奥田字中白沢９２－９１",
            "latitude": 34.7868012,
            "longitude": 136.8793983,
            "link": ""
        }
    ],
    "errors": null
}
```

## まとめ

AnacondaとPython、そしてVisual Studio Codeを使えば、意外と簡単にAPIを叩くことができました。最初は不安でしたが、実際にやってみると楽しく、新しい発見がたくさんありました。

APIを使うことで、様々なデータや機能を自分のプログラムに組み込むことができます。今回は湧き水のデータでしたが、他にも面白いAPIがたくさんあるので、ぜひ探してみてください！

## 参考文献

- [Anaconda](https://www.anaconda.com/)
- [湧き水API](https://tabi2api.docs.apiary.io/#)
- Qiita記事　[湧き水APIをPythonでたたいてみた！](https://qiita.com/kkawano_neko/items/4d42dce349241e3de1c5)

APIの世界は奥が深く、まだまだ探求の余地がありそうです。
みなさんも、APIを使って新しいことにチャレンジしてみてください！