
フツーの方法では出来ない Google Reader からタグ付けした記事をエクスポートする一回限りの無茶な手順2013-05-24
Google Reader にどっぷり依存していた身としては有料で良いから Google Reader の存続を願わずにいられないのですが、そう夢見てばかりもいられないのでそろそろ移行の準備など始めています。
とりあえず試しに、と Google Reader のエクスポートを試してみたのですが、ない…ないんですよ!
確かに購読中のフィード一覧はあります。スター付きアイテムも、フォロワーも、その辺はちゃんとあります。でもフィードではなく、フィードに含まれている記事ごとに付けてあるタグの情報がすっぽり抜け落ちてるんですよ!
これ、ブックマーク代わりとして重宝してたのに…。ここにしか持ってない情報いっぱいあるのに…。
と言うわけで、一回限りの無茶な手順でエクスポートした方法を残しておきます。
もしかしたら誰かの役に立つかも知れないですしね。
表示形式は一覧で、内容を「すべてのアイテム」にしてます。表示順はお好みで選びます。
ここで、下にスクロールしていくと逐次続きが読み込まれるので、これ以上なくなるところまで全部読み込ませます。
全ての記事のタイトルが一覧表示されたら…
おもむろにデベロッパーツールを起動します。
そしてコンソールを開いて以下の内容を実行!(一回限りの無茶っぽさその1)
コンソールにタイトルと URL がタブ区切りで展開されます。
あとはコピペすれば tsv になるので、煮るなり焼くなりご自由に!
ならない…。
URL の大半が feedproxy.google.com でした。転送用アドレスですね。
Google Reader が無くなるとなった今、転送用ドメインがいつまで生きているか怪しすぎます。これは転送先に置換してやらないといけません。
URL の一覧を次のような感じに加工します。使うツールは、使い捨てのスクリプトでも、Excel の関数でも、エディタの正規表現置換でも、好きな方法で加工して下さい。ちなみに私は正規表現置換でやりました!(一回限りの無茶っぽさその2)
そしたら、対象ファイルに実行権限を与えて実行すると、一気に一覧が取れます。
$ chmod u+x list.sh
$ ./list.sh > resutls.txt
curl が 301 を解釈してリダイレクトするのを待つので、件数が多いと結構時間がかかりますが、これまで試したところ全件取れました。
Google のサーバに負荷をかけている予感がしますが、並列アクセスじゃないし、リダイレクト先へのアクセスを待った後で次のリクエストになるからいいかな、という感じです。そもそも Google Reader やめるんだからこのくらいは大目に見て欲しいです。
最初、Location だけ出てればいいかと思ってたのですが、時々 feedproxy を挟まないオリジナルの URL の事もあってそこが抜けてしまうと後から見たときに分かりにくいので、HTTP Status も出力するようにしています。
Mac であればそのまま動きます。Linux も多分大丈夫ですが、wget しかなかったら多少オプションの修正が必要かも知れません。Windows の場合はどうするんでしょう? cygwin 入れるのが早そうな。
そんなこんなで、一回限りの無茶な手順でした。
エンジニアやってなかったら諦めてたデータなのかなとは思います。ハックというには大げさですが、こういうのは好きですね。
とりあえず試しに、と Google Reader のエクスポートを試してみたのですが、ない…ないんですよ!
確かに購読中のフィード一覧はあります。スター付きアイテムも、フォロワーも、その辺はちゃんとあります。でもフィードではなく、フィードに含まれている記事ごとに付けてあるタグの情報がすっぽり抜け落ちてるんですよ!
これ、ブックマーク代わりとして重宝してたのに…。ここにしか持ってない情報いっぱいあるのに…。
と言うわけで、一回限りの無茶な手順でエクスポートした方法を残しておきます。
もしかしたら誰かの役に立つかも知れないですしね。
一覧の取得
まず Google Chrome で Google Reader にアクセスして対象タグのページを開きます。表示形式は一覧で、内容を「すべてのアイテム」にしてます。表示順はお好みで選びます。
ここで、下にスクロールしていくと逐次続きが読み込まれるので、これ以上なくなるところまで全部読み込ませます。
全ての記事のタイトルが一覧表示されたら…
おもむろにデベロッパーツールを起動します。
そしてコンソールを開いて以下の内容を実行!(一回限りの無茶っぽさその1)
var t = document.getElementsByClassName('entry-title'); var u = document.getElementsByClassName('entry-original'); for (var i=0;i<t.length; i++) {console.log(t[i].innerText + '\t' + u[i].href);}
コンソールにタイトルと URL がタブ区切りで展開されます。
あとはコピペすれば tsv になるので、煮るなり焼くなりご自由に!
ならない…。
URL の大半が feedproxy.google.com でした。転送用アドレスですね。
Google Reader が無くなるとなった今、転送用ドメインがいつまで生きているか怪しすぎます。これは転送先に置換してやらないといけません。
feedproxy.google.com を一括で展開
URL の一覧を次のような感じに加工します。使うツールは、使い捨てのスクリプトでも、Excel の関数でも、エディタの正規表現置換でも、好きな方法で加工して下さい。ちなみに私は正規表現置換でやりました!(一回限りの無茶っぽさその2)
#!/bin/sh curl -I -s http://feedproxy.google.com/〜〜/ | egrep -i "Location|HTTP.+ [0-9]{3} " | cut -d ' ' -f 2 curl -I -s http://feedproxy.google.com/〜〜/ | egrep -i "Location|HTTP.+ [0-9]{3} " | cut -d ' ' -f 2 curl -I -s http://www.originaldomain.com/〜〜/ | egrep -i "Location|HTTP.+ [0-9]{3} " | cut -d ' ' -f 2 : :
そしたら、対象ファイルに実行権限を与えて実行すると、一気に一覧が取れます。
$ chmod u+x list.sh
$ ./list.sh > resutls.txt
curl が 301 を解釈してリダイレクトするのを待つので、件数が多いと結構時間がかかりますが、これまで試したところ全件取れました。
Google のサーバに負荷をかけている予感がしますが、並列アクセスじゃないし、リダイレクト先へのアクセスを待った後で次のリクエストになるからいいかな、という感じです。そもそも Google Reader やめるんだからこのくらいは大目に見て欲しいです。
最初、Location だけ出てればいいかと思ってたのですが、時々 feedproxy を挟まないオリジナルの URL の事もあってそこが抜けてしまうと後から見たときに分かりにくいので、HTTP Status も出力するようにしています。
curl を使ってリダイレクト先を取得する手法はシェルで短縮URLの展開 - nyaocatのブログを参考にしました。ありがとうございます。
Mac であればそのまま動きます。Linux も多分大丈夫ですが、wget しかなかったら多少オプションの修正が必要かも知れません。Windows の場合はどうするんでしょう? cygwin 入れるのが早そうな。
そんなこんなで、一回限りの無茶な手順でした。
エンジニアやってなかったら諦めてたデータなのかなとは思います。ハックというには大げさですが、こういうのは好きですね。
カテゴリ: Development タグ: google