Windowsでファンブログの全記事バックアップスクリプト

2014年1月22日にA8.netのファンブログはSeesaa Blogのシステムをベースにして生まれ変わりました。よってファンブログ関連の記事は今では当てはまらない可能性があります。新しいファンブログのカスタマイズは別ブログ「ファンブログ テック」で詳しく書いていますので、そちらをご覧ください。

この記事は、技術のタマゴ「ドメイン以下のURLを完全に保持しながら無料ブログから移転する方法・予告」のコメント欄へ投稿した内容と同じです。

おそらく数百記事程度なら、数分で全記事のバックアップが取れると思います。


WSH(Windows Script Host)というWindowsの過去の遺産があって、それを使ってスクリプトを書いてみました。このスクリプトで、Windowsを使って、現在のファンブログから記事のバックアップが取れます。ただ、残念ながら以前もらったコメントはもう表示されてないので、取れません。

消えたコメントのサルベージに関しては、この記事の後半に書いてあります。

ソースコードと使い方

var name='ayzfqir5';
var min=1;
var max=20;

for(var i=min;i<=max;i++){
	var xhr=WScript.CreateObject('Msxml2.XMLHTTP');
	var fd=WScript.CreateObject('Adodb.Stream');

	xhr.Open('GET','http://fanblogs.jp/'+name+'/archive/'+i+'/0',false);

	xhr.SetRequestHeader('Pragma','no-cache');
	xhr.SetRequestHeader('Cache-Control','no-cache');
	xhr.SetRequestHeader('If-Modified-Since','Thu, 01 Jan 1970 00:00:00 GMT');

	xhr.Send();

	fd.Type=1;
	fd.Open();
	fd.Write(xhr.responseBody);
	fd.Savetofile(i+'.html',2);
	fd.Close();
}

WScript.Echo('finish');

まず、fanblogというフォルダを作ります。

次に、上のスクリプトをメモ帳にコピーして、fanblogフォルダの中にbackup.jseという名前で保存します。

この時に使うのはメモ帳です。WORD(ワード)を使ってはいけません。

保存した、backup.jseの1行目
var name=’ayzfqir5′;
のayzfqir5を自分のブログのhttp://fanblogs.jp/xxxxxx/のxxxxxxに変更します。

2行目の
var min=1;
の数字を読み込みたい記事の最小値に変更します。(通常は1でよい)
http://fanblogs.jp/xxxxxx/archive/123/0の123の部分のこと

3行目の
var max=20;
を最新記事の数字に変更します。
http://fanblogs.jp/xxxxxx/archive/123/0の123の部分のこと

たとえば、http://fanblogs.jp/parthaken/の1番目の記事から10番目の記事まで取得したい場合は下のようになります。var name=’parthaken‘;
var min=1;
var max=10;

修正したらbackup.jseを上書き保存。
そして、backup.jseをダブルクリックすると、記事の取得を開始します。

取得が終わると、finishと表示されるので、それまで待ちます。1000記事くらいなら10分以内に終わると思います。finishと表示されたらOKを押して終了です。これで、fanblogフォルダに記事がページごとに保存されています。

ただし、記事がない欠番ページも普通に取得します。これは404を返さないファンブログの仕様です。ファイルを開いて記事がなければ存在しない欠番記事ということです。

同じページの再取得

同じページを2回取得すると、重複した別ファイルを作らずに上書きします。記事を書き直したりしたときは再取得(上書き)してください。

もし、ファンブログがコメント欄を復活させて、以前のコメントが表示されるようになったらコメントも取得できます。その時は再取得して(コメントのないページに)上書きしてください。

追加取得の方法

記事を追加した時は追加取得できます。たとえば前回取得した記事が1~100までで、その後、2記事増えた場合は

var min=101;
var max=102;

とすれば、http://fanblogs.jp/xxxxxx/101/0からhttp://fanblogs.jp/xxxxxx/102/0までを追加取得します。

1ページだけ取得したい場合

追加した記事が1つだけの場合、minとmaxに同じ数字を書いてください。

var min=101;
var max=101;

なら、http://fanblogs.jp/xxxxxx/101/0の1ページだけを取得します。

コメントのサルベージ

上記の方法で記事は取得できますが、これまでにもらったコメントは表示されないので、取得できません。

先日「消えたコメントはInternet Archiveを探せ!」という記事を書きましたが、確かめて見たら、Internet ArchiveよりGoogleのキャッシュの方がコメント保存率は高いことがわかりました。

Google検索で
site:fanblogs.jp/xxxxxx/archive
と打ち込めば一覧が表示されます。(/archiveまでつける)

xxxxxxは、自分のブログのhttp://fanblogs.jp/xxxxxx/の部分に書き換えてください。

検索結果の記事タイトルの下にURLが出ますが
fanblogs.jp/ayzfqir5/archive/13/‎ ▼
のように▼マークが出た記事は▼をクリックすればコメントも含めてキャッシュが読めます。


上のスクリプトで取得した「天女のはごろも」全データです。
http://api.dwm.me/fanblog/fanblog_nachi410247.zip

ZIP圧縮済です。解凍するとfanblogというフォルダに全記事が入っています。

ファイルは1.htmlから388.htmlまでありますが、上に書いたように欠番記事もファイルになっています。1.htmlから11.htmlまでは欠番なので、開いても記事はありません。

最初の記事は12.htmlの「自転車がぬすまれた!保険金でるの?」
最新の記事は388.htmlの「【FXブログ】人気コラムとご挨拶」

今、ファンブログで見られるものをそのまま落としているので、残念ながら、コメントは一切ないです。

ファンブログからWordPressにデータを完全移行するスクリプト

ファンブログからWordPressにデータを完全移行するスクリプトを書きました。自動で以下の事をやってくれます。ダウンロード中に接続が切られると、自動で再接続して再開します。ファンブログのサーバーから「下書き」を含む、すべての記事のダウンロード。投稿されたすべての「コメント」データのダウンロード。投稿されたすべての「トラックバック」データのダウンロード。ファンブログのサーバーから記事で使っていないものを含む、すべての画像ファイルのダウンロード。記事で使っているすべての画像ファイルのURLをWordPressにアップした新しい画像URLに書き変え。記事で使っているすべての内部リンクのURLをWordPressにアップした新しいURLに書き変え。

2014年1月22日にA8.netのファンブログはSeesaa Blogのシステムをベースにして生まれ変わりました。現在ではこの方法は不要でファンブログに基本装備されたエクスポートが使えます。その、新しい方法についての詳細は「無料ブログからWordPressへデータを移動する手順」に書いていますので、そちらをご覧ください。

ファンブログからWordPressにデータを完全移行するスクリプトを書きました。

サンプルとして、WordPress側のテンプレートは完全デフォルトのまま、移行したこのブログの記事を次のサイトで公開しています。(入っているのはこの記事のひとつ前の記事までです。)

http://idobata.cocorodesign.net/escape/

適切な設定だけすれば、自動で以下の事をやってくれます。ダウンロード中に接続が切られると、自動で再接続して再開します。

  1. ファンブログのサーバーから「下書き」を含む、すべての記事のダウンロード
  2. 投稿されたすべての「コメント」データのダウンロード
  3. 投稿されたすべての「トラックバック」データのダウンロード
  4. ファンブログのサーバーから記事で使っていないものを含む、すべての画像ファイルのダウンロード

追記:現在はコメントとトラックバックの取得数はゼロになり、取得されません。それは、ファンブログのサーバーが公開していない結果なので、正常な動作です。

また、WordPress側の新しいブログにアップロードする際、次の事も自動で行います。

  • 記事で使っているすべての内部リンクのURLをWordPressにアップした新しいURLに書き変え
  • 記事で使っているすべての画像ファイルのURLをWordPressにアップした新しい画像URLに書き変え

ただし、内部リンクへ対応する代わりにWordPressのパーマリンク設定を「数字ベース」または「デフォルト」にする必要があります。

書き変えるのは内部リンクだけです。http://fanblogs.jp/自分のURL/を含むリンクは、すべて自動で書き変えますが、下のように本文中に書いてあるURLは書き変えません。

こういう風に、リンクでないURLは書き変えません。
このブログの、旧URLは、http://fanblogs.jp/ayzfqir5/です。

