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

DEVELOPMENTOR*LEARNING RESOURCE LAB.

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

del.icio.us JSON FeedsはJSONPにも対応してます

2006年11月28日 | Web 2.0

del.icio.us JSON Feedsを使ってブックマークをサムネイル付きで表示する」の続きです。今回は「JSON Post Feeds」のコールバックの仕組み(JSONPともいう)を使ってみました。↓こんな感じです。


View example

見た目や機能は前回のAjaxアプリと同じですが、コールバック関数を指定してJSON Post Feedsを取り込むという違いがあります。

JSON Post Feedsは次のようなscript要素を使って取り込んでいます。このとき「callback」というパラメータにというコールバック関数の名前を指定しています。

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

このscript要素は次のようなJavaScript要素を出力します。callbackパラメータで指定した「onPosts」という関数を実行します。このとき関数の引数がブックマークのオブジェクトの配列になります。

onPosts([{
  "u": "http://astore.amazon.co.jp/",
  "n": "11月15日から正式版がスタートしました。自由度も上がって使ってみたい気にさせます。",
  "d": "Amazonアソシエイト・プログラム インスタントストア",
  "t": ["amazon", "affiliate"]
  },
  ...
]);

onPostsという関数を用意しておき、引数のブックマークのオブジェクトを使ってWEBページにブックマークのリストを表示しています。リストの表示方法は前回と同じです。

function onPosts(posts) {
  ...
}

今回はあらかじめWEBページにscript要素を埋め込んでいますが、さらにJavaScriptを使ってscript要素を動的生成すれば、よりインタラクティブなAjaxアプリにもなるでしょう。どんどんJSONPという仕組みを活用しましょう。


AOLVS Ajax APIを使ってビデオの主要なデータを表示してみる(の補足)

2006年11月27日 | Web 2.0

AOLVS Ajax APIを使ってビデオの主要なデータを表示してみる」の補足です。

ビデオの主要なデータといいながら「タグ」という重要なデータを紹介し忘れていました。そこで、ビデオに付与されたタグも表示するように改良しました。↓こんな感じです。


View example

見やすいようにタグは文字色をグリーンで表示しています。

Video.tags
ビデオに付与されたタグです。タグをカンマ「,」区切った文字列です。タグがないときはundefinedになります。

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

2006年11月26日 | Web 2.0

del.icio.us JSON Feeds」を使ってブックマークをサムネイル付きで表示してみました。↓こんな感じです。


View example

ブックマークのサムネイルは「MozShot」というサービスを使って表示しています。ほかにもサムネイルを生成するサービスはありますが、「MozShot」のサムネイルは、周囲がボヤ~と浮いたような影になるので、そのデザインが気に入って使ってみました。

ブックマークを表示するJavaScriptコードは「JSON Post Feeds」のexampleを改造したものです。

JSON Post Feedsは次のようなscript要素を使って取り込みます。アドレスの「developmentor」はdel.icio.usの「username」に対応しますので、あなたのusernameに置き換えてください。「count」は取り込むブックマークの数を表します。最大は100件までみたい。

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

このscript要素は次のようなJavaScriptコードを出力します。「Delicious.posts」という配列にブックマークのオブジェクトが新しい順序で格納されます。

if(typeof(Delicious) == 'undefined') 
  Delicious = {}; 
Delicious.posts = [{
  "u": "http://astore.amazon.co.jp/",
  "n": "11月15日から正式版がスタートしました。自由度も上がって使ってみたい気にさせます。",
  "d": "Amazonアソシエイト・プログラム インスタントストア",
  "t": ["amazon", "affiliate"]
  },
  ...
];

ブックマークのオブジェクトは次のプロパティを持ちます。プロパティの文字コードはUTF-8です。ただし、JavaScriptエンコードされていませんので、状況によっては都合が悪いこともあるかもしれません。

u
ブックマークのURLです。ブックマークをpostするときのurlに対応します。
d
ブックマークのタイトルです。ブックマークをpostするときのdescriptionに対応します。
n
ブックマークのメモです。ブックマークをpostするときのnotesに対応します。notesを省略したブックマークはこのプロパティを持たずundefinedになります。
t
ブックマークのタグです。ブックマークをpostするときのtagsに対応します。このプロパティは配列です。またtagsを省略したブックマークはこのプロパティを持たずundefinedになります。

