【FileMaker】Pokemonの統計情報をゲットだぜ

なんてことはない、curlでPokemonゲット、という話です。

なんでFileMakerでPokemonゲットしたくなったか

Rakuten Rapid APIをさまよってたら、偶然Pokemon GoのAPIにたどり着き、コードスニペットとかみたら単純だし、やってみようかな、と思った次第です。

したら、簡単すぎておったまげ。
(「おったまげ」って、商標登録されてましたっけ?してたら修正しないと)

あと、ポケモン好きな息子に褒めてもらえるかな、と思ったりして。

FileMakerバージョン

今回は、curlとJSONを使っていますので、FileMaker 16以上で実装できます。

Rakuten Rapid APIの準備

まずは、アカウントを作ってログインしておけば、大抵のことはできます。
無料・有料にかかわらず、便利なAPIが山のように埋まっているので、溺れないように注意です。
あとは、”pokemon”と検索窓で検索すれば、Pokemon Go APIページに辿り着けます。
というか、この記事を書いている現在、1個しかヒットしません。
貴重です。

しかも、無料です。
ステキです。

アカウントを取得する

Rakuten Rapid APIにアカウントを作ると、自分のAPIキーが割り振られます。

どこぞのAPIのように、「APIキーなくしたらあかんから、どっかにメモっといて」というのもありません。
自分の使いたいAPIのページに行くと、すでに自分のAPIキーが表示され、テスト実行がすぐにできます。
その他、開発者ボードページで、アカウント情報の確認やAPIキーの管理ができます。

「なくしたらあかんから、、、」は不要と言いながら、スクリプトから実行するときはAPIキーは必要なので、複数のAPIを使用する場合は、グローバールフィールドなどに保存しておいた方が使い勝手がいいです。

どのPokemon情報を取得するか

今回は、Pokemon Stats(統計情報)を取得します。
単に、エンドポイントページの最初にあったから、、、

残念ながらPokemonの画像はゲットできませんので、どこかしらAPIを提供しているところがあると嬉しいです。

FileMakerの実装

テーブル設計

まずは、Pokemon Go APIに接続してゲットした際のフィールドを持っておきます。
フィールドにせず、変数でも問題ないので、変数で事足りる場合は、フィールドを作らなくても問題ないです。
あとは、ポケモンの統計情報を保存するテーブルを作ります。
一つのポケモンに対して、formがいくつかあるので、formに関しては子テーブルとして設計します。
スクリーンショット 2020-12-02 18.25.22.png
それぞれのフィールド設計は、以下のような感じです。

テーブル:PokemonJson

(なくてもいい)
スクリーンショット 2020-12-02 18.25.39.png

テーブル:Pokemon

スクリーンショット 2020-12-02 18.25.45.png

テーブル:Pokemons

スクリーンショット 2020-12-02 18.25.50.png

レイアウト設計

Pokemon Go APIを実行するレイアウト:PokemonJSON
ゲットしたPokemonを表示するレイアウト:Pokemon
wk〜となっているレイアウトは、スクリプトの中からゲットしたPokemonを登録する作業用レイアウトで、フィールドを一切配置していません。
件数が多いので、レイアウトにフィールドなどがあった場合、表示処理時間がめっちゃかかってしまうための対策です。
スクリーンショット 2020-12-02 18.26.40.png

レイアウト:PokemonJSON

スクリプトを実行するボタンを配置しています。
単にテストをするだけなら、このレイアウトも要りません。
スクリーンショット 2020-12-02 18.26.17.png

テーブル:Pokemon

ゲットしたPokemonを表示します。
今回は1画面で複数のformも表示できるようにしています。
スクリーンショット 2020-12-02 18.26.58.png

スクリプト

一つのスクリプトにまとめてもいいのですが、別の使い回しとかあるかな、と思って以下のように分けています。
ボタン貼り付け用:mainPokemon
Pokemon統計情報ゲット:getPokemonStats
ゲットした情報を保存:setPokemon

スクリプト:mainPokemon

処理の最後に、作業用レイアウトからPokemonレイアウトに移動しておきます。
スクリーンショット 2020-12-02 18.27.22.png

スクリプト:getPokemonStats

APIのエンドポイントに接続します。
エンドポイント:https://pokemon-go1.p.rapidapi.com/pokemon_stats.json
スクリーンショット 2020-12-02 18.27.45.png

curlオプションのヘッダーは、スニペットにあるものをcurl用に編集して使います。
" -H "x-rapidapi-host : pokemon-go1.p.rapidapi.com"" &
" -H "x-rapidapi-key : <APIキー>""

スクリーンショット 2020-12-02 18.51.53.png

スクリプト:setPokemon

お決まりのように、取得したJSONをグルグルLOOPで回してセットします。
配列構造もネストが無く単純なので、とても扱いやすいです。
ただ、件数はJSONで返されないので、ListKeyで判断します。
スクリーンショット 2020-12-02 19.00.49.png

シンプル。。。

Simple is best.を地で行くようなAPIで、なんていい子なんでしょう。
ただ、全て英語で返されるので、ポケモン名はどこかで日本語を提供しているところにAPIで繋がれれば日本人としてはベストですかね。
英語でも問題ないけど。

Pokemon Go APIには、統計情報の他にも様々なPokemon Go情報を辞書的に取得できるので、自分専用のPokemon Go辞典を作成するのもいいかと思います。