jq で Mastodon のダウンロードアーカイブから特定のキーワードを含む投稿のテキストをmarkdown形式で抽出する - 標準愚痴出力

標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

jq で Mastodon のダウンロードアーカイブから特定のキーワードを含む投稿のテキストをmarkdown形式で抽出する

ひさしぶりなので、jq の文法はほとんど忘却の彼方。自分のjqの記事を読みながら思いだす。

mstdn-arc2txt.jq

# jq スクリプト。呼び出すコマンドラインは次のとおり
# tar -O -jxvf archive-*.tar.gz outbox.json | jq -rf mstdn-arc2txt.jq

.orderedItems[] |
select(.object.content | contains("エルデンリング")) |
    "```\n"+(.object.content |
        gsub("</p><p>";"\n\n") |
        gsub("<br[^>]*>";"  \n") |
        gsub("<a[^>]*href=\"(?<a>[^\"]*)\"[^>]*>(?<t>.*?)</a>";"["+.t+"]("+.a+")") |
        gsub("<[^>]*>";"")
    ) + "\n```\n**(" + (.object.published | tostring) + ")**\n"
  • アーカイブファイルは tar.gz 形式。outbox.json というファイルに JSON 形式で投稿内容が含まれている模様
    • ActivityPub形式らしいが、その形式をちゃんと説明しているサイトはだいたい英語なので、もうブツを見た方が早い
    • ルート要素はハッシュ。.orderedItems メンバーが投稿データの配列
  • gsub 関数でテキストを置換できる。
    • 第二引数は;以下に記述。見付かるたびに都度評価される
    • グルーピングは (?<名前>…) という形式。.名前 で参照できる

抽出結果は以下のとおり

```
エルデンリングのゲーム実況のアーカイブとか見てると

・後半になると、ウェブ情報を検索して、人物のイベントを消化
・視聴者によるゲーム内に書いたメッセージ評価での体力回復に頼る

とかいろいろあるのを知った。
(まぁ別にそういうのタブーではないからね)
```
**(2023-06-05T01:56:21Z)**

```
マレニアとラダゴンで未だにエルデンリング一週目が止まっている。

マレニアは裏ボスと聞いているけど、一回くらいは勝利しておきたい。トロフィー的な意味で

こいつら、楽な攻略法とかないかなぁ…(変身後にたどり着くのがやっと)
```
**(2023-06-05T01:58:38Z)**

: 以下略