はじめに
最近PowerShellを使っているので力試しにQiitaの記事とストックをバックアップするスクリプトを作りました。
LGTM一覧は残念ながらQiita APIにないのでWebページをスクレイピングしないと取得できなさそうです。
動作環境
- Windows PowerShell 5
- PowerShell Core 6
- PowerShell 7
使い方
記事のバックアップ
- ファイルの先頭に
$userId
を自分のアカウント名に変更します。 - 記事中の画像ファイルのURLはデフォルトでファイル名のみに置換しますが他のURLに置き換えたい場合に設定します。
たとえば$imageFolder = "https://example.com/images/"
にすると記事中の画像のURLが以下のように置換されます。
- 変更前
https://qiita-image-store.s3.amazonaws.com/0/00000/ffffffff-ffff-ffff-ffff-ffffffffffff.png
- 変更後
https://example.com/images/ffffffff-ffff-ffff-ffff-ffffffffffff.png
qiita-item-exporter.ps1
$userId = 'your-user-name'
$imageFolder = "" # replace image path
qiita-item-exporter.ps1
を実行すると以下のような構造で記事と画像が保存されます。
- items
+- readme.md # 各記事へのリンク
+- xxxxxxxxxxxxxxxxxxxx # 記事のID
+- xxxxxxxxxxxxxxxxxxxx.md # ダウンロードした記事
+- readme.md # 画像のURLを置換した記事
+- ffffffff-ffff-ffff-ffff-ffffffffffff.png # 記事中の画像
+- meta.json # 作成日時、更新日時、タイトル、タグを保存したJSON
ストックのバックアップ
-
$userId
と$imageFolder
はqiita-item-exporter.ps1
と同様の設定です。 - ストックの総数はQiita APIで取得できないのでストック一覧の一番下からページ数を確認して
$pages
を設定します。
このスクショでは29
がページ数です。
qiita-stock-exporter.ps1
$userId = 'your-user-name'
$pages = 1 # your-stock-pages
$imageFolder = "" # replace image path
qiita-stock-exporter.ps1
を実行すると以下のような構造で記事と画像が保存されます。
- stokcs
+- readme.md # 各記事へのリンク
+- xxxxxxxxxxxxxxxxxxxx # 記事のID
+- xxxxxxxxxxxxxxxxxxxx.md # ダウンロードした記事
+- readme.md # 画像のURLを置換した記事
+- ffffffff-ffff-ffff-ffff-ffffffffffff.png # 記事中の画像
+- meta.json # ユーザーID、ユーザー情報、タイトル、タグを保存したJSON
さいごに
PowerShellは文法こそ独特なもののC#のLINQのようにパイプで文字列だけではなくオブジェクトを流せるのでデータの加工が楽でした。