【Blogger】コメントを記事としてインポートする

コメントを 1 件ずつ独立した記事としてインポートする簡単な方法を見つけたので、本記事でその方法を示す。

Blogger は記事とコメントをどう判別しているのか

Blogger のバックアップファイルは、Blogger ダッシュボードの設定画面の「ブログの管理」>「コンテンツをバックアップ」からダウンロードできる。

この .xml ファイルにはブログの記事やページ、コメントだけでなく、ブログの設定項目やテンプレートの情報なども各 entry 要素に含まれている。

当初はコメントの記事化にこのバックアップファイルを利用しようと考えていた。

Blogger の仕様を調べるのに、以下のリファレンスガイドが参考になった。

このページの「投稿にコメントをリンクする」の項に、Blogger が記事とコメントをどうやって判別しているのかの説明がある。リンク先の内容を以下に一部抜粋する。

Blogger のエクスポート形式では、投稿とコメントの両方のエントリが 1 つの Atom フィード ドキュメントに含まれます。Blogger は、この 2 種類のエントリを区別するために <atom:category> 要素を利用します。この要素には、エントリが投稿用かコメント用かを表す term パラメータが含まれます。

上の文章にさらに付け加えると、Blogger は各 entry 内にある category 要素の term 属性の # 以降の文字列によって、そのエントリが記事(上の引用で言うところの「投稿」)かコメントかを判別している。

記事(投稿)の場合

<category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/blogger/2008/kind#post"/>

コメントの場合

<category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/blogger/2008/kind#comment"/>

バックアップファイルとブログフィードの共通点

Blogger が記事とコメントをどう判別しているかがわかったので、コメントの記事化もそう難しくはなさそうだ。

早速以下の手順でやってみたところうまくいった。

  1. バックアップファイルをダウンロードする
  2. ファイルをテキストエディタで開き、コメントの entry タグのみを残す
  3. kind#commentkind#post に全置換して保存する
  4. 編集したバックアップファイルを Blogger にインポートする

ただこの方法は、.xml ファイルの編集を伴うのでスマホからだと実行が難しいし、2 の「コメントの entry タグのみを残す」作業のためにコードを整形したり消したい部分を選択したり……が地味に面倒だった。

そんなある日、あるカスタマイズのためにブログのコメントフィードをいじっていたら、ふと Atom 形式のフィードの記述がバックアップファイルと似ていることに気が付いた。

調べてみたら、Blogger のブログフィードはデフォルトの状態では Atom 1.0 という形式だということがわかった。

そして、Blogger のバックアップファイルの形式も Atom 1.0

同じ形式ならもしかして……?と、保存したコメントフィードを出来心で Blogger にインポートしたところ、エラーもなく受け入れられた。

ただ予想外だったのが、コメントがコメントとしてではなく、記事としてインポートされたことだった。

兎にも角にもこの方法を使えば当初の目的が果たせることがわかったので、そのやり方を次項で詳しく述べていく。

フィードを利用してコメントを記事としてインポートする

※はじめてこの方法を試す場合は、テスト用のブログ少数(5 件や 10件など)のコメントのインポートを推奨。一気に数百件とかやってしまうと消すのめちゃくちゃたいへんなので……(実体験)

まず、コメント本文の全文が取得できるように設定する。Blogger ダッシュボードの設定画面の「サイトフィード」を以下のどちらかにすればいい。

  • 「ブログフィードを許可」が「完全」または「追記の区切りまで」
  • 「ブログフィードを許可」が「カスタム」かつ「ブログのコメント フィード」が「完全」

設定がうまくいったら、以下のようなコメントフィード URL でコメント本文の全文が取得できる。デフォルトで Atom 1.0 形式なので、?alt=atom は付けなくていい。

https://[blogName].blogspot.com/feeds/comments/default

ただし上に挙げた URL のままでは最大で 25 件しかコメントを取得できない。フィードの URL に ?max-results=300 を付ければ、1 つのフィードから最大で 300 件のコメントが取得できる。

https://[blogName].blogspot.com/feeds/comments/default?max-results=300

300 件以上のコメントを取得したい場合は、フィードの URL に ?max-results=300&start-index=301 を付ければ次の 300 件のコメントが取得できる。

https://[blogName].blogspot.com/feeds/comments/default?max-results=300&start-index=301

さらに多くのコメントを取得したい場合は start-index の数値を 300 ずつ増やしていけばいい。

さらにパラメータでコメントフィードの取得範囲を絞りたい場合は、以下のツールを使うのがおすすめ。

また、以下の URL のように特定の記事のコメントだけを取得することもできる。

https://[blogName].blogspot.com/feeds/[postId]/comments/default

[postId] の部分は、その記事の編集画面にアクセスするとアドレスバーに https://www.blogger.com/blog/post/edit/[blogId]/[postId] と表示されるので、その [postId] の数字をコピペする。

取得したいコメントのフィードを表示できたら、そのページで Ctrl + S(Mac の場合は command + S)を押す。「名前を付けて保存」ダイアログボックスが開くので、ファイル名を任意の文字列、拡張子を .xml にして保存。

あとは、Blogger ダッシュボードの設定画面の「ブログの管理」>「コンテンツをインポート」で、先程作成した .xml ファイルを選択すれば、以下の画像のようにコメントが記事としてインポートされる。

Bloggerダッシュボードのコメント一覧と、そのコメントの一部をテストブログに記事として公開した図

なぜコメントが記事としてインポートされるのか

なぜコメントフィードを保存してインポートすると、Blogger に記事とみなされるのか。当然不思議に思ったので理由を調べてみた。

Blogger のバックアップファイルとコメントフィードのコメントエントリを比較すると、細かい記述の違いはあれど、特に違ったのがコメントフィードの entry タグには category 要素がないことだった。

前述の通り、category 要素の term 属性の記述によって、そのエントリが記事かコメントかが判別される。

しかしコメントフィードにはそもそも category 要素が存在しないので、そのエントリがコメントであることを判別できない。そのため記事としてインポートされる、ということだと思う。

あとがき

コメントフィードを使って、簡単にコメントを 1 件ずつ記事としてインポートする方法について書いた。

実は上にリンクを張ったリファレンス ガイドに思いっきり「Atom フィード」という単語が登場しているので、勘のいい人ならバックアップファイルとブログの Atom フィードの共通点にすぐ気付くと思う。私は JSON 形式のフィードしか普段いじってなかったのと、そもそも勘が悪いので気付くのに時間がかかった。

自分以外誰が参考にするんだって内容ではあるけども、個人的には Blogger に対する知見がさらに深まったのでわりと満足している。

編集
ホーム