指定したはてなブログの記事情報をPowerShellを使ってCSV形式で一覧出力します。
最初に
この記事で公開しているPowerShellのソースコードを作成するうえで、下記の記事を参考にさせていただきました
www.tekizai.net
具体的には Get-HatenaEntries という名前のファンクションを(一部自分好みに手をいれているものの)ほぼそのまま使わせていただいています。
m(__)m
背景
このブログは2022年9月10日現在、記事の投稿数が95です。だいぶ増えてきました。
投稿した記事内容とカテゴリーを振り返るために記事情報の一覧が欲しいと考えました。
実現方法
概要
標準機能では(= ブログの管理画面の操作では)そういった機能はないようです。
そのため、APIを使って実現してみました。
使用するAPIは「はてなブログAtomPub」を使用します。
「はてなブログAtomPub」を使用します。これは、はてなブログが提供しているAPIです。
Atom Publishing Protocol とは
Atom Publishing Protocol(以下 AtomPub) はウェブリソースを公開、編集するためのアプリケーション・プロトコル仕様です。はてなブログのAtomPubと通じて、開発者ははてなブログのエントリを参照、投稿、編集、削除するようなオリジナルのアプリケーションを作成できます。はてなブログAtomPub
https://developer.hatena.ne.jp/ja/documents/blog/apis/atom/
APIの使いかた
これらの値を使って下記の記載ルールでURIを定義します。APIキーは認証情報として渡します。
APIに対してHTTPリクエストを送ることで記事情報が返ってきます。記事情報の形式はXMLです。
$url = "https://blog.hatena.ne.jp/【はてなID】/【ブログID】/atom/entry"
$pass = ConvertTo-SecureString 【APIキー】 -AsPlainText -Force
$cr = New-Object System.Management.Automation.PSCredential($hatenaId, $pass)$req =Invoke-WebRequest -Method Get -Uri $url -Credential $cr
PowerShellスクリプトの使い方の説明
APIを使用するための準備
ブログの管理画面で下記の値を確認します。
これらの値の確認方法は
ブログ管理画面の「設定」を開きます
「詳細設定」を開きます
「ルートエンドポイント」をメモにひかえます。「はてなID」と「ブログID」がこれで分かりました。
次に、APIキーを確認するために「アカウント設定」のリンクをクリックします。
ソースコード
下記ソースコードが「はてなブログの記事をCSVに一覧出力する」PoweShellスクリプトです。
ソースコードをコピーしてテキストファイルに貼り付けてください。テキストの拡張子を.ps1にして保存してください。保存する際は文字列はUTF-8(BOMつき)にしてください。
ps1ファイルを実行すると、ps1ファイルと同じフォルダにCSVが出力されます。
#------------------------------------------------- #入力情報の定義 #------------------------------------------------- #region #ハテナID $hatenaId = "【ハテナID】" #ブログID $blogId = "【ブログID】" #APIキー $apiKey = "【APIキー】" #endregion #------------------------------------------------- #ファンクション定義 #------------------------------------------------- #すべての記事を取得する function Get-HatenaEntries { param ( [parameter(mandatory=$true)]$blogId, [parameter(mandatory=$true)]$apiKey, [parameter(mandatory=$true)]$hatenaId ) $url = "https://blog.hatena.ne.jp/$($hatenaId)/$($blogId)/atom/entry" $pass = ConvertTo-SecureString $apiKey -AsPlainText -Force $cr = New-Object System.Management.Automation.PSCredential($hatenaId, $pass) do { $req =Invoke-WebRequest -Method Get -Uri $url -Credential $cr $xml =([xml]$req.Content) Write-Output $xml.GetElementsByTagName("entry") $url=($xml.feed.link | Where-Object{$_.rel -eq "next"}).href } while ($null -ne $url) } #------------------------------------------------- #主処理 #------------------------------------------------- #region #「すべての記事を取得する」ファンクションを呼び出す $entries = @(Get-HatenaEntries -blogId $blogId -apiKey $apiKey -hatenaId $hatenaId) #CSVのファイル名を定義 $outputFile = ".\はてなブログの記事一覧.csv" #記事の情報をCSVに出力 foreach($e in $entries) { $obj = New-Object PSObject $obj | Add-Member -MemberType NoteProperty -Name 記事タイトル -Value $e.title $obj | Add-Member -MemberType NoteProperty -Name 投稿日時 -Value ([DateTime]$e.published).ToString("yyyy/MM/dd HH:mm:ss") if([string]::IsNullOrEmpty($e.category) -eq $false) { $obj | Add-Member -MemberType NoteProperty -Name カテゴリー -Value (($e.category | select term -ExpandProperty term) -join ",") } else { $obj | Add-Member -MemberType NoteProperty -Name カテゴリー -Value "-" } $obj | Add-Member -MemberType NoteProperty -Name 直接リンク -Value ($e.link | where rel -EQ alternate | select href -ExpandProperty href) #CSVに出力 $obj | Export-Csv -Path $outputFile -Encoding UTF8 -NoTypeInformation -Append } #endregion
最後に
今回はPowerShellを使ってはてなブログ記事の一覧取得を実施しました。
同じことを今後はPower Automate で実施したいと思います。それはまた、別記事として投稿したいと思います。
今回は以上です。