トップ «前の日記(2004-10-04) 最新 次の日記(2004-10-08)» 編集

2002|01|02|03|04|05|06|07|08|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|02|03|04|07|

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のコードを追う気力がないんでパス。

Tags: TypeKey

_ 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日くらい暇があって、サーバーに余力があればだいたい動くものはできそうだけど、そんな余裕はないだろうな。

Tags: SNS TypeKey
本日のツッコミ(全2件) [ツッコミを入れる]
_ ( ´∀`)つ (2004-12-25 18:57)

ちなみにコードのライセンスは何ですか?

_ ishinao (2004-12-25 20:56)

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