外部のAPI（駅すぱあと）を使って駅名から県名を検索してみた

すっかり寒くなりましたね。
私は、2022 FIFAワールドカップの興奮がいまだに冷めずHOTな状態です。
メッシ最高！！

さてさて、それでは本題に入りましょう！
今回は無料で利用できる乗り換え案内webサービス「駅すぱあと」のAPIを利用して、入力された駅名から県名を自動で設定するカスタマイズを実装してみました！


## サンプルフォーム
| パーツID | パーツタイプ | 補足 |
| :--- | :--- | :--- |
| fidStation    | テキスト（一行）パーツ | 駅名     |
| fidPrefecture      | テキスト（一行）パーツ | 県名     |

## カスタマイズコード
参考記事：[コラボフロー JavaScript API を利用する](https://collaboflow.zendesk.com/hc/ja/sections/360000040276-)


```javascript
(function () {
  "use strict";

  // 駅名の変更イベント
  collaboflow.events.on(
    "request.input.fidStation.change",
    function (eventData) {
      // 駅名を格納;
      const station = eventData.parts.fidStation.value;
      const headers = {};
      const parseType = "json";
      // 指定された駅名からその駅の県名を取得する
      // 駅名取得
      //api.ekispert.jp/v1/json/station/light?key=
      const apiKey = "*****ここに取得したAPIキーを指定する*****";
      const stationName = "&name=" + station;
      const url =
        "http://api.ekispert.jp/v1/json/station/light?key=" +
        apiKey +
        stationName;

      return collaboflow.proxy
        .get(url, headers, parseType)
        .then(function (response) {
          if (response.status !== 200) {
            throw Error(response);
          }
          const responseData = response.body;
          const serchResults = responseData.ResultSet.Point;
          // 取得した県名の値を設定
          if (!serchResults.length) {
            eventData.parts["fidPrefecture"].value =
              serchResults.Prefecture.Name;
            return;
          }
          const stationNames = serchResults.filter(
            (resust) => station === resust.Station.Name
          );
          if (stationNames.length !== 1) {
            alert("同名の駅が複数存在しています。");
            return;
          }
          eventData.parts["fidPrefecture"].value = stationNames[0].Prefecture.Name;
        })
        .catch(function (error) {
          console.error(error);
          alert("駅名の検索に失敗しました。");
          return false;
        });
    }
  );
})();
```


## 事前準備

- [駅すぱあとAPI  ](https://ekiworld.net/service/sier/webservice/free_provision.html?doing_wp_cron=1670806238.9237689971923828125000) にてアカウント登録し、APIキーを取得します。

### 駅すぱあとAPIについて

- 本サンプルの駅名での県名検索は、[駅すぱあとAPI ](https://ekiworld.net/service/sier/webservice/free_provision.html?doing_wp_cron=1670806238.9237689971923828125000) を利用しています。

- APIキーを取得するには、駅すぱあとAPI のアカウント登録が必要です。
- 利用規約は、駅すぱあとAPIの [お申し込みページ ](https://ekiworld.net/free_provision/index.php)から確認する事が出来ます。

## 動作の確認手順
1. サンプルのカスタマイズコードをjsファイルに保存します。
1. 保存したjsファイルを任意のエディターで表示します。

1. 事前準備にて取得したAPIキーを、`「*****ここに取得したAPIキーを指定する*****」`に指定して保存します。 

1. アプリ設定＞フォーム設定から新規に通常フォームを作成します。
参考記事：[通常フォームを作成する](https://collaboflow.zendesk.com/hc/ja/articles/360000382616-)

1. サンプルフォームに、先で記載されている必要項目を配置します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2960875/a98fc95b-1440-59b5-5110-30f37cb36b7d.png)




1. サンプルフォームを再度表示し、カスタマイズのタブを表示します。
1. 保存したファイルをアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2960875/dd04f083-af64-10bb-7e93-9d7e06d4a15f.png)
1. アプリ設定＞経路設定から新規に経路を作成します。
参考記事：[経路の作成・編集](https://collaboflow.zendesk.com/hc/ja/articles/360001481636-)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2960875/62dadbf5-f4e4-508a-adf4-edb143fbb329.png)
1. 新規文書から作成した経路名をクリックします。
1. 申請画面が表示されます。
1. 任意に駅名を指定します。
1. 指定した駅名から指定した駅の県名が検索され、設定されます。
![APIテスト.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2960875/8cfc1277-c790-2279-9ed8-dece5fb52f02.gif)


## まとめ
出来たーーー！！
駅名からその駅の県名を取得するカスタマイズを簡単に実装する事が出来ました。
様々なwebサービスに応用できると思うので、参考にして下さい！

明日は @nagiii  さんの記事です！！
お楽しみに！！！