LiveDwangoReaderからInoreaderへ移行しました

素晴らしいRSSリーダーを無料提供してくれてきたライブドアとドワンゴには感謝しかないです。

8末のサービス終了が見えてきたので、ついに長年使っていたリーダーからの移行が必要となりました。移行先はとりあえずInoreaderです。

LDR から opml をエクスポートして、そのファイルを Inoreader の[設定]-[インポート/エクスポート]-[OPML のインポート]で読み込ませます。

(30分ぐらい経過)

インポート中のプログレスバーが80%ぐらいで止まったまま動きません。別のタブでリーダーを開くと、それなりにフィードの移行はできている模様。表示が80%なだけなのか、80%のフィードしか移行できなかったのか、パッと見わからない。

LDRとInoreaderで購読中のフィード数、みたいな情報を探す。LDR の方はフィードの編集で「すべて」の所に件数が表示されました。1200件ぐらい。Inoreader は使い始めたばかりで、購読フィード数的な情報があるのかどうかわかりません。

1200件のうち2割が移行できてないとしたらたいへんです。しかし1200件のどれが移行できてないかを調べるのも大変。

インポート済の Inoreader からも opml をエクスポートし、二つの opml を比較することにします。オンラインでそういうツールないかなと思ったのだけれどちょっと検索しても見つからず。

とりあえず opml のパーザを適当に。vipnytt/opmlparser - Packagist

composer.json を書く

{ "require" : { "vipnytt/opmlparser": "dev-master" } }

opml を配列にしてくれるので、配列の要素を比較するコードを書く。一回限りの利用なので、opml ファイル名は直書きで。

require_once 'vendor/autoload.php'; $ldrUrlArray = parse('ldr_exported_20170828.xml'); $inoreaderUrlArray = parse('Inoreader_Subscriptions_20170830.xml'); function canonicalizeUrl($originalUrl) { // remove trailing slash // set all into http return preg_replace('|https:|', 'http:', rtrim($originalUrl, '/')); } function parse($opmlFilename) { $opmlContents = file_get_contents($opmlFilename); $parser = new vipnytt\OPMLParser($opmlContents); // get result as Array $array = $parser->getResult(); $htmlUrlArray = []; array_walk_recursive($array, function($value, $key) use(&$htmlUrlArray) { if ($key == 'xmlUrl') { // or check by other tags like 'title', 'xmlUrl', 'htmlUrl', etc. $canonicalizedValue = canonicalizeUrl($value); $htmlUrlArray[] = $canonicalizedValue; } }); return $htmlUrlArray; } // show how many items exist before and after //var_dump(count($ldrUrlArray)); //var_dump(count($inoreaderUrlArray)); // show different items var_dump(array_diff($ldrUrlArray, $inoreaderUrlArray)); //var_dump(array_diff($inoreaderUrlArray, $ldrUrlArray));

件数を出してみると、LDRでの1200件ちょっとがInoreaderでは1000件ちょっとしか存在せず、なるほどインポートが途中で失敗している模様。

array_diff で、移行できなかったフィードの情報を出力し、これを確かめてみたけれど、意外にコピーされているものもある。Inoreader がインポートの際に、「atom は無いけど feed はある」とか「http じゃなくて https ならある」とか探してよしなにしてくれているっぽい。また、指定された feed が完全にアクセス不可能だったりすると、インポートしてくれていない模様。

明らかに移行できてないポイントを調べて、そこから下だけの小さな opml を作って再度インポートに挑戦。もう一回 opml を出して比較したところ、数十件程度の差になったので、とりあえずこれでいいことにします。