JSON Post Feedsはコールバックを使った取り込み(JSONPという仕組み)にも対応しています。JSON Post Feedsのコールバックの使い方は、後日紹介しようと考えています。


del.icio.usのブックマークをgooブログに投稿する方法

2006年11月18日 | Web 2.0

del.icio.usの「daily blog posting」を使ってgooブログにブックマークを自動投稿する方法を紹介します。

はじめにgooブログの「ブログライター機能」を有効にします。gooブログの編集画面から「個人情報」を開きます。↓こんな感じです。

その中に「ブログライター機能(XML-RPC)」の項目がありますので「使用する」を選択します。さらにパスワードを指定します。このパスワードは「daily blog posting」を設定するときに使います。

次にdel.icio.usの「daily blog posting」を設定します。del.icio.usのsettingsから「daily blog posting」を開きます。↓こんな感じです。

「add a new thingy」を選択し、あなたのgooブログに情報に合わせて、次のように設定します。

job_name
何か好きな名前を付けます。私は「blog.goo.ne.jp/developmentor」というgooブログのアドレスを指定しました。
out_name
goo IDを指定します。私は「developmentor」を指定しました。
out_pass
gooブログの「ブログライター機能(XML-RPC)」のパスワードを指定します。上で指定したパスワードです。goo IDのパスワードではありません。
out_url
http://blog.goo.ne.jp/xmlrpc.php」を指定します。固定です。
out_time
ブックマークを投稿する時刻0~23を指定します。私は「15」を指定しました。日本は標準時間で+9の差がありますので、「15」だとちょうど0時を指定したことになります。↓換算表を使ってください。
0 9時
1 10時
2 11時
3 12時
4 13時
5 14時
6 15時
7 16時
8 17時
9 18時
10 19時
11 20時
12 21時
13 22時
14 23時
15 0時
16 1時
17 2時
18 3時
19 4時
20 5時
21 6時
22 7時
23 8時
out_blog_id
「1」を指定します。固定です。
out_cat_id
ブックマークを投稿するカテゴリIDを指定します。あなたのgooブログの何れかのカテゴリIDを指定します。私は「40e2265ec82cf7ede36bced6896f3cf9」を指定しました。カテゴリIDはあなたのgooブログのメニューからカテゴリを選択することで調べられます。カテゴリを選択した後、ブラウザのアドレスバーに注目してください。そのアドレスが「http://blog.goo.ne.jp/developmentor/c/40e2265ec82cf7ede36bced6896f3cf9」であれば、カテゴリIDは「40e2265ec82cf7ede36bced6896f3cf9」になります。

これで完了です。

指定した時刻になると、gooブログに最近1日のブックマークが自動投稿されます。こんな感じです。指定した時刻ぴったりには投稿されません。15分から30分ほど遅くなるようです。なお、最近1日のブックマークがないときは投稿されません。

最後にgooブログの「daily blog posting」を設定するにあたり、次のブログがとても参考になりました。ありがとうございます。


レジャースポットの定義をファイルに移動してデータとページを分離する

2006年11月17日 | Web 2.0

Googleマップの吹き出しをタブ形式で表示する」の中で、東京近郊レジャースポット案内というAjaxアプリを作りましたが、さらにレジャースポットの定義を別のファイルに移動し、データとWEBページを分離してみました。↓こんな感じです。


View example

WEBページのJavaScriptコードにあったレジャースポットの定義を…

var spots = [
  // {lat: 緯度, lng: 経度, url: ブックマークURL}
  {lat: 35.660347, lng: 139.729121, url: [
    'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1510',
    'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1789'
  ]}, // 六本木ヒルズ
    …途中、省略…
];

次のように、WEBページとは別のテキストファイルに移動してアップロードします。ここではファイル名を「googlemapsjson.txt」としました。

 googlemapsjson.txt

