RPAエンジニアの雑記

RPA(Blue Prism)について色々記載してます。

(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 APIDocumentationをちゃんと読んでください!
f:id:newgraduate19:20200613203438p:plain

特定のポケモンの情報を取得したい場合は、
URL/{ポケモンの英語名またはID}
が必要、つまり
日本語名英語名
もしくは英語名ID
に変換してあげる必要があるんですねぇ。
(当然といえば当然)

どうやるか、について、 結論から言うと、DB作ります☆
f:id:newgraduate19:20200524164631p:plain
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での設定方法は以下のような感じ。

設定するよ

まずは、任意のアクション名と説明を記載します。
f:id:newgraduate19:20200613175929p:plain

次に、入力パラメータを指定します。
使用するのはポケモンのID。
今回は[ID]という名前にしておきます。
f:id:newgraduate19:20200627145823p:plain

次に、APIのコール先となるURLを指定します。
入力パラメータの[ID]と合わせて、
pokemon-species/[ID]という風に指定します。
f:id:newgraduate19:20200627145837p:plain

最後に、出力パラメータとJSONPathを指定します。
f:id:newgraduate19:20200627145851p:plain
説明が面倒なので、JSONPathだけ貼っておきます。

$.genera[?(@.language.name=='ja-Hrkt')].genus

中身としては、配列genera内の
languageのnameがja-Hrkt(Japanese-ひらがなカタカナの略?)
のものを抽出し、そいつのgenusを取ってくるという感じです。
ちなデータ型はテキストです。

実行してみよう

では作ったものを実行してみましょう。
使い方はとっても簡単、
アクションステージからプルダウンで選択するだけ!
f:id:newgraduate19:20200613183225p:plain

ちなみに、出力パラメータには自分で設定したもののほかに
・レスポンスのヘッダー
・レスポンスのコンテンツ(本文)
・HTTPのステータスコード(200とか404みたいなやつ)
がデフォルトで用意されています。

実行するとこんな感じ
f:id:newgraduate19:20200627150713g:plain
やったぜ☆

ポケモンのタイプ

長くなっちゃったので駆け足でいくぜ!
入力パラメータはポケモンの英語名を入れる[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を作ろうかな。