SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Power Automate Desktopチュートリアル

Windows10の無償デスクトップ自動化ツール「Power Automate Desktop」でWebサービスからのXML取得を自動化する

Power Automate Desktopチュートリアル 第12回

  • X ポスト
  • このエントリーをはてなブックマークに追加

HTTPアクション

 HTTP(HyperText Transfer Protocol)は、インターネット上のテキストの通信で使用されている通信規格で、もともとはWebページが記述されたHTML(HyperText Markup Language)の通信に使用されてきました。クライアントPCのソフトウェアからWebサーバーに対してリクエスト(要求)メッセージを送信して、サーバーがレスポンス(応答)メッセージを返送して情報を交換します。

 もともとは、ブラウザからWebページを取得するために使用されていましたが、現在では、サービスの提供にも利用されます。クライアントから送信された条件に基づいて、サーバーは結果データだけを返すわけです。

図: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の実行アクションの配置
図:JavaScriptの実行アクションの配置
図:JavaScriptの実行アクションの設定
図:JavaScriptの実行アクションの設定

 以下の設定を選択/入力し、保存します。

  • 実行するJavaScript:WScript.Echo(encodeURIComponent("%Title%"));
  • 生成された変数:%EncodedTitle%

 encodeURIComponentは、マルチバイト文字、「%」「=」「?」などの予約文字をエスケープするための関数です。また、JavaScriptの実行アクションから結果をフローに返すには、WScript.Echo()を使用します(こちらは正確にはWSHの機能です)。

[4]Webサービスを呼び出す

 [HTTP]アクショングループの[Webサービスを呼び出します]アクションを配置すると、設定ダイアログが開きます。

図:Webサービスを呼び出しますアクションの配置
図:Webサービスを呼び出しますアクションの配置
図:Webサービスを呼び出しますアクションの設定
図:Webサービスを呼び出しますアクションの設定

 以下の設定を選択/入力し、保存します。

  • URI:https://iss.ndl.go.jp/api/opensearch?title=%EncodedTitle%&mediatype=1&cnt=30

 これで、変数EncodedTitleの中身とタイトルが一致したものを検索します。mediatype=1は「本」の形式、cntは結果を最大30件返すという意味になります。

 タイトルの他にも作成者、出版社、出版年月日などを検索条件に追加することもできます。以下の表に、いくつかのパラメーターを示します。

OpenSearchパラメーター
パラメーター名 内容
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ファイルを確認しましょう。

図:WebサービスでXMLを取得するフローの実行結果
図:WebサービスでXMLを取得するフローの実行結果

 取得したXMLは以下のように、rss要素の中に、channel要素があり、その中に複数のitem要素があり、それが検索結果に一致した書籍情報となっています。

取得したXMLの概観
<?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の中身の要素の一部
<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のアクションを使って抽出するフローを作成することで、情報収集を自動化・効率化できます。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Power Automate Desktopチュートリアル連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 飯島 聡(WINGSプロジェクト イイジマ サトシ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/16292 2022/08/29 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング