DISQUS は標準で IntenseDebate, JS-Kit, Movable Type, WordPress のコ
メントをインポートすることが出来ます。「くっつき BBS
」のインポート
は当然サポートされていません。
幸い、WWW-Disqus
という DISQUS API
を叩く Perl モジュールがあったの
で、これでインポートすることにしました。ありがたいことです。
これを使えば「くっつき BBS」に限らず、どのコメントシステムからも移
行は可能だと思います。
WWW-Disqus は若干古くなって動かなかったので、以下の修正が必要でした。
Index: lib/WWW/Disqus.pm
===================================================================
--- lib/WWW/Disqus.pm (リビジョン 695)
+++ lib/WWW/Disqus.pm (作業コピー)
@@ -57,8 +57,7 @@
my $obj = shift;
return 1
if $obj->{succeeded}
- && $obj->{succeeded}->{value}
- && $obj->{succeeded}->{value} eq 'true';
+ && $obj->{succeeded} eq 'true';
confess $obj->{message};
}
@@ -81,7 +80,7 @@
disqus_api_url( "get_forum_list", user_api_key => $user_api_key ) );
confess 'Failed to access DISQUS API: ' . $res->status_line
unless $res->is_success;
- my $obj = $this->{json}->jsonToObj( $res->content );
+ my $obj = $this->{json}->decode( $res->content );
return $obj->{message} if is_succeeded($obj);
}
@@ -99,7 +98,7 @@
);
confess 'Failed to access DISQUS API: ' . $res->status_line
unless $res->is_success;
- my $obj = $this->{json}->jsonToObj( $res->content );
+ my $obj = $this->{json}->decode( $res->content );
return $obj->{message} if is_succeeded($obj);
}
@@ -118,7 +117,7 @@
);
confess 'Failed to access DISQUS API: ' . $res->status_line
unless $res->is_success;
- my $obj = $this->{json}->jsonToObj( $res->content );
+ my $obj = $this->{json}->decode( $res->content );
return $obj->{message} if is_succeeded($obj);
}
@@ -131,7 +130,7 @@
disqus_api_url( "get_thread_list", forum_api_key => $forum_api_key ) );
confess 'Failed to access DISQUS API: ' . $res->status_line
unless $res->is_success;
- my $obj = $this->{json}->jsonToObj( $res->content );
+ my $obj = $this->{json}->decode( $res->content );
return $obj->{message} if is_succeeded($obj);
}
@@ -149,7 +148,7 @@
);
confess 'Failed to access DISQUS API: ' . $res->status_line
unless $res->is_success;
- my $obj = $this->{json}->jsonToObj( $res->content );
+ my $obj = $this->{json}->decode( $res->content );
return $obj->{message} if is_succeeded($obj);
}
@@ -167,7 +166,7 @@
);
confess 'Failed to access DISQUS API: ' . $res->status_line
unless $res->is_success;
- my $obj = $this->{json}->jsonToObj( $res->content );
+ my $obj = $this->{json}->decode( $res->content );
return $obj->{message} if is_succeeded($obj);
}
@@ -185,7 +184,7 @@
);
confess 'Failed to access DISQUS API: ' . $res->status_line
unless $res->is_success;
- my $obj = $this->{json}->jsonToObj( $res->content );
+ my $obj = $this->{json}->decode( $res->content );
return $obj->{message} if is_succeeded($obj);
}
@@ -203,7 +202,7 @@
);
confess 'Failed to access DISQUS API: ' . $res->status_line
unless $res->is_success;
- my $obj = $this->{json}->jsonToObj( $res->content );
+ my $obj = $this->{json}->decode( $res->content );
return $obj->{message} if is_succeeded($obj);
}
@@ -221,7 +220,7 @@
);
confess 'Failed to access DISQUS API: ' . $res->status_line
unless $res->is_success;
- my $obj = $this->{json}->jsonToObj( $res->content );
+ my $obj = $this->{json}->decode( $res->content );
return $obj->{message} if is_succeeded($obj);
}
WWW-Disqus のページのサンプルを参考にして、インポートしました。
#!/usr/bin/perl
use strict;
use warnings;
use WWW::Disqus;
# (★後述)
my $forum_name = 'your forum short name';
my $user_api_key = 'your user api key';
my $api = WWW::Disqus->new;
$api->user_api_key($user_api_key);
my $forum_id = $api->get_forum_id($forum_name);
my $forum_api_key = $api->get_forum_api_key($forum_id);
$api->forum_api_key($forum_api_key);
# The above 3 lines can be rewritten by using a helper method:
# $api->set_forum_api_key_by_forum_name($forum_name);
# (★後述)
my $identifier = 'test';
my $title = 'title';
my $url = "http://www.example.com/test.html";
# スレッドがなかったら作成。さらにスレッド情報を返す。
my $thread = $api->thread_by_identifier(
identifier => $identifier,
title => $title,
);
# まだ関連付けられていなければ、スレッドを URL と関連付ける。
unless ($thread->{thread}->{url}) {
$api->update_thread(
thread_id => $thread->{thread}->{id},
url => $url,
);
}
# これでコメントをポスト(★後述)
$api->create_post(
thread_id => $thread->{thread}->{id},
author_name => 'マスタカ',
author_email => '[email protected]',
message => '日本語も OK
このように改行も出来ます。',
# ↑ここまで必須
# ↓ここから任意
# UTC で指定する必要があるようなので、日本時間を 4 時間プラスする。
created_at => '2009-10-18T02:02',
author_url => 'http://www.example.com/',
);
use Data::Dumper;
# print Dumper( $api->get_thread_list() );
print Dumper( $thread );
上のスクリプトを見ると分かると思いますが、今回は手動でインポートし
ました。数が少なかったので、今回はこれが一番良い方法かと。
$forum_name は DISQUS の管理画面 SETTING->General から確認できる
Website shortname です。
$user_api_key は DISQUS にログインした状態で
http://disqus.com/api/get_my_key/
を参照すると取得出来ます。
これはとても大事な key なので、誰にも知られてはいけません。
$identifier, $title, $url は記事毎に設定します。
$api->create_post() の引数は、コメント毎に設定します。日本語のコメ
ントがある場合、スクリプトの文字コードは UTF-8 にしてください。