2004-10-05 [長年日記]
_ 編集にTypeKeyログインが必要なPukiWiki (01:41)
まじめに改造するのがつらいんで必要最低限のみ。まずlib/typekey.incというファイル名で、
function check_typekey() {
define('TYPEKEY_SESSION_NAME', 'TYPEKEY_SESSION_NAME');
define('TYPEKEY_TOKEN', 'TYPEKEY_TOKEN');
define('TYPEKEY_URL', 'https://www.typekey.com/t/typekey/login');
session_start();
if (!isset($_SESSION[TYPEKEY_SESSION_NAME])) {
if (isset($_GET['name'])) {
require_once("Auth/TypeKey.php");
$tk = new Auth_TypeKey(array('version' => '1.1', 'token' => TYPEKEY_TOKEN));
$tk_result = $tk->verifyTypeKey($_GET);
if (PEAR::isError($tk_result)) {
die($tk_result->getMessage());
} else {
$_SESSION[TYPEKEY_SESSION_NAME] = array(
'name' => $_GET['name'],
'nick' => $_GET['nick'],
'mail' => $_GET['email']
);
return TRUE;
}
}
} else {
return TRUE;
}
$tk_url = TYPEKEY_URL.'?&v=1.1&need_email=1&t='.TYPEKEY_TOKEN.
'&_return='.urlencode('http://'.$_SERVER['HTTP_HOST'].
$_SERVER['REQUEST_URI'].'&');
header('Location: '.$tk_url);
die;
}
もちろんTokenの設定は自分のものに。あと、自サイトのURLもちゃんとTypeKeyサーバーで登録しておく必要がある。そしてplugin/edit.inc.phpの関数の頭に、
function plugin_edit_action()
{
require_once LIB_DIR.'typekey.inc';
check_typekey();
global $vars, $_title_edit;
なんて感じのコードを追加。リダイレクトURLを生成しているところの、$_SERVER['HTTP_HOST']は嘘かも。要は元のURLに戻りたいんだけど、どうやるんだっけ? $_SERVER['SERVER_NAME']は取れなかったんだよな。
ともかく上記のようにすると、編集リンクをクリックしたらTypeKeyのログイン画面に飛ぶ。ログインに成功すると元のページに戻ってきて、DSAのverifyをして、問題なければセッションにユーザー情報を保存する。以降セッションにユーザー情報が入っていればいちいちリダイレクトしない。
ユーザー情報はその後全然使っていないけど、本当は編集した人の情報として記録した方がいいんだろう。でもPukiWikiのコードを追う気力がないんでパス。
_ TypeKey SNS (18:22)
今日は隙間を見てTypeKeyを使ったSNS風味のシステムを設計してみたりしているんだけど、これ結構楽しそうだな。SNSというよりは、各人がそれぞれ公開できる情報を持ち寄って、それらの情報を人間をキーにフィルタリングして表示するイメージ。
最初の登録は誰でも(TypeKeyアカウントを作れば)できて、さらに友達登録も誰に対してでも行える。友達登録は公開・非公開の2種類あり、非公開な友達は他人からは見えない。友達というよりは、「私はこの人(の動向)に興味があります」的なイメージ。友達の友達的な関係は、両思いだった場合のみたどっていくようにするといいのかな。その辺はまだノーアイディア。
日記のRSSを登録して、アイテムを時系列でソートして、友達のものだけ選択して表示するってのは、単なるRSSアンテナだな。昔wikistmaniaでやっていたものをまた作るのか。OPMLを出力してbloglinesあたりに突っ込んでくれというのもありかも。
コミュニティ相当のものは、WikiLikeみたいに編集可能なドキュメント+スレッド掲示板で構成。ドキュメントも掲示板もコミュニティ単位で何個でも作れる。スレッドで議論 or だべって、何らかの成果物的なものができたらドキュメントにまとめるイメージ。それぞれのread/write権限はpublic、user、member、adminで設定可能。コミュニティのadminは作成者がまずadminになって、以降admin権限を持つ者が他のadminを追加する。
ついでにMM/本のメモのDBを使ってレビュー機能も作るか。あのDBにわかりやすいUIをかぶせるだけですみそうだ。というか、MMで本(Amazon)以外のものを扱えるように拡張しちゃえば、そのデータを人間をキーにフィルタリングするだけで、結構いろいろ使えるものができると思うんだけど。
というかもともとMMはそういう目的で作っているんだけど、本読み管理DBとして使えるようになった段階で満足しちゃって、そこから先に進む気力がなくなった。SNSと絡めればちょっとはやる気が出るかな。現在でも人をキーにした集計とかできるけど、あれを友人の範囲までをキーにした集計にすれば、SNSっぽいデータがでてくるよね。ちなみに本以外のデータってのは、たとえばニュースクリッピングとかテレビ番組やイベントの情報とか、そういうのね。
あと、できればほかのサーバーで情報を利用するためのAPIも用意しておきたいな。あるコミュニティ参加者一覧を取得するAPIとか、あるユーザーの友達情報を取得するAPIとか。それがあれば、外部のWikiとかに情報が派生したときに、権限DBだけをAPI経由で取得して使うことができる。
3日くらい暇があって、サーバーに余力があればだいたい動くものはできそうだけど、そんな余裕はないだろうな。



ちなみにコードのライセンスは何ですか?
単なるサンプルコード的なものなんで、パブリックドメインというか、特に制限なく自由に使ってください。