Help us understand the problem. What is going on with this article?

Qiitaに投稿した記事を画像込みでバックアップ (Power Automate)

はじめに

現時点のQiita側の仕様に基づき作成していますが、今後の継続的動作保証はありません。
また、別に引っ越しを助長するものではありませんので、ご注意ください。

今回は Power Automateを利用して、Qiitaに投稿した過去の自分の投稿をバックアップする方法を紹介します。
ここでバックアップと言っているのは、「記事の.mdファイルの取得&記事中の画像ファイルの取得&記事ごとの分類」を指しています。

また、一番最初のステップ、URL一覧の作成だけHTTPのプレミアムアクションを使っていますが、こちらは手作業でリストを作っていれば利用しなくて問題ありません。

準備:URL一覧作成

まずは元になるURL一覧を作成します。Qiita API v2のDocumentによれば、

https://qiita.com/api/v2/users/<userID>/items?per_page=xxxx

これでjson形式の配列として、URL・タイトル等の一覧が取れます。
image.png

一覧ができたら、これをどこか、メモ帳にでもメモしておきます。

URL一覧の記事バックアップ

前提

  • Power Automateが利用できること
  • OneDrive/OneDrive for Businessが利用できること

OneDriveはもろもろのアクションで利用していますので、今回は必須です。

全体とやっていること

ちょっと数式を使ったところを①~③でマークしましたので、これらを説明します。
image.png

①:記事本文の保存

OneDrive for businessのURLからファイル作成のアクションを利用しています。
ここで注意するのはリクエストURLです。本文をMarkdown形式でとるためには".md"をURLに付与する必要があります。
あとは記事ごとにフォルダを分けたいので、記事のIDでフォルダをつくってそこにMarkdownを.txtで保存します。
image.png

ファイルの元URLは
Source URL

concat(items('Apply_to_each')?['url'],'.md')

ファイルの保存先は
Destination file Path

concat('/QiitaBK/',last(split(items('Apply_to_each')?['url'],'/')),'/',last(split(items('Apply_to_each')?['url'],'/')),'.txt')

ここわかりにくいですが、SplitしてURLから記事IDを取り出して、/QiitaBK/bcd3f305d5abd1b11208/bcd3f305d5abd1b11208.txt
このような文字列を作っているだけです。

②:記事中の画像URL一覧取得

[2020/03/26 15:40修正]
Markdownの中をみると、![image.png](https://....)![xxxx.gif](https://...)のようにして画像ファイルのリンクが貼られています。これを利用して記事中の画像URL一覧を作ります。
image.png
@tomikiya さんからのフィードバックで、gifも含めて取得する方法に修正。
image.png

使うアクションは選択(Select)です。

Fromには、txtファイルの中身を取得した結果を https://qiita-image-store でSplitした結果の2番目以降を入れます。
※1番目は不要箇所なので捨てるためにskipを利用

skip(split(body('Get_file_content_using_path'),'https://qiita-image-store'),1)

Mapのところでは、またSplitしていて、

concat('https://qiita-image-store',split(split(item(),')')?[0],'"')?[0])

これでURLが一覧できます。

数式ごちゃごちゃかいてありますが、まず最初のskip(split....)で以下のような文字列の一覧が得られます。
".s3.ap-northeast-1.amaz....)ここにあとは記事の本文が云々カンヌン"
ここから()内の画像URLを取りたいので、後ろカッコ) でsplitして[0]をとります。画像サイズを変更するためにimgタグが使われていたりすると最後が.jpg"> となったりするので、それを考慮してもう一回splitします。

③:画像保存

最後の画像保存ステップでは、記事を保存したフォルダと同じ場所に画像を入れていきます。

image.png

画像の保存場所だけ、ごちゃごちゃと数式書いたので、残しておきます。
URLには以下の式

items('Apply_to_each_2')?['url']

保存場所には

concat('/QiitaBK/',last(split(items('Apply_to_each')?['url'],'/')),'/',last(split(items('Apply_to_each_2')?['url'],'/')))

先ほどの本文のときとほとんど同じです。

動かしてみた結果

無事93投稿が7分ほどでバックアップ完了しました。
残課題としては、記事の投稿日をどこかに添えておきたいんですが、それはそれで別リストにしたほうがよさそうなので、APIで取ってこようかなと思います。
以上、Power Automateを使えばQiitaの投稿バックアップもお手軽簡単という内容でした!
image.png

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした