ブックマークレットの応用として、ブログの移管を考えてみた。 私は S というブログを使っていたが、これを A というブログに移行しようと考えている。 ただ、A のほうでは ブログのインポート機能はない。今までは記事一件ずつ手作業で移行していたがエラーが起きる。 そこで、ある程度の自動化を試みた。
自動化するにはヘッドレスブラウザを使うなどの方法もあるだろうが、 ここでは、JavaScript によるブックマークレットを使う。
まず、A のブログの入力形式を確認する。HTML の概略は次の通りである。
タイトル <input type="text" name="title" /> <input type="text" name="year" /> 年 <input type="text" name="month" /> 月 <input type="text" name="mday" /> 日 <input type="text" name="hour" /> 時 <input type="text" name="min" /> 分 <input type="text" name="sec" /> 秒 カテゴリ <select name="cat_0"> <option value="_none_" selected="selected">選んでください</option> <option value="abcjs">abcjs</option> (中略) <option value="yaesu">八重洲室内アンサンブル</option> </select> 記事本文 <textarea name="content"></textarea>
まず、タイトルだけ入れられることを確認する。次のブックマークレットを書いてみた。
javascript:(function (){document.getElementsByName('title')[0].value='タイトル';}) ();
これはうまくいく。次に年月日と時分秒を入れてみる。年だけならば上記と同じ通りでよい。
javascript:(function (){document.getElementsByName('year')[0].value='2018';}) ();
全部入れるには工夫がいりそうだ。
javascript:(function (){let d=['year','month','mday','hour','min','sec'];s=['2018','5','23','23','0','0'];for(let i=0;i<6;i++)document.getElementsByName(d[i])[0].value=s[i];}) ();
エレガントとは言い難いが、これでとりあえずうまくいく。カテゴリは飛ばして、記事本文をためしてみよう。
javascript:(function (){document.getElementsByName('content')[0].value='記事の本文です。'})();
一応これで入る。カテゴリは面倒なので手動にしよう。さて、 こんどはブログのプレーンテキストからの情報の抽出を考えよう。 次の記事が入力されているとする。これは S ブログからのコピー&ペースト情報である。
この記事からわかることは次の通りである。ここでは全行は 0 行から n - 1 行にわたってあるものとする。
そこで次のように方針を立てた。(つづく)
まりんきょ学問所 > JavaScript 手習い > ブログの移行