ファンブログの独自タグには対応していません。ご了承ください。(追記:対応しました
ファンブログのエディタの注意点

ファンブログのサーバーから「下書き」を含む、すべての記事のダウンロードで取得するのは次の項目です。

  • ページ番号(http://fanblogs.jp/hoge/archive/xxx/0 の xxx の数字)
  • タイトル
  • カテゴリー名
  • 投稿年月日時間
  • 記事本文
  • 記事追記部分
  • 記事の概要
  • 公開/下書きの区分

投稿されたすべての「コメント」データのダウンロードで取得するのは次の項目です。

  • コメントが投稿された記事のページ番号
  • 投稿年月日時間
  • 投稿者名
  • 投稿者のURL
  • 投稿者のメールアドレス
  • コメントの発信元IPアドレス
  • コメント本文

投稿されたすべての「トラックバック」データのダウンロードで取得するのは次の項目です。

  • トラックバックが投稿された記事のページ番号
  • 投稿年月日時間
  • トラックバックされた、相手の記事のタイトル
  • 投稿されたトラックバックのURL
  • 投稿されたトラックバックのブログ名
  • 投稿されたトラックバックの発信元IPアドレス
  • トラックバック本文

詳細は「ファンブログからWordPressへすべてのデータを移動する手順」をご覧ください。

姐さんのスクリプト活用リポート「WordPress完全移行スクリプトキタ-!」も参考にしてください。
残念ながらこの方法を実行するには、それなりのスキルが必要です。簡単にバックアップを取りたければ、次の方法を試してください。Windowsでファンブログの全記事バックアップスクリプト

その他の移行方法

このスクリプトはWordPressに移行するためのものですが、他の方法がこちらで公開されています。
ドメイン以下のURLを完全に保持しながら無料ブログから移転する方法・予告

どちらの方法も一長一短ありますが、比較をするとこうなります。

このページのスクリプト

  • スクリプトを動かす環境構築が難しい
  • その代わり、スクリプトが動きさえすれば、割とスムーズに移行できる。
  • リンクの張替え全自動
  • WordPressに変換後、MT形式に再変換すれば
    FC2やlivedoorブログなど、大部分のブログに移行可能
    (独自ドメインがいらない)
    MT形式がターゲットなら、下の追記の方法の方が手間は少ないです

ドメイン以下のURLを完全に保持しながら無料ブログから移転する方法

  • 導入が比較的簡単
  • リンクの張替えは、別作業で必要
  • 同じルックスが維持できる(ヘッダ画像などの著作権には注意すること)
  • 独自ドメインが必要

導入が比較的簡単と書きましたが、このページのスクリプトに比べてです。どちらを使うにしても、「とても簡単」というわけにはいきませんので、ご了承ください。

追記:MT(MovableType)形式への移行方法

という方法もあるようです。タイトルでは、さくらのブログ・Seesaaブログとだけ書いてありますが、どちらの記事もMT形式すべてに対応できそうです。

スパム撃退スクリプト – URL抽出阻止

2014年1月22日にA8.netのファンブログはSeesaa Blogのシステムをベースにして生まれ変わりました。よってファンブログ関連の記事は今では当てはまらない可能性があります。新しいファンブログのカスタマイズは別ブログ「ファンブログ テック」で詳しく書いていますので、そちらをご覧ください。

最近、スパムコメントやトラックバックが多くてウザいと言っている方がたくさんいます。

そこで、スパム対策スクリプトを書いてみました。このブログでは、意図どおりに動いています。

当ブログにスクリプトを設置したのは2013年6月15日午前0時ですが、今のところスパムはゼロです。ただ、このブログには元々スパムが少ないので、スクリプトの成果が出ているのかどうかは判断できません。

追記:

2013年6月18日04:09、2013年6月19日10:46、2013年6月20日15:04の3回、コメントスパムが一件ずつありました。ただし手入力の可能性があります。(*注1
(そのコメントのキャプチャを見るにはここをクリック)

スパムコメント

スパムコメント

手入力によるスパムの対策記事は「スパムを防ぐにはhref=の5文字と[/url]の6文字を禁止に!」です。

スパム送信側が、このページで公開したソースを読めばブロックは破られてしまいます。なので、ソースは非公開でこっそり使うのが正しいですが、あえて公開します。

詳しいことは後述しますが、本来、スパムの対策をJavaScriptで書くのは無意味です。ですが、あるスパムはHTMLを取得して解析し、コメントやトラックバックの送信先アドレスを抽出しているのが間違いありません。それで、この対策スクリプトが有効に作用するかどうかを探りたいと思います。

このスクリプトを使用中の、その他のブログ

イタリアンな日々
設置日:2013年06月15日
2013年6月17日トラックバックスパムあり(*注2
2013年6月17日以降のスパム:0
goods and life +
設置日:2013年06月18日
2013年6月18日以降のスパム:0
楽して稼ぎたい~お小遣い稼ぎ情報局~
設置日:2013年06月18日
2013年6月18日以降のスパム:0

*注2:2013年6月17日 「トラックバックでスパムフィルターが有効であることを知らせる」を無効にしないと、URLが読まれます。

このスクリプトはファンブログ専用です。ただ、ロジックを理解していただければ、ファンブログ以外でも改変して使えます。改変はご自由にどうぞ。

ちなみに、これを導入すると、JavaScriptが無効なブラウザからはコメントが送れなくなります。しかし、画像認証を使っていてもそれは同じです。

送信先URLを抽出できなくする

今回書いたスクリプトがやっているのは、URLの隠蔽です。URLを隠すことで抽出できなくします。

ファンブログのスキンに、次の2ヵ所があります。

{$BlogEntryTrackbackLink$}
{$BlogCommentPostUrl$}

{$BlogEntryTrackbackLink$}と書かれた場所には、トラックバックURLが書き込まれます。

同様に{$BlogCommentPostUrl$}には、コメント送信先URLが書き込まれます。

今回のスクリプトは、それを以下の手順で処理します。

  1. 2つのURLを該当個所に書き込まず、別の場所に書いておいて、そのHTMLをサーバーが送信する。
  2. HTMLをブラウザで読み込んだ後、別の場所に書かれているURLを正規の場所に書き直す。

スパム側はスパム側で、別のスクリプトを使ってURLを抽出しようとするでしょう。しかし、あるはずの場所にURLがなければ読み込めないと思います。

スクリプト導入の前処理

変更が必要なスキンは「1記事」だけです。「1記事」のスキンの2ヵ所を変更します。

まず{$BlogEntryTrackbackLink$}を削除します。結果は下の様になります。

変更前

<div id="trackbackText">
この記事へのトラックバックURL<br />
<SpamFilterTrackbackNotice><a>{$BlogEntryTrackbackLink$}</a>
</SpamFilterTrackbackNotice><br />
</div>
変更後

<div id="trackbackText">
この記事へのトラックバックURL<br />
<SpamFilterTrackbackNotice><a></a>
</SpamFilterTrackbackNotice><br />
</div>

次に{$BlogCommentPostUrl$}javascript:void(0);に変更します。

変更前

<div id="commentForm">
<BlogEntryIfAllowComments>
<BlogEntryIfAllowPostComments>
<h3 id="commentTitle">コメント</h3>
<div class="text">{$CommentErrMsg$} 
<form method="post" name="WriteCommentForm" action="{$BlogCommentPostUrl$}">
<table border="0" cellspacing="0" cellpadding="0">
(以下略)
変更後

<div id="commentForm">
<BlogEntryIfAllowComments>
<BlogEntryIfAllowPostComments>
<h3 id="commentTitle">コメント</h3>
<div class="text">{$CommentErrMsg$} 
<form method="post" name="WriteCommentForm" action="javascript:void(0);">
<table border="0" cellspacing="0" cellpadding="0">
(以下略)

これであるハズの場所に、URLはなくなりました。

スクリプトの導入

URLを本来の場所に書き戻すために、今回作ったスクリプトはこれです。スパム送信側は、これがわからないのでURLは見つからないはずです。

<!-- スパム撃退スクリプト ここから -->
<script type="text/javascript"><!--
(function(){
	var tb=document.querySelector('div#trackbackText a');
	var form=document.querySelector('div#commentForm form');

	if(tb){
		tb.innerHTML='{$BlogEntryTrackbackLink$}';
	}

	if(form){
		form.action='{$BlogCommentPostUrl$}';
	}
})();//-->
</script>
<!-- スパム撃退スクリプト ここまで -->

このスクリプトを、そのままコピーして「1記事」スキンの最後の方にある{$BlogAccessCounter$}の上に追加します。スクリプト1行目の<!– スパム撃退スクリプト ここから –>と、最後の<!– スパム撃退スクリプト ここまで –>は、なくてもいいのですが、後で削除や書きかえを行なう際に目印になるので、このまま書き込んでください。

<div id="footer">
</div><!-- /footer -->

</div><!-- /container -->
ここにスクリプトを追加
{$BlogAccessCounter$}
</body>
</html>

スクリプトの赤字部分trackbackTextcommentFormは、スキンのidと照合して、同じ名前かどうかを確かめてください。もし名前が違うなら、スキンのidと同じ名前に書きかえて使ってください。

“スパム撃退スクリプト – URL抽出阻止” の続きを読む

「にほんブログ村」のブログパーツを速くする – スクリプトが使えないブログでも使用可能に!

「にほんブログ村」のブログパーツは遅いのか?

ブログ「化学物質過敏症@自宅療養中~稼げるかも日記」の記事「にほんブログ村のブログパーツのジレンマ」で、「にほんブログ村」のブログパーツを紹介していて、それを付けたらランキングは上がったけど、ブログの表示速度が3秒近く遅くなったと書いてありました。

その記事には「PVアクセスランキング」のブログパーツと書いてあるのですが「にほんブログ村」には今のところブログパーツは「にほんブログ村ブログパーツ(β)」のひとつしかないので、これの事だと思います。せっかくランキングが上がったのに外すのはもったいない。そう思ってソースを見てみました。

結論として、そのソースで3秒近くも遅くなるとは考えられないのです。が、気になるのであればスクリプトを使わなければいいのではと思って、こんなツールを作って見ました。それは、こういうものです。

「にほんブログ村」のスクリプトは、何をやっているかというと、そのブログ専用の「データ取得コード」を自動生成します。どうやってデータを取得しているのかというとiframeです。今回iframeの説明は割愛しますが、ブログのページを読み込む度に、毎回スクリプトが走って「データ取得コード」を生成します。ただし、ひとつのブログに生成されるのは、毎回必ず同じコードです。

ということは事前に、その「データ取得コード」を生成しておいて、自分のブログに貼り付けておけば、スクリプトは走る必要がないわけです。しかも表示される結果はまったく同じものです。

スクリプトを介して生成されるのと、まったく同じソースを自前で作るだけなので、ランキング操作の不正になるとは思いませんが、使う場合は自己責任でやってください。

余談ですが、スクリプトを貼って表示が遅くなったのだとしたら、恐らく原因はスクリプトではなく「にほんブログ村」からデータが送られてくるのに時間がかかっている為だと思います。ですからこれを貼っても表示速度は、ほとんど変わらないのではないかと思いますが、一度貼り替えて試してみるのがよいと思います。

ただ、JavaScriptが使えないブログでも貼れるようになるというメリットはあると思います。

“「にほんブログ村」のブログパーツを速くする – スクリプトが使えないブログでも使用可能に!” の続きを読む

ボタンでYouTubeの動画を表示させる

YouTubeは自分も好きですが、ブログの中にたくさん貼ると重いです。ひとつのページにいくつもあると、そのページを開くのが大変です。

本当は、数を少なくするのがイチバンなんですが、どうしてもたくさん貼りたいというときに、ビデオではなくボタンにしたらどうだろう?ボタンを押したものだけ、そのビデオを表示するようにすれば少しは軽くなるのではないか?ということで作ってみました。

これはファンブログだけでなく、どのブログでも使えます。ただ、ビデオが表示されているから、見てみたくなるというのはあると思うので、使わない方がいい場合が多いとは思います。と、身も蓋もないことを言ってみる。

サンプル

船橋市の梨の妖精ふなっしー♪
2000年に一度だけ、この世に現れる、愛の戦士。
今日も元気に、梨汁ブシャー:;.,*+
こころを込めて踊ります♪

ふなっしーのcall me maybeを見る!

使い方

まずはYouTubeへ行き、通常のソースを取ってきます。最初に「共有」をクリック。そして「埋め込みコード」をクリックします。動画のサイズなどの設定をお好みに合わせたら、表示されている「埋め込みコード」をコピーします。

YouTube

埋め込みコード」を取ってきたら、この下の枠に、その「埋め込みコード」を張り付けてください。取ってきたのが正しいコードなら、貼り付け終わると、ボタンにするために「独自に生成されたコード」が表示されます。あとは、それをコピーして自分のブログの表示させたい場所に貼り付ければ完了です。

この下に表示したいYoutubeのソースを張り付けてください。

どなたでも、ご自由にお使いいただいて構いませんが、使ったらコメント欄に「使った」とだけ書いておいてください。

ソースコード

この下は、興味のある方だけご覧ください。生成されるソースコードは次のようになります。

<script type="text/javascript" src="http://api.dwm.me/js/youtube_show.js" charset="utf-8"></script>
<script type="text/javascript">youtube.button(640,480,'http:\/\/www.youtube.com/embed/RI6svNFmRAQ');</script>

1行目のスクリプトで、外部の.jsファイルを読み込んでいます。その中身は以下のとおりです。

var youtube_class=function(){
	this.count=0;
};

youtube_class.prototype.show=function(id,width,height,src){
	document.getElementById(id).innerHTML='<iframe width="'
		+width+'" height="'+height+'" src="'+src
		+'" frameborder="0" allowfullscreen></iframe>';
};

youtube_class.prototype.button=function(width,height,src){
	document.write('<input type="button" value="youtubeを表示" '
		+'onclick="youtube.show(\'youtube_'+this.count+'\','
		+width+','+height+',\''+src+'\');" /><br /><br />'
		+'<div id="youtube_'+(this.count++)+'"></div>');
};

var youtube=youtube?youtube:new youtube_class();

本当は外部ファイルにせずに、そのままコピペしてもらいたいんですが、少し長いだけでヒルんでしまう方がいるので、貼り付けるソースを短くしたかった。それで外部ファイルにしています。

“ボタンでYouTubeの動画を表示させる” の続きを読む