zennのトレンドをxmllintで整形して見やすく取得

1 min read読了の目安(約1600字
  • zennトレンドがXMLのRSS形式での配信となっている。
  • ただcurlを利用してMacのターミナル上でも手軽に確認したい場合がある。
  • そのため今回は、curlやxmllint等のMacに備わっているコマンドのみで整形及び取得を行う。

環境

  • Mac 20.2.0
  • Darwin 20.2.0

結果

  • 下記のコマンド(ワンライナー)で、zennトレンドのタイトル及びリンクを整形して取得。
curl -s 'https://zenn.dev/feed' | xmllint --format --nocdata - | grep -e '<title>' -e '<link>' | sed '1,4d' | awk -F '[<>]' '{if(NR%2) ORS=" "; else ORS="\n"; print $3}'
  • 上記の出力結果は以下。
TypeScript******* https://zenn.dev/seya/articles/aa94166c977280
React Compo ***** https://zenn.dev/takepepe/articles/division-labor-of-react
Tailwind CSSからク**** https://zenn.dev/uhyo/articles/lightwindcss
GitHubは禁止するべき? ************ https://zenn.dev/koduki/articles/4c3275af8e23d2
Clubhouseも使っているらしいAgoraを使って簡単にビデオ通話 https://zenn.dev/arahabica/articles/0f54f2cdb1a29d

...................
...................
  • curlでデータを事前に取得した方法は以下。
    • ※可読性のため、パイプは改行としている。
# curlのデータをローカルに保存
curl -s 'https://zenn.dev/feed' -o trend.xml

# ローカルデータからトレンドの検索
xmllint --format --nocdata trend.xml |
grep -e '<title>' -e '<link>' |
sed '1,4d' |
awk -F '[<>]' '{if(NR%2) ORS=" "; else ORS="\n"; print $3}'

補足

データの取得

  • トレンド検索のたびにcurlでの通信は行わず、cron(定時実行)でローカルでデータを保持。
  • その上で、検索はローカルデータを参照する。

データの整形

  • 個人的な見やすさの観点から、空白区切り及び2列形式で出力。

CDATAオプション

  • RSSの仕様上、CDATAを採用していたため、xmllintでの処理を調査。
  • 調査の結果、--nocdataオプションで除外処理が可能。
    • --nocdataが利用できるバージョンでなければawk内やsedで置換処理。

まとめ

  • 上記のことから、ターミナル上での簡単な確認で利用十分であることが分かった。
  • RSSとしての提供ということから、両方の併用で進めていくことと決心。

参考