最近PowershellでREST APIを使う用事がありました。特にPowershellにこだわる必要はなかったのですが、使い慣れているのと、例によってWindowsであればどの端末でも実行できるという点が便利だったのでPowershellを使うことにしました。
要件としては単純にGETメソッドを使って情報を取り出すというだけです。こういう簡単なスクリプトではよくPythonが推奨されるところかと思いますが、Powershellでも割と簡単でした。
コマンドレットとしてはInvoke-Restmethodというものがあるのでそれを使います。
Invoke-RestMethod
[Microsoft Learn]
サンプルとして何のAPIを使おうかと思いましたが、よく考えたらWordpressがREST APIに対応していたので、このブログに対して情報取得を試してみることにしました。
APIで取得したデータはJSON形式で返ってくるということは何となく知っていたのですが、ああいった構造化されたデータをどう処理するのかがピンときませんでした。Powershellの場合は結果を変数に格納すると暗黙的にPSObjectに変換してくれるということで、Powershellに慣れている身からすればこれは結構使いやすく感じました。
試しにこのブログの直近の投稿をAPIで取得し、結果をテーブル形式に変換して表示してみるコードを作ってみました。
<Powershell>
$uri = 'https://hebodj.net/wp-json/wp/v2/posts/'
$Response = Invoke-RestMethod -URI $uri
#メンバー一覧を出力
$Response | Get-Member | Format-Table
これでとりあえずPSObjectにどんなメンバーが格納されているかが分かります。ざっと眺めてみるとこれが投稿のタイトルかな、これが投稿時刻かな、というのが分かってきます。
続いて投稿のタイトルを抜き出して列挙するコードを考えてみます。
<Powershell>
$uri = 'https://hebodj.net/wp-json/wp/v2/posts/'
$Response = Invoke-RestMethod -URI $uri
# 各投稿のタイトルを表示
foreach ($post in $Response) {
Write-Host $post.title.rendered
}
こんな感じでOKです。同じような要領で本文も抜き出すことができるので、APIで今までのエントリの内容をファイルに出力して統計情報を出すなど、面白い使い方ができそうです。
今まであまりWebに関係する技術に縁がなかったのでREST APIも苦手意識があったのですが、Powershell経由であれば割と簡単にハンドリングできそうな気がします。