goo blog サービス終了のお知らせ 

DEVELOPMENTOR*LEARNING RESOURCE LAB.

ソフトウェア開発現場の視点からソフトウェアと開発者の価値を高める「ホットな何か」をお届けします。(休止)

インスタントストアを使って Amazon.co.jp 在庫一掃 大セール に参加してみる

2007年05月18日 | Web 2.0
Amazonインスタントストア はベータ版の頃に少し試したくらいでしたが、正式版を見てみるといろいろと新しい機能が追加されているようです。

その中の1つがテンプレート機能です。あらかじめ用意されたテンプレートを選択すると、そのテーマに沿ったインスタントストアが作成できます。作成した後、そのインスタントストアをカスタマイズすればいいので、導入時の面倒さがないのがいいですね。

アソシエイトプログラムのメールで流れてきましたが、↓のようなテンプレートを追加したそうです。今までとはちょっと違った販促アプローチなので興味深いです。

Amazon.co.jp 在庫一掃 大セール (インスタントストア)

あと自分自身のインスタントストアをウィジェットとしてページにも貼り付けられるとのこと。定型的な推薦でもなく、自動的なコンテンツマッチでもない、HTMLやそのテンプレートを編集する必要もない…ってところで、中間的な存在ですね。いいかも。

↓ほかのブログでもきっとインスタントストアに反応しているハズ。

BLOGRANGER 2.0 > Amazonインスタントストア

はじめよう リフォーム DIY 7つ道具 Amazon.co.jp特別セット

B000MXFZZA

関連商品
by G-Tools


MASHUPEDIA の中から、このブログで紹介した API を探してみました。