[
  {lat: 35.660347, lng: 139.729121, url: [
    'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1510', 
    'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1789' 
  ]}, 
  {lat: 35.665246, lng: 139.712319, url: [
    'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1556', 
    'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1790' 
  ]}, 
  {lat: 35.634017, lng: 139.878595, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1557'}, 
  {lat: 35.705646, lng: 139.751887, url: [
    'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1569', 
    'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1791' 
  ]}, 
  {lat: 35.639511, lng: 139.760170, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1570'}, 
  {lat: 35.673770, lng: 139.762745, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1577'}, 
  {lat: 35.707127, lng: 139.753046, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1578'}, 
  {lat: 35.664915, lng: 139.762487, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1579'}, 
  {lat: 35.621966, lng: 139.750750, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1580'}, 
  {lat: 35.654995, lng: 139.796476, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1581'}, 
  {lat: 35.664897, lng: 139.766908, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1586'}, 
  {lat: 35.658639, lng: 139.745407, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1587'}, 
  {lat: 35.689492, lng: 139.691699, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1588'}, 
  {lat: 35.672428, lng: 139.755728, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1589'}, 
  {lat: 35.676368, lng: 139.699359, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1590'}  
]

WEBページのロードが完了したタイミングで、レジャースポットの定義をAjax.Request(prototype.js)を使って取得します。

function load() {
  var map = new GMap2(document.getElementById('map'));
  map.addControl(new GSmallMapControl());
  map.addControl(new GMapTypeControl());
  map.addControl(new GOverviewMapControl());
  map.setCenter(new GLatLng(35.686302, 139.74575), 12);

Ajax.Requestの引数には前述の「googlemapsjson.txt」を指定します。そして、その「googlemapsjson.txt」を取得して、その取得したテキストをJavaScriptとして評価します。また失敗したときは、エラーメッセージを表示して終了します。

  var request = new Ajax.Request('googlemapsjson.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++)
    map.addOverlay(createMarker(spots[i]));
}

AOLVS Ajax APIの埋め込みタグを使って検索結果を簡単に表示する

2006年11月15日 | Web 2.0

AOLVS Ajax APIを使ってビデオの主要なデータを表示してみる」までに作ったAjaxアプリは、AOLVS.getVideosメソッドの検索結果の項目からHTMLを組み立てて表示しています。その検索結果には、ビデオのURLやタイトル、概要文といった様々な項目が含まれていました。ただ実際のところ、様々な項目があったとしても、検索結果として表示するスタイルや項目は限られるのでは?という気もします。

AOLVS.getVideosメソッドには、あらかじめ決まったスタイルと項目で検索結果をビジュアルに表示する機能も備わっています。3通りの方法がありますので、今話題の「PS3」をキーワードにそれぞれ試してみました。

AOLVS.VideoSet.embedTag

検索結果の「AOLVS.VideoSet.embedTag」を使うと、その検索結果をFlash Playerを使ってバー表示できます。↓こんな感じです。


View example

「AOLVS.VideoSet.embedTag」はFlash Playerを埋め込むHTMLタグを表します。Flash Playerの中からビデオを検索して表示していると思われます。残念ながら日本語のクエリは機能しませんでした。AOLVS Ajax API自体は日本語のクエリを扱えるので、Flashアプリケーションに原因があるのかもしれません。

function update() {
  document.getElementById('results').innerHTML = 
    AOLVS.VideoSet.embedTag;
}

AOLVS.VideoSet.Video[n].videoResultembedTag

検索結果の「AOLVS.VideoSet.Video[n].videoResultembedTag」を使うと、それぞれの検索結果をFlash Playerを使って表示できます。↓こんな感じです。

 
View example

「AOLVS.VideoSet.Video[n].videoResultembedTag」はFlash Playerを埋め込むHTMLタグを表します。Flash Playerの中からビデオの主要データを取得して表示していると思われます。

function update() {
  var html = '<ol>';
  for (var i=0; i<AOLVS.VideoSet.totalResultsReturned; i++) {
    var video = AOLVS.VideoSet.Video[i];
    html += '<li>';
    html += video.videoResultembedTag;
    html += '</li>';
  }
  html += '</ol>';
  document.getElementById('results').innerHTML = html;
}

AOLVS.VideoSet.Video[n].videoPlayerembedTag

検索結果の「AOLVS.VideoSet.Video[n].videoPlayerembedTag」を使うと、それぞれの検索結果のビデオをFlash Playerを使ってその場で再生できます。↓こんな感じです。


View example

「AOLVS.VideoSet.Video[n].videoPlayertembedTag」はFlash Playerを埋め込むHTMLタグを表します。ただ、ビデオ(ビデオの配信元?)によってはHTMLタグがなくundefinedとなるケースがありました。

function update() {
  var html = '<ol>';
  for (var i=0; i<AOLVS.VideoSet.totalResultsReturned; i++) {
    var video = AOLVS.VideoSet.Video[i];
    html += '<li>';
    html += video.videoPlayerembedTag;
    html += '</li>';
  }
  html += '</ol>';
  document.getElementById('results').innerHTML = html;
}

しかし、この3通りの方法はどう使えばいいのだろう。。。


Googleマップの吹き出しをタブ形式で表示する

2006年11月11日 | Web 2.0

Googleマップの吹き出しにBLOGRANGERパーツを表示する」の中で東京近郊レジャースポット案内というAjaxアプリを作りましたが、さらに吹き出し(情報ウィンドウともいう)をタブ形式にし、レジャースポットの感想に加えてトピックを表示するように改良してみました。↓こんな感じです。

 
View Example

レジャースポットの定義を拡張し、1つのレジャースポットに対して複数のBLOGRANGERパーツのブックマークURLを指定できるようにしました。次のソースコードでは「六本木ヒルズ」「表参道ヒルズ」に2つ、「東京ディズニーランド」に1つのブックマークURLを指定しています。

var spots = [
  // {lat: 緯度, lng: 経度, url: ブックマークURL}
  {lat: 35.660347, lng: 139.729121, url: [
    'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1510',
    'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1789'
  ]}, // 六本木ヒルズ
  {lat: 35.665246, lng: 139.712319, url: [
    'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1556',
    'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1790'
  ]}, // 表参道ヒルズ
  {lat: 35.634017, lng: 139.878595, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1557'}, // 東京ディズニーランド
    ・・・途中、省略・・・
];

吹き出しをタブ形式で表示するように改良しました。はじめにレジャースポットに対するブックマークURLが1つ(つまり配列でなく文字列)のとき、あとの処理に備えて配列に変換しておきます。次にその配列を繰り返しながら「GInfoWindowTab」を使ってタブを作っていきます。そして最後に「GMarker.openInfoWindowTabsHtml」を使ってタブ形式の吹き出しを表示します。

function createMarker(spot) {
  var marker = new GMarker(new GLatLng(spot.lat, spot.lng));
  GEvent.addListener(marker, 'click', function() {
    if (spot.url.constructor != Array)
      spot.url = [spot.url];
    var tabs = [];
    for (var i=0; i<spot.url.length; i++) {
      tabs.push(new GInfoWindowTab(i+1, '<iframe '
        + 'src="'+spot.url[i]+'" '
        + 'width="320" height="200" frameborder="0" '
        + 'marginwidth="2" marginheight="2" '
        + '></iframe>'
      ));
    }
    marker.openInfoWindowTabsHtml(tabs);
  });
  return marker;
}

ただ、「GInfoWindowTab」のタブが1つ(つまり配列のサイズが1)のとき、「GMarker.openInfoWindowTabsHtml」を使ってもタブ形式で表示されませんでした。このときは「GMarker.openInfoWindowHtml」を使ったときと同じ通常の吹き出しが表示されます。タブが1つかタブが2つ以上かといった条件判断は不要ということですね。



Googleマップ上のレジャースポットを自動クルーズする

2006年11月06日 | Web 2.0

Googleマップの吹き出しにBLOGRANGERパーツを表示する」の中で東京近郊レジャースポット案内というAjaxアプリを作りましたが、さらにGoogleマップ上のレジャースポットを自動クルーズするように改良してみました。↓こんな感じです。

Googleマップ上のマーカーを20秒間隔で自動巡回しながら、レジャースポットの感想を表示します。自動巡回しますのでクルーズ感覚でしばらく眺めてみてください。何か発見があるかも!?


View example

レジャースポットを定義した配列をローテーションして、吹き出し(情報ウィンドウともいう)を表示するpan関数を用意します。

function pan() {
  var spot = spots.shift();
  spot.marker.openInfoWindowHtml('<iframe '
    + 'src="'+spot.url+'" '
    + 'width="320" height="200" frameborder="0" '
    + 'marginwidth="2" marginheight="2" '
    + '></iframe>'
  );
  spots.push(spot);
}

そして、そのpan関数をWEBページのロードが完了したときに呼び出すようにします。また20秒ごとにpan関数を呼び出すようにインターバルタイマーを仕掛けます。

  pan();
  setInterval(pan, 20*1000);

pingoo! gooブログで5ヶ所以上pingを打つ

2006年11月05日 | Web 2.0

banner_468.gif

gooブログはping送信先に4ヶ所(gooを除いて)しか指定できません。4ヶ所じゃ足りないときは「Ping一括配信サービス Pingoo!」を使うという手があります。このブログもPingoo!を使っています。

gooブログのping送信先にPingoo!を指定しておくと、Pingoo!側でいろいろなところへまとめてpingを打ってくれます。Pingoo!のping送信先は20ヶ所ほどあり、その中から希望のping送信先を選択できます。

Pingoo!は無料ですが会員制です。gooブログの設定方法もスクリーンショットを使って丁寧に説明されていますので戸惑うこともないでしょう。

Pingoo!は以前からブログ界で話題になっていますので他のブログも探してみてください。Pingoo!にリンクしているブログを探してみました。下のリンクからたどれますので参考にしてください。

http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1793


AOLVS Ajax APIを使ってビデオの主要なデータを表示してみる

2006年11月04日 | Web 2.0

AOLVS Ajax APIで日本語が使えた! サムネイルを表示してみる」の続きです。

AOL Video Search AJAX API」を使ってサムネイルに加えて、ビデオの主要なデータをいろいろ表示してみました。↓こんな感じです。


View Example

表示してみたビデオの主要なデータは次のとおりです。

Video.videoUrl
ビデオの配信元ページへのURLです。URLはAOLを指していてAOLから配信元ページにリダイレクトする仕組みになっています。
Video.channel
ビデオの配信元サイトの名前です。「YouTube」「MySpace」「Google Video」などです。
Video.channelUrl
ビデオの配信元サイトのURLです。こちらは直リンクです。
Video.dateFound
ビデオがAOL Videoのインデックスに登録された日時です。
Video.description
ビデオの概要文です。文章の長さにはかなりのバラツキがあります。概要文がないことがあります。このときundefinedとなるので変わりに「(description)」と表示しています。
Video.category
ビデオのカテゴリです。カテゴリがないことがあります。このときundefinedとなるので変わりに「(category)」と表示しています。
Video.filesize
ビデオのファイルサイズです。いろいろな条件で検索してみましたが常にundefinedでした。
Video.runtime
ビデオの再生時間(秒)です。稀にundefinedになることがありますので、このとき変わりに「(runtime)」と表示しています。
Video.formats
ビデオのファイル形式です。「Win」「Flash」「Real」などです。undefinedになることがありますので、このとき変わりに「(formats)」と表示しています。

いろいろなサイトをインデックスしているからでしょうか。上のとおり、必ずしもデータが含まれるとも限らないようです。そのためソースコードではundefinedになることを考慮した作りが必要そうです。

こんなとき「prototype.jsのObject.extendで関数の省略値を補完する」のテクニックを使えばシンプルなソースコードにできますね。


BLOGRANGER APIを使ってご当地ブログを探して比較する

2006年11月02日 | Web 2.0

BLOGRANGER 2.0」の「BLOGRANGER API」を使って「BLOGRANGER ご当地ブログ探し」というAjaxアプリを作ってみました。↓こんな感じです。

キーワード検索のあと、日本地図の都道府県をクリックすると、そのご当地のブログ記事を絞り込めます。例えば「土産」というキーワードで検索してから都道府県をクリックすると、そのご当地を話題としたブログ記事が(きっと)見つかります。


View Example

このAjaxアプリは「BLOGRANGER API チュートリアル」のソースコードを土台に「都道府県でブログを絞り込む」という独自の機能を追加したものです。都道府県でブログを絞り込むというアイディアは、「BLOGRANGER API リファレンス」の中にある次の説明を参考にしました。

Ranger.Searchクラス hasNE(ne, [exact])

次の例は「アニメ」に関するブログ記事を検索しています。Ranger.NEと文字列を使う2通りの方法があります。このときカテゴリのIDを指定します。

次の例は「東京都(場所)」を含むブログ記事を検索しています。「東京都港区南青山」など「東京都」から始まる「場所」が検索範囲になります。

はじめのキーワード検索では、キーワードと「場所」という条件を指定しています。場所という条件を指定すると、「東京都」や「神奈川県」といった都道府県を含むブログがヒットすることが期待できます(たぶん)。

  bs.hasKeyword(keyword);
  bs.hasNE('LOCATION-');
  bs.searchByKeyword('', 1, 10);

次の都道府県のクリックでは、キーワードと場所に加えて、そのクリックした都道府県の名前を指定しています。これでクリックした都道府県の名前を含むブログだけを絞り込めます。

  bs.hasKeyword(keyword);
  bs.hasNE('LOCATION-'+region);
  bs.searchByKeyword('', 1, 10);

Special thanks to ... 日本地図のクリッカブルマップは全国なんでもクリッカブル・マップ・プロジェクツの素材を使いました。ありがとうございます。


BLOGRANGER Mindshare Calculator

2006年10月31日 | Web 2.0

 『Google Hacks 第2版―プロが使うテクニック&ツール100選』の「HACK #34 Googleマインドシェアの測定」を「BLOGRANGER 2.0」のBLOGRANGER APIに置き換えてAjax化してみました。↓こんな感じです。


View example

指定した「Query」の検索結果の中に登場する「Person」のマインドシェアを測定します。GoogleのインデックスでなくBLOGRANGERのインデックスを使うため、ブログ界に限定したマインドシェアが測定できます。

マインドシェアの計算方法は前著のHACKと同じです。はじめに「Query」をキーワードとしてブログ記事を検索してそのヒット件数(a)を求めます。次に「Query」と「Person」をAND条件のキーワードとしてブログ記事を検索してそのヒット件数(b)を求めます。最後に(a)に対する(b)の割り合いを求めます。この結果がマインドシェアです。

上の例では「perl」に対する「naoya」のマインドシェアを測定しています。結果は「naoya has a 1.3878743608473338% BLOGRANGER share of "perl"」となりました。この結果はどう受け取ればよいのだろうか・・・。う~む。


AOLVS Ajax APIで日本語が使えた!? サムネイルを表示してみる

2006年10月29日 | Web 2.0
AOL Video Search AJAX API Introductionを試す」の中で、次の課題がありました。

それ以前に「AOL video」自体が日本語のインデックスを持つのかどうかも調べないといけない。

そこで「AJAX API Introduction」のサンプルコードを改良し、検索ボックスを追加してみました。検索ボックスに日本語を入力してAOL Videoを検索できます。↓こちらからどうぞ。

View example

いくつか日本語キーワードでの検索を試しましたが、日本語のクエリも機能しますし、日本語の検索結果も表示できています。WEBページの文字コードを「UTF-8」と「EUC-JP」としてみましたが、いずれも期待どおり動作しています。

また今回は、次のようにサムネイルも表示してみました。サムネイルのサイズは「Video.thumbnailUrl」と「Video.thumbnailUrlLarge」の2通りがあります。ただ後者の「Video.thumbnailUrlLarge」だけ、サムネイルのURLがなく省略されることがありました。このとき「Video.thumbnailUrlLarge」はundefinedとなっています。

function update() {
  var html = '<ol>';
  for (var i=0; i<AOLVS.VideoSet.totalResultsReturned; i++) {
    var video = AOLVS.VideoSet.Video[i];
    html += '<li>';
    html += '<div>'+video.title+'</div>';
    html += '<div><img src="'+video.thumbnailUrl+'" /></div>';
    if (video.thumbnailUrlLarge)
      html += '<div><img src="'+video.thumbnailUrlLarge+'" /></div>';
    html += '</li>';
  }
  html += '</ol>';
  document.getElementById('results').innerHTML = html;
}

私にとって「AOL Video Search APIs」はまだまだ未知数です。海外のサイトでも実用例が乏しいようですので、時間を見つけていじくっていきます。


Google gadgetやフィードを購読するAdd to Googleボタンを設定してみる

2006年10月29日 | Web 2.0

Googleパーソナライズドホームに「Google gadget」やフィードを登録する↑のようなボタンをよく見かけます。そこで、このボタンをWEBページに設置する方法を探してみたところ、「Google Help  Add to Google button」というページを見つけました。このページの手順にしたがうと、とても簡単にボタンを設置できました。

まずこのブログのフィードを購読するボタンを設置してみました。↓こんな感じです。

Add to Google

 次に「GoogleパーソナライズドホームにBLOGRANGERパーツを表示してみる」で作ったBLOGRANGERパーツをGoogleパーソナライズドホームに追加するボタンを設置してみました。↓こんな感じです。


Add to Google


Googleマップの吹き出しにBLOGRANGERパーツを表示する

2006年10月25日 | Web 2.0

GoogleマップとBLOGRANGERパーツでレジャースポット案内を作る」で作ったレジャースポット案内は、「Googleマップ」と「BLOGRANGERパーツ」が連携しているといいつつも、GoogleマップとBLOGRANGERパーツを左右に並べたレイアウトのためマッシュアップ感が低いといわざるをえません。

そこでGoogleマップとBLOGRANGERパーツが統合して見えるように、Googleマップの吹き出し(情報ウィンドウともいう)にBLOGRANGERパーツを表示するように改良してみました。またついでにレジャースポットを10ヶ所ほど追加(合計15ヶ所)してにぎやかにしてみました。

↓こんな感じです。前作に比べてマッシュアップ感が向上したと思いますがいかがでしょうか。


View example

改造したポイントをお伝えしておきます。

次のとおり、まとめてレジャースポットを定義するようにしました。レジャースポットの緯度、経度、そしてBLOGRANGERパーツのブックマークURLを指定します。今後、新しいレジャースポットを追加するときは、末尾に1行を追加するだけでOKです。

var spots = [
  // {lat: 緯度, lng: 経度, url: ブックマークURL}
  {lat: 35.660347, lng: 139.729121, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1510'}, // 六本木ヒルズ
  {lat: 35.665246, lng: 139.712319, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1556'}, // 表参道ヒルズ
    …
  {lat: 35.676368, lng: 139.699359, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1590'}  // 明治神宮
];

マーカーをクリックしたとき、吹き出しの中にBLOGRANGERパーツを表示(GMarker.openInfoWindowHtml)するようにしました。BLOGRANGERパーツはiframeを使って表示します。iframeのsrcにはBLOGRANGERパーツのブックマークURLを指定します。

function createMarker(spot) {
  var marker = new GMarker(new GLatLng(spot.lat, spot.lng));
  GEvent.addListener(marker, 'click', function() {
    marker.openInfoWindowHtml('<iframe '
      + 'src="'+spot.url+'" '
      + 'width="320" height="200" frameborder="0" '
      + 'marginwidth="2" marginheight="2" '
      + '></iframe>'
    );
  });
  return marker;
}

レジャースポットの定義に基づいて繰返しマーカーを追加します。

  for (var i=0; i<spots.length; i++)
    map.addOverlay(createMarker(spots[i]));

最後におまけです。地図の右下にズームアウトした小さな地図を表示するようにしました。この小さな地図を使うと、広域の視点から地図を操作できます。

  map.addControl(new GOverviewMapControl());