HTTPアクション
HTTP(HyperText Transfer Protocol)は、インターネット上のテキストの通信で使用されている通信規格で、もともとはWebページが記述されたHTML(HyperText Markup Language)の通信に使用されてきました。クライアントPCのソフトウェアからWebサーバーに対してリクエスト(要求)メッセージを送信して、サーバーがレスポンス(応答)メッセージを返送して情報を交換します。
もともとは、ブラウザからWebページを取得するために使用されていましたが、現在では、サービスの提供にも利用されます。クライアントから送信された条件に基づいて、サーバーは結果データだけを返すわけです。
そのようなHTTP通信を使用したサービスをWebサービスと呼びます。メッセージのデータ形式としてはXMLやJSONが使用されています。そのように幅広く利用できるHTTP通信ですが、Power Automate for DesktopでもHTTP通信に関連して、以下のアクションが用意されています。
- Webからダウンロード
- SOAP Webサービスを呼び出す
- Webサービスの呼び出し
今回のサンプルでは、「API仕様の概要 « 国立国会図書館サーチについて」で説明されている「OpenSearch URL XML(RSS)」を使用してみます。条件に合致した書籍情報を取得し、整形したものをExcelワークシートにまとめます。
WebサービスでXMLを取得する
まず、国立国会図書館の書籍情報検索のAPIをタイトルを指定して呼び出した結果のRSS(XML)を取得して、XMLファイルとして保存するフローを作成します。
[1]新しいフローを作成する
Power Automate for Desktopのトップ画面から[+新しいフロー]をクリックして、適当な名前で新規のフローを作成します。
[2]ユーザーが検索したい書籍タイトルを入力する
入力した検索キーワードがタイトルに一致する書籍情報を検索したいため、実行時にユーザーが入力できるように、入力ダイアログを表示します。設定ファイルから読み込むようにしても構いません。このサンプルでは既定のキーワードとして「Power Automate Desktop」とします。もちろん、結果が存在しそうな任意のキーワードでも構いません。
[メッセージボックス]アクショングループの[入力ダイアログを表示]アクションを配置すると、設定ダイアログが開きます。
以下の設定を入力し、保存します。
- 入力ダイアログのタイトル:タイトル
- 入力ダイアログメッセージ:タイトルを入力してください
- 既定値:Power Automate Desktop
- 生成された変数:%Title%
[3]URIとして使用できるようにエンコードする
Webサービス呼び出しはURI経由で行います。URIで使用できない文字があるため、使用できるものに変換します。執筆時点では、Power Automate for Desktop標準機能に見当たらないので、JavaScriptにある機能を使用します。
[スクリプト]アクショングループの[JavaScriptの実行]アクションを配置すると、設定ダイアログが開きます。
以下の設定を選択/入力し、保存します。
- 実行するJavaScript:WScript.Echo(encodeURIComponent("%Title%"));
- 生成された変数:%EncodedTitle%
encodeURIComponentは、マルチバイト文字、「%」「=」「?」などの予約文字をエスケープするための関数です。また、JavaScriptの実行アクションから結果をフローに返すには、WScript.Echo()を使用します(こちらは正確にはWSHの機能です)。
[4]Webサービスを呼び出す
[HTTP]アクショングループの[Webサービスを呼び出します]アクションを配置すると、設定ダイアログが開きます。
以下の設定を選択/入力し、保存します。
- URI:https://iss.ndl.go.jp/api/opensearch?title=%EncodedTitle%&mediatype=1&cnt=30
これで、変数EncodedTitleの中身とタイトルが一致したものを検索します。mediatype=1は「本」の形式、cntは結果を最大30件返すという意味になります。
タイトルの他にも作成者、出版社、出版年月日などを検索条件に追加することもできます。以下の表に、いくつかのパラメーターを示します。
パラメーター名 | 内容 |
---|---|
title | タイトル |
creator | 作成者 |
publisher | 出版社 |
any | すべての項目を対象に検索 |
ndc | 分類(NDC) |
from | 開始出版年月日(YYYY、YYYY-MM、YYYY-MM-DD) |
until | 終了出版年月日(YYYY、YYYY-MM、YYYY-MM-DD) |
cnt | 出力レコード上限値(省略時は200) |
mediatype | 資料種別 (1:本、...) |
その他の細かな仕様は、「API仕様の概要 « 国立国会図書館サーチについて」の「3. API仕様書(日本語版)」-「国立国会図書館サーチ 外部提供インタフェース仕様書(第2.2版)」を確認してください。
[5]ドキュメントフォルダーのパスを取得する
ドキュメントフォルダーにXMLを保存するフォルダーを作成します。
[フォルダー]アクショングループの[特別なフォルダーを取得]アクションを配置すると、設定ダイアログが開きます。
以下の設定を選択/入力し、保存します。
- 特別なフォルダーの名前:ドキュメント
- 生成された変数:%Documents%
[6]取得データの保存用フォルダー作成する
[フォルダー]アクショングループの[フォルダーの作成]アクションを配置すると、設定ダイアログが開きます。
以下の設定を選択/入力し、保存します。
- 新しいフォルダーを次の場所に作成:%Documents%
- 新しいフォルダー名:XMLフォルダー
[7]タイトルからファイル名に使用できない文字を削除する
XMLを保存するときに入力キーワードを名前にしますが、その際、「\/:*?"<>|」などの文字はファイル名に使用できません。よって、もしこれらの文字が含まれている場合には、正規表現を使用して削除した文字列を作成します。これらの文字のうち「?*|」は、正規表現で意味を持つ文字なのでそのままでは文字とは解釈されません。パターンのこれらの文字がある場合は、1つの文字として解釈されるように前に「\」を挿入します。
[テキスト]アクショングループの[テキストを置換する]アクションを配置すると、設定ダイアログが開きます。
以下の設定を選択/入力し、保存します。
- 解析するテキスト:%Title%
- 検索するテキスト:\\|/|:|\*|\?|"|<|>|\|
- 検索と置換に正規表現を使う:ON
- 置き換え先のテキスト:%''%
置き換え後のファイル名はReplaced変数に反映されます。
[8]XMLデータをファイルに書き込んで保存する
[ファイル]アクショングループの[テキストをファイルに書き込みます]アクションを配置すると、設定ダイアログが開きます。
以下の設定を選択/入力し、保存します。
- ファイルパス:%NewFolder%\%Replaced%.xml
- 書き込むテキスト:%WebServiceResponse%
- エンコード:UTF-8
[9]実行する
以上でフローができたので、これを保存して実行します。入力ダイアログでは既定値のままで実行します(検索キーワード:Power Automate Desktop)。実行後に、作成されたXMLファイルを確認しましょう。
取得したXMLは以下のように、rss要素の中に、channel要素があり、その中に複数のitem要素があり、それが検索結果に一致した書籍情報となっています。
<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" ...> <channel> ... (検索と検索結果の情報)... <item> ...(検索結果の書籍Aの情報)... </item> <item> ...(検索結果の書籍Bの情報)... </item> <item> ...(検索結果の書籍Cの情報)... </item> ... ... </channel> </rss>
以下に、結果のitem要素(書籍1冊分の情報)中身を説明します。<dcndl:price>(価格)などitemによっては含まれていない要素もあります。また、<dc:creator>(作成者)で複数の共著者や翻訳書の原著者/翻訳者がある場合など、1つのitem要素が同じ種類の要素を複数持つ場合もあります。
<item> <title>(タイトル)</title>( <link>(詳細のページのURL)</link>( <description>(説明)</description>( <author>(著者・訳者)</author>( <category>(カテゴリ)</category>( <pubDate>(出版年月日)</pubDate>( <dc:title>(タイトル)</dc:title>( <dc:creator>(作成者)</dc:creator>( <dc:publisher>(出版社)</dc:publisher>( <dc:date>(出版年月)</dc:date>( <dcndl:price>(価格)</dcndl:price>( <dc:extent>(ページ数、サイズ)</dc:extent>( <dc:identifier xsi:type="dcndl:ISBN">(ISBN)</dc:identifier>( <dc:subject>(題)</dc:subject>( <dc:description>(説明)</dc:description> ... ... </item>
まとめ
Power Automate for Desktopのフローから、HTTP通信でXMLを取得する方法を説明しました。このXMLの中の情報をXML関連アクションを使用して抽出するサンプルは次回説明します。Webサービスは他にもたくさんあり、例えば気象情報等更新頻度の高いサービスなどもあるので、その応答データを取得してXMLやJSONのアクションを使って抽出するフローを作成することで、情報収集を自動化・効率化できます。