(BluePrism)ポケモン図鑑を作る ~Part4 Web API処理の実装編~
※2020/06/27修正
どうも、おむおむです。
仕事で使ってるPCと私用のPCとで
CtrlとFnが逆なので非常にもやもやしています( ゚Д゚)
さて、前回はBlue Prism内の
Web API機能の概要について紹介しました。
newgraduate19-rpa.hatenablog.com
今回は、この機能を使用して
実際にPoke APIからデータを抜いてくる処理を
実装してみたいと思います。
欲しいデータの振り返り
と、その前に、前回から間が空いてしまったので
APIから欲しいデータを再確認します。
最終的にSlack上に表示したいデータは
以下の記事に書いています。
newgraduate19-rpa.hatenablog.com
ポケモンの名前 ポケモンの画像 ポケモンの分類(ピカチュウであれば「ねずみポケモン」) ポケモンのタイプ ポケモンの説明
詳しくは今後の記事に書く予定ですが、
画像についてはSlackにメッセージを送るスキル内で
URLを指定することができるので、
Web API機能では作成する必要はありません。
それ以外の情報を取得するアクションを作っていきましょう。
ポケモンの名前
え?入力したものをそのまま返せばいいんじゃない?
と思ったそこのあなた!
Poke APIのDocumentationをちゃんと読んでください!
特定のポケモンの情報を取得したい場合は、
URL/{ポケモンの英語名またはID}
が必要、つまり
日本語名⇒英語名
もしくは英語名⇒ID
に変換してあげる必要があるんですねぇ。
(当然といえば当然)
どうやるか、について、
結論から言うと、DB作ります☆
github上のリポジトリから持ってくることもできますが、
せっかくなので色々な技術を使ってみたいわけです。
名前の取得方法については今後の記事で書きます!
ポケモンの分類
さあ、やっと本題に入ります!(遅い)
ポケモンの分類は、
https://pokeapi.co/api/v2/pokemon-species/{英語のポケモン名またはID}
でGETして返ってくるjsonの中の、
genera
という配列のgenus
キーの値が該当します。
ちなみに配列はこんな感じ。
・・・ "genera": [ { "genus": "ねずみポケモン", "language": { "name": "ja-Hrkt", "url": "https://pokeapi.co/api/v2/language/1/" } }, { "genus": "쥐포켓몬", "language": { "name": "ko", "url": "https://pokeapi.co/api/v2/language/3/" } }, ・・・
という感じで、言語によって配列の要素が
それぞれ用意されているので、
日本語のデータのみを抽出する必要があります。
Blue Prismでの設定方法は以下のような感じ。
設定するよ
まずは、任意のアクション名と説明を記載します。
次に、入力パラメータを指定します。
使用するのはポケモンのID。
今回は[ID]という名前にしておきます。
次に、APIのコール先となるURLを指定します。
入力パラメータの[ID]と合わせて、
pokemon-species/[ID]
という風に指定します。
最後に、出力パラメータとJSONPathを指定します。
説明が面倒なので、JSONPathだけ貼っておきます。
$.genera[?(@.language.name=='ja-Hrkt')].genus
中身としては、配列genera内の
languageのnameがja-Hrkt(Japanese-ひらがなカタカナの略?)
のものを抽出し、そいつのgenusを取ってくるという感じです。
ちなデータ型はテキストです。
実行してみよう
では作ったものを実行してみましょう。
使い方はとっても簡単、
アクションステージからプルダウンで選択するだけ!
ちなみに、出力パラメータには自分で設定したもののほかに
・レスポンスのヘッダー
・レスポンスのコンテンツ(本文)
・HTTPのステータスコード(200とか404みたいなやつ)
がデフォルトで用意されています。
実行するとこんな感じ
やったぜ☆
ポケモンのタイプ
長くなっちゃったので駆け足でいくぜ!
入力パラメータはポケモンの英語名を入れる[ID]、
出力パラメータはコレクション[Types_en]です。
URLはpokemon/[ID]
、
JSONPathは以下。
$.types
本当は$.types..name
にしたいところだけど、
複数のタイプがある場合Blue Prism側でエラーが返ってくるので
こんな形にしています。
ただ、これで返ってくるのはあくまで
英語のタイプ名のみなので、
日本語名に変換してあげる必要があります。
変換するアクションの入力パラメータは[Type]、
URLは/type/[Type]
、
出力パラメータはテキスト型の[Type_ja]、
JSONPathは
$.names[?(@.language.name=='ja-Hrkt')].name
です。
ポケモンの説明
入力はほかのものと同じく[ID]、
出力パラメータはテキスト型の[Flavor_Text]です。
URLはpokemon-species/[ID]
、
JSONPathは以下。
$.flavor_text_entries[?(@.language.name=='ja-Hrkt' && @.version.name=='x')].flavor_text
これ複雑っすね。
JSONは長くなるので省略しますが、
language.name=='ja'または'ja-Hrkt'
だけだと
複数ヒットしてしまいエラーになるので、
バージョン名も合わせて複数条件でフィルタしてます。
別にどのバージョンでもいいのですが、
とりあえずポケットモンスターXのものにしています。
疲れたから今日はここまで!
まとめ
・JSONPath初めはややこしいけど実はそんなに難しくはない
・といいつつフィルタ構文でめっちゃ詰まったのは秘密☆
・オブジェクトと同様に使えるから便利
・HTTPステータスが返ってくるのが地味にうれしい
次はどうしようかな...
ポケモンの名前の対応表DBを作ろうかな。