2007年05月10日 | Web 2.0
: MASHUPEDIA - マッシュペディア - : Web API x Mashup ( http://www.mashupedia.jp/ ) で紹介している API の中から、このブログで紹介した API を探してみました。↓こんな感じです。結果からすると MASHUPEDIA で紹介している API は、まだまだ少ないといったところでしょうか。API もユーザが参加して登録できるようにすればいいのにね。

Google Maps API

Mashupedia::Google Maps APIの画像

マイニングもできるブログ検索「BLOGRANGER API」

Mashupedia::マイニングもできるブログ検索「BLOGRANGER API 」の画像

Google Gadgets API

Mashupedia::Google Gadgets APIの画像

AOL Video Search APIs

Mashupedia::AOL Video Search APIsの画像



郵便番号から住所を検索できるクロスドメインに対応した Ajax API をリリース!

2007年04月04日 | Web 2.0

Postal Search APIs & Solutions
http://developmentor.lrlab.to/postal/



Postal Search APIs & Solutions は、郵便番号と住所を軸に様々なデータを検索できる API と、その API を活用したアプリケーションの提案や事例を紹介するサービスです。本サービスは 2007年3月31日から サインアップ (無料) することで、どなたでもすぐに利用できるようになりました。


Postal Search APIs & Solutions は、利用者のフィードバックを尊重しながら進化し続けたい BETA サービスです。はじめは Postal Search Ajax API という郵便番号から住所を検索できるクロスドメインに対応した JavaScript ベースの API と、その API を使ったサンプルを提供します。


Postal Search Ajax API API は Postal Search APIs & Solutions のサーバ側で検索する仕組みなので、HTML ページに JavaScript コードを記述するだけで、あなたのサイトに検索機能を追加できます。郵便番号と住所のデータは Postal Search APIs & Solutions のサーバ側で管理するため、あなたのサイトでデータを格納したり、最新データを維持する必要もありません。


この機会に Postal Search Ajax API を体験してみてください。サインアップ (無料) は上のリンクからどうぞ。


Snap Preview Anywhere を DHTML で使ってみた。

2007年03月26日 | Web 2.0

Snap Preview Anywhere は見た目に働きかける楽しいサービスなんですが、 WEBページがロードした時点でのリンク先がプレビューの対象なんですよね。 JavaScriptを使ってコンテンツを生成して変化させるページだとプレビューが表示されないんです。

諦め切れないところもあるので、試しにJavaScriptコードの中からプレビューを仕掛けるようにしてみました。↓こんな感じです。 コンテナは BLOGRANGER API を使っています。ブログのエントリを検索して、その検索したエントリとブログサイトのプレビューを表示します。

View example

Snap Preview Anywhere のJavaScriptコードをロードすると snap_preview_anywhere というオブジェクトが生成されています。そのオブジェクトの add_link_events メソッドを使うと、指定した要素にプレビューのイベントが仕掛けられるようです。

    var a = document.createElement('a');
    a.href = v.url;
    a.appendChild(document.createTextNode(v.title));
    var entry = document.createElement('div');
    entry.className = 'entry';
    entry.appendChild(a);

    snap_preview_anywhere.add_link_events(a);

上記は Snap Preview Anywhere の仕様(非公式も含めて)ではないと思いますので、試すときはご自身の責任でお願いしますね。


Googleパーソナライズドホームにお気に入りのBLOGRANGERパーツをどんどん追加する

2007年01月30日 | Web 2.0

GoogleパーソナライズドホームにBLOGRANGERパーツを表示してみる」で作ったGoogle Gadgetは、あらかじめ指定したBLOGRANGERパーツしか表示できませんでした。が、ちょこっと改良して、みなさんがお気に入りのBLOGRANGERパーツを表示できるようにしました。

改良したGoogle Gadgetを使うと、Googleパーソナライズドホームにお気に入りのBLOGRANGERパーツをどんどんと追加できちゃいます。↓こんな感じです。BLOGRANGERパーツを3つほど追加してみた様子です。

 

↓次のボタンをクリックすると、改良したGoogle GadgetをGoogleパーソナライズドホームに追加できます。また、こちらのページではBLOGRANGERパーツが動く様子を確認してから追加できます。

Add to Google

Google Gadgetを追加すると、はじめは「naoyaのはてなダイアリー」についてというBLOGRANGERパーツを表示します。お気に入りのBLOGRANGERパーツを指定したいときは、Google Gadgetのタイトルの編集リンクをクリックします。すると↓次のような編集フォームが表示されます。

その編集フォームの「番」という入力ボックスにBLOGRANGERパーツの番?を指定します。そして保存ボタンをクリックすると、指定した「番」のBLOGRANGERパーツが表示されるようになります。

入力ボックスに指定する「番」は、あなたのBLOGRANGERパーツの下の部分を見れば確認できます。↓こんな感じです。例えば「BLOGRANGER 6号 (1301番)」でしたら、括弧の中の「1301」が「番」にあたります。

改良したGoogle GadgetのXMLファイルもこちらのページに公開しておきます。ご自由にお使いください。


東京近郊レジャースポット案内 POWERED BY Yahoo!地図情報

2007年01月30日 | Web 2.0

Google Mapsの測地系をYahoo!地図情報の測地系に変換するYGLatLng」の続きです。

レジャースポットの定義をファイルに移動してデータとページを分離する」で作成したGoogle MapsとBLOGRANGERパーツのマッシュアップアプリをYahoo!地図情報に入れ替えてみました。↓こんな感じです。


View example

↓trueを指定してスライドバーを有効にしました。地図の左上に表示されます。

  var map = new YahooMapsCtrl('map', new YGLatLng(35.67063830229653, 139.77479730935804), 5);
  map.setVisibleSliderbar(true);

↓trueを指定して、地図上のアイコンをクリックすると吹き出しを表示するようにしました。falseを指定すると、地図上のアイコンをポイントするだけで吹き出しが表示されます。ちなみにfalseが初期値です。

  map.setEnableClickPopup(true);

↓前作のGoogle Mapsと同じくレジャースポットのデータをXMLHttpRequestを使ってサーバから取得しています。

  var request = new Ajax.Request('spot.txt', {
    method: 'get', asynchronous : false
  }).transport;
  if (request.status!=200)
    return alert(request.status+' '+request.statusText);
  var spots = eval('('+request.responseText+')');

↓レジャースポットのデータを繰り返しながら、地図上にアイコンを追加しています。

  for (var i=0; i<spots.length; i++) {
    var spot = spots[i];
    if (spot.url.constructor != Array)
      spot.url = [spot.url];
    var popup = '';
    for (var j=0; j<spot.url.length; j++) {
      popup += '<iframe '
        + 'src="'+spot.url[j]+'" '
        + 'width="320" height="200" frameborder="0" '
        + 'marginwidth="2" marginheight="2" '
        + '></iframe>';
    }
    map.addIcon(i,
      new YGLatLng(spot.lat, spot.lng),
      popup,
      'L1'
    );
  }

Yahoo!地図情報はアイコンに識別子(ID)を付与し、そのIDを指定してアイコンを操作するインタフェースとなっています。Google MapsのGMarkerのようにオブジェクトで扱えるとよかったのに。

アイコンをクリック(またはポイント)すると吹き出しを表示するという想定があるみたい。アイコンを操作したとき吹き出しを表示する以外にも表現方法があると思うのだけれど。そういうときはどう実装すればいいのだろう。

吹き出しに表示する内容は事前に指定しておく必要があるみたい。アイコンのクリックなど、イベントが発生するそのときに吹き出しに表示する内容を変えたいときはどう実装すればいいのだろう。

どうしてもGoogle Mapsと比較してしまいますね。もう少し使ってみるとYahoo!地図情報のコンセプトを感じ取れるかもしれません。Yahoo!地図情報と実装が同じ?(であろう)アルプス社のサイトも参考にしてみます。それまではGoogle Mapsとの比較を中心にいろいろと試してみます。


Google Mapsの測地系をYahoo!地図情報の測地系に変換するYGLatLng

2007年01月25日 | Web 2.0

Yahoo!地図情報(Webサービス)のサンプルを使ってみました。」の続きです。

今まで作ってきたGoogle MapsのAjaxアプリをYahoo!地図情報に移植しようとしましたが、Google MapsとYahoo!地図情報では測地系(緯度経度)が異なるため、Google Mapsの測地系をYahoo!地図情報の測地系に変換する必要がありました。

そこでGoogle Mapsの測地系をYahoo!地図情報の測地系に変換するYGLatLngクラスを用意してみました。その結果は↓こんな感じです。


View example

Google Mapsは世界測地系、Yahoo!地図情報は日本測地系(Tokyo 97?)を採用しています。そのため今回のケースでは、世界測地系を日本測地系に変換すればよいということ。

YGLatLagクラスのJavaScriptコードは次のとおりです。Google MapsのGLatLngクラスと同じように使えます。YGLatLagクラスを初期化すると、世界測地系を日本測地系に変換した後、YLLPointクラスを生成して返却します。

var YGLatLng = function(lat, lng) {
  return new YLLPoint(
    // http://blog.gpso.info/2006/08/post_2.html
    lat + lat * 0.00010696 - lng * 0.000017467 - 0.0046020,
    lng + lat * 0.000046047 + lng * 0.000083049 - 0.010041
  );
}

なお、世界測地系から日本測地系への変換は「Gpso.info 開発ブログ: 経度・緯度の表し方と変換」の計算式を使いました。ありがとうございます。その他にもいろいろな計算式が公開されていますので、とても役立ちます。

YGLatLngクラスの使い方は↓こんな感じです。Google Mapsをスクロールすると、Yahoo!地図情報のスクロールも追随するようにしてみましたので、YGLatLngクラスの妥当性を試すときにお使いください。

  var ymap = new YahooMapsCtrl("ymap", new YGLatLng(35.660347, 139.729121), 2);

  var gmap = new GMap2($('gmap'));
  gmap.addControl(new GSmallMapControl());
  gmap.addControl(new GMapTypeControl());
  gmap.setCenter(new GLatLng(35.660347, 139.729121), 17);
  GEvent.addListener(gmap, 'moveend', function() {
    var center = gmap.getCenter();
	ymap.moveTo(new YGLatLng(center.lat(), center.lng()));
  });

これで今まで作ってきたGoogle MapsのAjaxアプリをYahoo!地図情報に移植できそうです。


Googleパーソナライズドホームがちょっと変わったみたい!?

2007年01月23日 | Web 2.0

いま(1/23 22:30)気がついたのですが、Googleパーソナライズドホームがちょっと変わったようです。知らなかったのは私だけ?

ニュースなどのFeedを表示するウィジェットに[+]といった展開ボタンが付いています。どうやらこのボタンをクリックすると、Feedのdescription相当が表示できるみたい。

description相当だけかと思いきや、Feedによってはリッチな感じで広告が表示されたりしています。Feedをどこまで解析して表示しているのだろう・・・。


Yahoo!地図情報(Webサービス)のサンプルを使ってみました。

2007年01月23日 | Web 2.0

2006年(昨年)の12月中ごろからYahoo! Japanでも「Yahoo!デベロッパーネットワーク - Yahoo!地図情報」のWebサービスが使えるようになりました。

手始めに「Yahoo!地図情報」のサイトにあるサンプルコードをWebページに埋め込んでみました。↓こんな感じです。「googleマップ」と違って、いくつかのコントロールは初期値として有効になっているみたい。右上にZOOM IN/OUT、左上にMAP/AEROの切り替えがあります。


View example

「Yahoo!地図情報(その他のWebサービスも含めて)」を使うには「Yahoo! ID」が必要でした。さらに「Yahoo! ID」を使ってログインし、「アプリケーションID」を登録する必要もありました。この「アプリケーションID」は、Webページに貼り付けるソースコードに埋め込みます。

今まで作ってきた「googleマップ」のサンプルを「Yahoo!地図情報」に移植しようとしましたが、どうやら座標系が異なるようですね。座標系を変換する式(簡易なものがいい)を探すところからはじめます。


scriptタグでリダイレクトが機能するか実験してみた

2007年01月07日 | Web 2.0

scriptタグのsrc属性に指定したURLがリダイレクトするとき、リダイレクト先のJavaScriptファイルがロードされるかどうか実験してみます。

はじめに手軽に実験するため、ApacheのErrorDocumentを使って、scriptタグが「302 Found(旧Moved Temporarily)」のリダイレクトをどう扱うか試してみました。使えるのならRewriteEngineのほうがよいかも。

↓次のとおり.htaccessファイルを用意しました。レスポンスコードが403と404のとき、指定のJavaScriptファイルにリダイレクトしています。また403x.jsをリクエストすると、「403 Forbidden」になるように制限しています。

.htaccess

<Files "403x.js">
Order allow,deny
Deny from all
</Files>
ErrorDocument 403 http://developmentor.lrlab.to/json/403.js
ErrorDocument 404 http://developmentor.lrlab.to/json/404.js

↓リダイレクト先のJavaScriptファイルは次のとおりです。

404.js
document.write('404.js');
403.js
document.write('403.js');

↓次のとおり、リダイレクトするようにURLを指定してみます。

<script type="text/javascript" src="403x.js"></script>
<script type="text/javascript" src="404x.js"></script>

あなたのブラウザでも試せるようにファイルを公開しておきます。↓こんな感じです。

View example (403)
View example (404)

今回は次のブラウザとバージョンで試してみました。いずれのブラウザも期待どおり、リダイレクト先のJavaScriptファイルをロードしてくれました。

  • Firefox/1.5 (Win32)
  • IE 6.0 (Win32)
  • Opera 9.10 (Win32)

どうやら他のブラウザも同じように振舞ってくれそうな感じですね。


あなたがブックマークしたページに言及したブログを探せます

2006年12月13日 | Web 2.0

del.icio.usのブックマークに言及しているブログをBLOGRANGER APIで検索する」の続きです。あなたやお好きなdel.icio.us userを指定できるように改良してみました。↓こんな感じです。


View example

次のとおり、「ranger.cgi?」に続けてdel.icio.us userを指定します。ここでは「developmentor」を指定しています。なお、省略したり、書式に誤りがあるときは「developmentor」になります。

http://developmentor.lrlab.to/delicious/blogranger.cgi?developmentor

次のようなCGI/perlスクリプトで実現しています。JavaScritpコード中でquery_stringを取り出す方法を使って、JavaScriptコードのみで完結してもよかったのですが、なんとなく脆弱な印象があったのでCGI/perlという形にしました。

#!/usr/bin/perl
#!perl
## 
## blogranger.cgi
##
## Copyright(C) 2006 DEVELOPMENTORLEARNING RESOURCE LAB.
## http://blog.goo.ne.jp/developmentor/
##
## This code cannot be redistributed without
## permission from blog.goo.ne.jp/developmentor/
##
## v1.00 2006/12/13 00:00:00 
## 
use strict;
use CGI qw(:standard);
$CGI::POST_MAX=1024*1024*1; #1MB
use CGI::Carp qw(fatalsToBrowser);

##
my $kanjicode = 'utf8';
my $charset = 'UTF-8';
my $dir_tmpl = '.';

##
&main;
exit;

##
sub main {
  my $user = param('keywords');
  $user = 'developmentor' if $user !~ /^[a-z0-9_.]+$/;
  my $html = &load_template('blogranger',
    user => $user
  );
  print CGI::header(
    -type => 'text/html', -charset => $charset
  );
  print &kanjicode($html, $kanjicode);
}

##
sub load_template {
  my ($name, %param) = @_;
use HTML::Template;
  my $template = new HTML::Template(
    filename => "$dir_tmpl/$name.tmpl", die_on_bad_params => 0, global_vars => 1,
  );
  $template->param(
    %param,
   );
   return $template->output;
}

##
sub kanjicode {
  my ($textref, $kanjicode) = @_;
use Jcode;
  &Jcode::convert($textref, $kanjicode);
  return $$textref;
}

"True Value";

HTMLテンプレートファイルが見たい方は、次のアドレスからどうぞ。

http://developmentor.lrlab.to/delicious/blogranger.tmpl


del.icio.usのブックマークに言及しているブログをBLOGRANGER APIで検索する

2006年12月08日 | Web 2.0

del.icio.us JSON Feedsを使ってブックマークをサムネイル付きで表示する」の続きです。

さらにこのブックマークに言及しているブログを検索するように改良しました。ブログ検索は「BLOGRANGER 2.0」の「BLOGRANGER API」を使っています。del.icio.usとBLOGRANGER 2.0をマッシュアップしたAjaxアプリってところでしょうか。↓こんな感じです。

キーワードとURLの2通りの方法で検索できます。 フォームからキーワードで検索すると、そのキーワードでブログを検索して上位10件を表示します。またフォームからURLで検索すると、そのURLをリンクしたブログを検索して同じく上位10件を表示します。

ページ左にブックマークをリスト表示しています。レイアウトの都合でサムネイルのみで表示しています。その変わりにブックマークのタイトル(descriptionともいう)はツールチップで表示するようにしてあります。ブックマークのサムネイルをクリックすると、そのブックマークのURLでブログを検索して上位10件を表示します。つまり、そのブックマークを言及しているブログが検索できるということです。


View example

BLOGRANGER APIは次のように使っています。

はじめにscript要素でBLOGRANGER APIをロードします。BLOGRANGER APIをロードすると合わせてprototype.jsもロードされますので、以下のJavaScriptコードではprototype.jsも活用しています。

<script type="text/javascript" 
  src="http://ranger.labs.goo.ne.jp/rpc/api.php"></script>

ブログ検索を使うためRanger.BlogSearchオブジェクトを生成し、検索結果を受け取るイベントハンドラ関数を指定します。ここでは後述の「onupdateblogs関数」を指定しています。

  getblogs = new Ranger.BlogSearch();
  getblogs.successHandler(onupdateblogs);

検索ボタンもしくはサムネイルをクリックすると、キーワードもしくはURLを指定してブログを検索します。ここでは最大10件のブログを要求しています。「http://」か「https://」で始まる文字列はURLとして、それ以外はキーワードとして判断しています。正規表現のところがそれです。

  getblogs.hasKeyword(keyword.match(/^https?:///)
    ? '' : keyword);
  getblogs.hasLink(keyword.match(/^https?:///)
    ? keyword : '');
  getblogs.needsTitle();
  getblogs.needsBlog();
  getblogs.needsBody(200);
  getblogs.needsDate();
  getblogs.searchByKeyword('', 1, 10);

検索結果を受け取るイベントハンドラ関数です。検索結果のブログをリスト表示します。ここではブログのタイトル、サイト名、本文、更新日付を表示しています。タイトルをクリックすると、そのブログを表示します。またサイト名をクリックすると、そのサイト(ブログのトップともいう)を表示します。なお、検索結果のブログが0件のときは「(no blogs)」というメッセージを表示します。

function onupdateblogs(result) {
  Element.hide('blogs-indicator');
  if (result.totalResults==0)
    return $('blogs').innerHTML = '(no blogs)';
  $('blogs').innerHTML = '';
  $('blogs').appendChild(result.results.inject(
    document.createElement('ul'), function(ul, v) {

    // url+title
    var a = document.createElement('a');
    a.href = v.url;
    a.appendChild(document.createTextNode(v.title));
    var entry = document.createElement('div');
    entry.className = 'entry';
    entry.appendChild(a);

    // blogurl+blogname
    var a = document.createElement('a');
    a.href = v.blogurl;
    a.appendChild(document.createTextNode(v.blogname));
    var blog = document.createElement('div');
    blog.className = 'blog';
    blog.appendChild(a);

    // body
    var body = document.createElement('div');
    body.className = 'body';
    body.appendChild(document.createTextNode(v.body));

    // date
    var date = new Date();
    date.setTime(v.date*1000);
    date = date.toLocaleString();
    var rel = document.createElement('div');
    rel.className = 'rel';
    rel.appendChild(document.createTextNode(
      date + ' - ' + v.score
    ));

    //
    var li = document.createElement('li');
    li.appendChild(entry);
    li.appendChild(blog);
    li.appendChild(body);
    li.appendChild(rel);
    ul.appendChild(li);
    return ul;
  }));
}

ここで使ったdel.icio.usのusernameは「developmentor」です。JavaScriptコード中の「developmentor」を別のusernameに変更(2ヶ所ほど)してみてください。あなたのブックマークを使ってブログが検索できるようになりますよ。


BLOGRANGER API Ranger.TopicMiningクラスを使ってビデオを検索する

2006年12月05日 | Web 2.0

del.icio.us JSON Tag Feedsを使ってビデオを検索する」の続きです。「AOL Video Search」と「goo ラボ BLOGRANGER 2.0」をマッシュアップしてみます。

BLOGRANGER APIを使って関連トピックスを表示し、AOL Video Search Ajax APIを使ってそのトピックでビデオを検索できるように改良しました。↓こんな感じです。

BLOGRANGER APIの「Ranger.TopicMiningクラス」を使って関連トピックスを取得し、その関連トピックスをWEBページ右にリスト表示します。トピックをクリックすると、そのトピックをキーワードに見立ててAOL Video Search Ajax APIの「getVideosメソッド」を使ってビデオを再検索します。また、このとき関連トピックスも再検索します。


View example

BLOGRANGER APIのRanger.TopicMiningクラスは次のように使っています。

はじめにscript要素でBLOGRANGER APIをロードします。ちなみにBLOGRANGER APIをロードすると合わせてprototype.jsもロードされるので、前回までロードしていたprototype.jsは削除しました。

<script type="text/javascript" 
  src="http://ranger.labs.goo.ne.jp/rpc/api.php"></script>

Ranger.TopicMiningオブジェクトを生成し、検索結果の関連トピックスを受け取るハンドラ関数を指定します。ここでは「onupdatetopics関数」を指定しています。

  gettopics = new Ranger.TopicMining();
  gettopics.successHandler(onupdatetopics);

Search Videoボタンもしくはトピックをクリックすると、くるくる回るインジゲータを表示し、キーワードを指定して関連トピックスを検索します。ここでは最大15件のトピックを要求しています。

  Element.show('topics-indicator');
  gettopics.miningByKeyword(keyword, 15);

検索結果の関連トピックスを受け取るハンドラ関数です。「result.results」を繰り返しながら関連トピックスをリスト表示します。なお、関連トピックスが0件のときは「(no related topics)」というメッセージを表示します。

このコードはprototype.jsを使っています。「injectメソッド」を使って関連トピックのリストを生成し、そのリストをHTMLとして結合しています。関連トピックスのカテゴリとキーワードは「escapeHTMLメソッド」を使ってエスケープしています。

function onupdatetopics(result) {
  Element.hide('topics-indicator');
  if (result.totalResults==0)
    return $('topics').innerHTML = '(no related topics)';
  var html = result.results.inject('', function(s, v) {
    return s + '<li><a '
      + ' href="#'+encodeURIComponent(v.word)+'" '
      + ' onclick="return update(this.firstChild.nodeValue);">'
      + v.word.escapeHTML()
      + '</a> -- '+v.category.escapeHTML()
      + '</li>';
  });
  $('topics').innerHTML = '<ul>'+html+'</ul>';
}

使ってみるとわかりますが、関連トピックスをクリックしても一般的なキーワードしかヒットしません。AOL Video Searchの日本語インデックスが不足しているからかな。海の向こうのサービスを使うとき、言語圏の違いなどローカルなデータを使っての連携は難しい・・・う~む。キーワードを翻訳してから検索してみるとか。和英辞書Ajax APIなんかないかなぁ。


del.icio.us JSON Tag Feedsを使ってビデオを検索する

2006年12月04日 | Web 2.0

AOLVS Ajax APIで関連タグを表示、そしてビデオを検索する」の続きです。del.icio.usとマッシュアップしてみます。

さらにdel.icio.usの「JSON Tag Feeds」を使った自分のタグを表示し、「AOL Video Search Ajax API」を使ってそのタグでビデオを検索できるように改良しました。↓こんな感じです。

JSON Tag Feedsを使って自分のタグを取得し、そのタグをWEBページの右下にリスト表示します。タグをクリックすると、そのタグをキーワードに見立ててAOL Video Search Ajax APIの「getVideosメソッド」を使ってビデオを再検索します。


View example

del.icio.usの「JSON Tag Feeds」は次のように使っています。

「JSON Tag Feeds」は次のようなscript要素で取り込みます。アドレス中の「developmentor」はdel.icio.usの「username」に対応しますので、あなたのusernameに置き換えてみてください。「countパラメータ」は取り込むタグの数を表します。「sortパラメータ」はタグの並び順を表します。ここではタグ付け数を指定しました。他にアルファベット順も指定できます。「callbackパラメータ」を使えばJSONPもできますが、ここでは使っていません。

<script type="text/javascript" 
  src="http://del.icio.us/feeds/json/tags/developmentor?count=20&sort=count"></script>

このscript要素は次のような「Delicious.tagsオブジェクト」を出力します。Delicious.tagsのプロパティがタグで、その値がタグ付け数になります。いわゆるタグとタグ付け数のハッシュテーブルです。

if(typeof(Delicious) == 'undefined')
  Delicious = {};
Delicious.tags = {
  "Ajax": 8,
  ...
}

Delicious.tagsを繰り返しながらタグをリスト表示します。このコードはprototype.jsを使っています。「$H」を使ってハッシュテーブルに変換し、「eachメソッド」とDOMを使ってタグのリストを生成しています。

<script type="text/javascript">
  var ul = $('mytags');
  $H(Delicious.tags).each(function(pair) {
    var a = document.createElement('a');
    a.href='#'+encodeURIComponent(pair.key);
    a.onclick = function(e) {
      return update(pair.key);
    };
    a.appendChild(document.createTextNode(pair.key +' ('+pair.value+')'));
    var li = document.createElement('li');
    li.appendChild(a);
    ul.appendChild(li);
  });
</script>

del.icio.usのほかにも、検索キーワードに使えるデータを出力するサービスがあれば、同じような手順で簡単に追加できると思います。試しに「BLOGRANGER 2.0」の「トピックマイニング」を使ってRelated Topicsなんてのも表示してみようかな。できたらまた紹介します。


AOLVS Ajax APIで関連タグを表示、そしてビデオを検索する

2006年12月01日 | Web 2.0

 「AOL Video Search Ajax API」の「getRelatedTagsメソッド」を使ってみました。↓こんな感じです。

フォームからキーワードを送信すると、そのキーワードでビデオを検索し、そのビデオのサムネイルを表示します。サムネイルをクリックすると、そのビデオを再生します。

同時にgetRelatedTagsメソッドを使ってビデオの関連タグを取得し、そのタグをリスト表示します。タグをクリックすると、そのタグをキーワードに見立ててビデオを再検索します。


View example

getRelatedTagsメソッドは次のように使っています。

検索ボックスのキーワードを指定してgetRelatedTagsメソッドを呼び出します。このとき0件目から50件分の関連タグを要求しています。ちなみに最大は50件みたい。

  gettags = new AOLVideoSearch('6ho3uxb4tv6zo1zzz');
  gettags.attachEvent('onupdate', 'onupdatetags();');
  gettags.initialize();
  ...
  gettags.getRelatedTags(document.form.keyword.value, 0, 50);

検索した関連タグをリスト表示します。関連タグのオブジェクトモデルは「getVideoメソッド」と同じなので、ビデオと同じようなコードで関連タグのリストも表示できます。なお、このコードはprototype.jsを使っています。 

function onupdatetags() {
  if (gettags.TagSet.totalResultsReturned==0)
    return $('tags').innerHTML = '(no related tags)';
  var html = gettags.TagSet.Tag.inject('', function(s, v) {
    return s + '<li><a '
	  + ' href="#'+encodeURIComponent(v.name)+'" '
	  + ' onclick="return update(this.firstChild.nodeValue);">'
	  + v.name
	  + '</a> ('+v.count+')'
      + '</li>';
  });
  $('tags').innerHTML = '<ul>'+html+'</ul>';
}

TagSet.Tag[n]という関連タグオブジェクトのプロパティは次のとおりです。

Tag.name
タグを表す文字列です。空白を含むタグもあるようです。
Tag.count
タグに関連するビデオ数?です。