このお話は、mixiというソーシャルネットワークサービス内のコミュニティ機能を活用する為のツールの物語です。このツールは、指定した複数のmixiコミュニティに共通して参加しているメンバーを探し出すウェブアプリケーションです。
WWW::Mixiを使って取得したデータをXMLで返せるようにして、Ajax化し、クライアント(ブラウザ)側の潤沢なメモリとCPUを食い潰す恐ろしいウェブアプリ(という名のブラウザクラッシャー)を作ろうかと考えてはみたものの…
考えちゃったらもう作らないと落ち着かなくなったので作りました。JavaScriptでXMLHttpRequestでDOMでDHTMLでCSSな感じの、巷ではAjaxとか言ったり言わなかったりするかもしれない、おニューバージョンな「mixiコミュニティ共通メンバー検索 2.0」っす。
新バージョンって意味の2.0とWeb2.0がかかってるような風情のネーミングです。そもそも、AjaxだとかWeb2.0だとかがどんな定義なのか技術なのかよくわかんないですけど、今朝、向かいに住んでるおばあちゃんに挨拶のついでに聞いてみたら「たぶん、それが2.0。うちの孫も2.0。」って言ってたので、これが2.0です。
mixiコミュニティ共通メンバー検索 2.0
とりあえず先に使い方の説明。基本的には前の「mixiコミュニティ共通メンバー検索(以降、1.0)」と同じような感じでコミュニティページのURL、もしくは、コミュニティidを入力して情報取得ボタン押す、って感じですが、2.0は無駄に今風のウェブアプリケーションインターフェースっつーか、取得したメンバー情報をDHTMLでいろいろと見られるようになってますんでその辺が今風。
それから、後先考えないキワどいコーディングの寄せ集めで作り上げた結果、IE6.0でしか動かない模様ですのでご了承くださいな。(動くようにしたい気持ちだけは人一倍持ってます。)
<使い方>
1.
mixiコミュニティ共通メンバー検索 2.0を開くと入力欄があるので、そこに対象にしたいコミュニティページのURL、またはコミュニティidを入力して、情報取得ボタンを押します。
(メンバー情報取得が行われると)
「コミュニティ名」と書いてあるところには、その下に表示されるメンバー情報がどのコミュニティに参加してる情報かを表示します。「リストページ」と書いてあるところには、メンバー情報リストをページのように見れるようにするためのボタンが表示されます。この表示はメンバー情報取得直後状態では表示されておらず、画面左にリスト表示されるコミュニティ情報の[詳細]をクリックすることでそのコミュニティに参加してるメンバー情報リストと一緒に更新されるようになっています。
2.
情報取得ボタンを押すと、サーバにメンバー情報のリクエストを行います。(500人程度のメンバー情報取得に10秒はかかります。)
3.
メンバー情報の取得に成功した場合は、左側に指定したコミュニティの情報、右側にそのコミュニティに参加しているメンバー情報がリストされます。コミュニティ名のところに取得したコミュニティ名が表示されています。(クリックするとコミュニティトップページへ別窓リンクします。)
コミュニティ画像をクリックするとそのコミュニティトップページへ別窓リンクします。メンバー画像をクリックするとそのメンバーのトップページへ別窓リンクします。
4.
左側のコミュニティ情報にある[詳細]をマウスオーバーすると、そのコミュニティのトップページにある詳細情報を表示します。マウスアウトで戻ります。また、クリックした場合は右側のメンバー情報リスト部分にそのコミュニティのメンバー情報を表示します。リストページも表示されるので、これを利用してコミュニティに参加している取得済みメンバーの全ての情報を見ることが出来ます。
5.
コミュニティ情報の背景がベージュ色で「メンバー追加」ボタンが表示されている場合には、そのコミュニティのメンバー情報がまだ全て取得し切れてないので、「メンバー追加」ボタンを押すことで、メンバー情報を引き続き追加取得することが出来ます。ボタンが表示され続けている限り、メンバーの追加が必要です。
コミュニティ情報にあるコミュニティ名に付いている「(数字/数字)」は、(取得済みメンバー数/参加メンバー数)を示しています。
6.
1つ目のコミュニティのメンバーを取得完了したら(コミュニティ情報の背景が白くなります)、2つ目のコミュニティのメンバー情報を取得します。手順は1つ目のときと同じです。以降、このコミュニティ情報の追加を行いたい場合には同様に行っていきます。
7.
2つ目のコミュニティのメンバー情報の取得が完了したら(左側のコミュニティ情報リスト表示に背景が白い2つのコミュニティ情報が並んだら)、次は共通メンバー検索を行います。
8.
コミュニティ情報のコミュニティ名の下に表示された「比較対象に」というチェックボックスにチェックを入れていくと比較対象として動的に評価を行い、比較対象が2つ以上選択された時点で、右側のメンバー情報リストに共通メンバーが表示されるようになります。
比較対象に指定されたコミュニティ情報の背景はオレンジに、検索された共通メンバーは背景がベージュで表示されています。
9.
これ以降、さらにコミュニティ情報の追加を行っていき、比較対象の条件を複数に増やしていくことも可能です。(比較対象チェックボックスの状態は保持されません。)
10.
とりあえずそんな感じでメンバー数多いコミュニティを次々取得しまくってると、いつかはブラウザがハングアップしてしまう自体にたぶん陥ると思うので、お使いのPCとご相談の上、程ほどにエンジョイしてみてください。
11.
思いのほか頻繁に、エラーが発生しまくりますが、そんなときはしばらくお茶でも飲んでゆっくりしてから再度チャレンジしてみてください。コミュニティの指定が不正とか以外のエラーの多くはシステムへの負荷が集中しているときに出るものですので、システムをいたわりながらよろしくお願いします。
5回くらいやってどうにもエラーが続くようなら、たぶん今日は運が悪いってことで明日にでもまた気を取り直してチャレンジしてみてください。明日は明日の風が吹く。
と、そんな感じで使うもんだと思います。
で、1.0からの変更点とか、これ作りながら気が付いたこととか、大人になったらやりたいこととか、将来の夢とか。
まず、この2.0はメンバー情報をサーバよりXMLでバリバリ取得して、JavaScriptのオブジェクトに片っ端から突っ込んでいじり倒す感じになってるので、そのメンバー情報の取得上限はJavaScriptのオブジェクトがおかしくなるまでイケると思います。でも、JavaScriptの実装仕様とか全然知らないので、思いがけない制限とかかるかも知れませんけど、知ってる人いたらむしろ教えて。
そんないい加減な作りなので動かす時はIE落ちるかもしれないので気を付けてね。他のアプリも引きずってPCごと落ちるかもしれないので大切なファイルは予め保存しておきましょう。
mixiサービスとの接続、メンバー情報の取得には、今回の2.0もWWW::Mixiを使わせてもらってます。バージョンは0.47。
で、2.0ではそのバージョン0.47をベースに2点、独自に改造をしました。
1つ目。コミュニティトップページを取得するというメソッドが無かったので新規に追加した。トップページ右側の詳細情報取得はプロフィールトップページ右側の情報取得と似たようなもんだったのでほぼパクった。
2つ目。アダルト(成人向け)コミュニティ(主にエロいコミュニティ)のトップページ情報取得の際に同意があるのでそれを認証してトップページ取得できるようにした。(リクエストをPOSTに変えた)
そんな感じ。で、このWWW::MixiモジュールをラップしているCGI、クライアントからXMLHttpRequestでリクエスト出してるCGIにも2.0でいろいろ変更加えた。というか、1.0のやつとは別物だけど。
メンバー情報取得上限を件数固定(1000件とかにしてた)から、プロセスタイムでタイムアウトする方式に変えた。昼間は1000件取得余裕でも夜間とかmixi混雑時間だと時間かかりすぎてプロセスタイムアウトで処理ぶっちぎられてばっかだったので、最初からタイムアウト以内で情報を取れるだけ取ってくるような動きに変えた。なので、調子いい昼間だと1000件以上を1回で取得できるのに夜だと800件くらいしか取得できなかったりする。(それどころか夜だとすぐエラーになる)
なんかAjaxでサクサクと情報をいじれるようになってくると、他の情報も同じようにクライアントに展開していじってみたくなるよなあ。最近だとmixiミュージックとかでみんなのお気に入りの音楽情報とかもmixiのDBにストックされるようになったわけだし、この情報を再利用、再構築するとまたオモロイと思うんだけどなあ。延長線上で「mixiミュージック共通メンバー検索」とか。アーティストのお気に入りメンバー一覧って全員表示されないので現段階では実現不可能だけど。
とりあえずそういうわけで、一応完成した様子なので公開しますので、使いたい人は適当に使ってみてください。あれこれと自分の興味あるコミュニティを片っ端から情報取得して、あっちこっちのコミュニティ同士を比較チェックして共通メンバー探すのなかなかオモシロいよ。
ハジメマシテ。
“こんなんあったらいいなぁ。作ろうかなぁ”と思ってたら作ってらっしゃったのでびっくりしました。
便利に使わせて頂きます。
と思ったらエラーコード102とか言われちゃいました。
しばらく間を空けてから再チャレンジさせていただきます…。
ああ、たぶんもう動かないかもです。
mixiのほうの仕様変更を追ってないのでもうmixiのHTMLをパース出来なくなってるかも。
あれだったら最新版のWWW::Mixi使って最新版作ってみてください!!