Live Dwango Readerが完全終了!まだ読んでいない記事はどうする?!過去記事をバックアップする方法を公開します

終わりとはなんの前触れもなくやってくるのです。

【重要】Live Dwango Reader/LDR Pocketサービス終了のお知らせ

ΩΩΩ<な、なんだってー!?

突然発表されたLive Dwango ReaderとLDR Pocketのサービス終了宣言…。

私はずっとRSSはlivedoor Reader時代からお世話になっておりしました。

Livedoorが消滅する際にも存続の危機が危ぶまれたlivedoor Readerもdwangoがサービスを引き継いでLive Dwango Readerとして延命しましたが、RSSリーダーサービス事態がRSS利用者がどんどん少なくなり、その煽りも受けていよいよ完全終了となりました。

しかし、RSS自体がなくなるわけではないので他のRSSリーダーサービスに乗り換えればいいじゃん!との声もあります。
もちろんその通りです。

私も仕方ないと、livedoor Readerさんいままでありがとう(´;ω;`)と口に出したか出していないかはわからないままお引っ越しの準備を進めておりました。
ふむふむネットの情報によるとInoreaderさんという海外のRSSリーダーが代替サービスの急先鋒として紹介されていたので、特に何も考えずお引っ越しの準備を進めておりました。(ただデータをエクスポート・インポートするだけですが)

だけど、一点大問題ががが、
Live Dwango Reader上では見られる過去記事が一切引き継がれないのである!(ΩΩΩ<な、なんだっ以下略)

長い月日を掛けて積み上げてきたものがこんなにも脆かったなんて…

特につらいのが現在はブログを閉鎖してしまったぼくが大好きだったレビューブログの記事で、特にマンガのレビューがこりゃまた秀逸で個人的にまだまだ読みたい内容がギッシリ詰まったブログのアーカイブでした。これもサービス終了でもう二度と読むことはできない情報なのか…orz

運営に問い合わせてデータを送ってもらおうとまで思いましたが、ぼくたちにはもう時間がないんだ!!!
かといって手作業でコピペしまくる作戦に出る根性もないんだ!!!
…\(^o^)/

”なんでも諦めないこと!”が我が家の家訓であるぼくはプログラミングは”不可能を可能にすることが出来る!!”との意気込みで
データ取得プロジェクトを開始しました!

いつも作るのはトレードに使うのでカッチカチなC/C++などですが、このプロジェクトには向いていないと人生で一度も触れたことのなかったふわっふわなJavaScriptを選択してみました。

…(..)カチャカチャ

そして幾多の困難を越え、JS歴1日のぼくが実装しました。

function getJSON(title, sub_id) {
    var req = new XMLHttpRequest();
    req.onreadystatechange = function () {
        if (req.readyState == 4 && req.status == 200) {
            var blob = new Blob([req.responseText], { type: 'text/plain' });
            if (window.navigator.msSaveBlob) {
                window.navigator.msSaveBlob(blob, `${title}.json`);
                window.navigator.msSaveOrOpenBlob(blob, `${title}.json`);
            } else {
                var a = document.createElement("a");
                a.href = URL.createObjectURL(blob);
                a.target = '_blank';
                a.download = `${title}.json`;
                a.click();
            }
        }
    };
    req.open("POST", "http://reader.livedoor.com/api/all", false);
    req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    req.send(`subscribe_id=${sub_id}&limit=10000`);
}

function getArchives() {
    var subs = {};
    var req = new XMLHttpRequest();
    req.onreadystatechange = function () {
        if (req.readyState == 4 && req.status == 200) {
            var data = JSON.parse(req.responseText);
            for (key in data) {
                if (typeof (data[key]['title']) === 'undefined' || typeof (data[key]['subscribe_id']) === 'undefined')
                    break;
                subs[data[key]['title']] = data[key]['subscribe_id'];
                console.log('key:' + key + ' title:' + data[key]['title'] + ' sub_id:' + data[key]['subscribe_id']);
            }
            for (title in subs) {
                sleep(2000);
                console.log('title:' + title + ' sub_id:' + subs[title]);
                getJSON(title, subs[title]);
            }
        }

        return subs;
    }
    req.open("POST", "http://reader.livedoor.com/api/subs?unread=0", false);
    req.send();
}

function sleep(msec) {
    const d1 = new Date();
    while (true) {
        const d2 = new Date();
        if (d2 - d1 > msec) {
            return;
        }
    }
}

getArchives();

ということで過去記事をとりあえずJSONでダウンロードするだけ(とりあえず動くだけ)のプログラムが出来たので必要ある人は使ってみてね!

使い方は、

ChromeでLive Dwango Readerにログインする

F12のデベロッパーツールを立ち上げて、Consoleタブに上記のコードを貼り付ける

ダウンロードが始まる(`・ω・´)ゞ

突貫で作ってるからなんか問題あったらゴメンね💦
(注1)ダウンロードは負荷掛けないように2秒毎になってるから全部ダウンロード出来るまで気長に待ってね
(注2)素人が作ってるもんで一回ダウンロード始めたら止まらないから余裕あるときにやってね!
(注3)とりあえずバックアップを最優先にしてあるのでJSONのみとなっています。正直見づらいと思うのでHTMLに整形するツールも作りたかったですが力尽きました…。上記のコードやHTML整形の改善なんかしてくれる有志がいればぜひ!もちろん改変は自由です

Live Dwango Reader難民で同じ悩みを持ってる方は使ってみてね

P.S.

JavaScriptも書いてみたら意外に楽しかったので、トレードのシステムも一回JSで作ってみようかなw
その名も『JavaScripTrader』とかw

 

はい今回も駄文を読んで頂き大変感謝です!

 


  1. Live Dwango Readerの過去記事を取得できるコードを書きました
    サービスが終了するとデータを取得出来ないかもしれません。大切にとっておきたい過去記事がある方に一人でも多く届くように拡散して頂ければと思います
    #拡散希望
    https://t.co/p5f4vtq9SR

  2. Live Dwango Readerが完全終了!まだ読んでいない記事はどうする?!過去記事をバックアップする方法を公開します https://t.co/N65oUUSxRD @@sys_tradingtechさんから

  1. トラックバック 0

return top