Smart -Web Magazine

WEB開発者に嬉しいステキ講座

MENU

Google Mapsの基礎

2009年7月6日 コメントの追加

Google Mapsの設置

Google Maps のAPIキーの申し込み

まず、Google Maps APIのサイトから、サインアップページを開きます。

サインアップページで利用条件に同意し、サイトのURLを入力すればAPIキーが取得できます。キーの取得にはGoogleアカウント(無料)が必要です。

[I have read and agree with the API terms and conditions]のチェックボックスをチェックし、[My Web Site URL:]のテキストボックスにGoogle Mapsを利用するサイトのドメインを入力します。次に[Generate API Key]をクリックすると、APIキーとHTMLサンプルが表示されます。
もし、このときGoogleアカウントをまだ持っていなければ、自動的に申し込み画面に進むので、アカウント取得の手続きを済ませてください。

サンプルHTMLには取得したAPIキーが埋め込まれているので、このサンプルHTMLはそのままでも使えます。ためしに、サンプルHTMLを新しいファイルにコピー&ペーストしてサーバに設置してみるとよいでしょう。

サンプルHTML

※Google Mapsはページが設置されたドメインをチェックするので、ローカルでは表示されません。

PAGE TOP

サンプルHTMLをHACKする

Google Mapsから取得したサンプルHTMLは下記のようなものです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>      <title>Google Maps JavaScript API Example</title>
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=***"        type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function load() {
    if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map"));
        map.setCenter(new GLatLng(37.4419, -122.1419), 13);
    }
}
//]]>
</script>
</head>
<body onload="load()" onunload="GUnload()">
<div id="map" style="width: 500px; height: 300px"></div>
</body>
</html>

"key=****" の部分に、Google Mapsで取得したAPIキーが埋め込まれています。ここはGoogleのAPIを読み込むだけですので、変更の必要ありません。

SCRIPT要素の中が地図をコントロールするJavaScriptのソースです。getElementByIdに渡している引数、mapは地図を表示させるDIV要素のID名です。

"<div id="map" style="width: 500px; height: 300px"></div>" に、Google Mapsの地図が出力されます。getElementByIdに渡した文字列mapと同じid名を指定しています。

Google Mapsの推奨

Google Mapsは、標準準拠(standards compliant mode)のレンダリングモードを採用したXHTML文書への埋め込みが推奨されています。あくまでも推奨なので、HTML4.01でも問題なく動作します。

文字のエンコードはUTF-8です。埋め込み先のファイルが他のエンコードを採用している場合は、Google Maps用にUTF-8ベースのファイルを作成し、インラインフレーム(iframe要素)で呼び出すとよいでしょう。

※インラインフレームを採用する際は、呼び出し元ファイルの文書型はStrictではなくTransitional以下になります。


Gmapクラス

地図を表示するだけであれば、スクリプトは以下の2行で十分です。

var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(35.644934,139.699166), 13);

Google Maps APIに用意されているGmapクラスは、地図インスタンスを作成するためのもので、このクラスは地図の数だけ作成します。
Gmapに渡す引数には、getElementByIdメソッドなどを使って地図を表示する領域を指定します。


地図の大きさを指定する

Google Mapsのサンプルでは"<div id="map" style="width: 500px; height: 400px"></div>"というようにSTYLE属性で縦(height)・横(width)のサイズ指定をしています。ここの数値を変更すれば地図のサイズを変更することが出来ますが、CSS側でサイズ指定をしたほうがよいでしょう。

CSSでのサイズ指定
div#map{
    margin: 10px;
    width: 100px; height: 300px;
}
HTML側のDIV
<div id="map"></div>

 


座標を指定する

GMap2クラスのsetCenterメソッドを使って、地図の中心点の経度と緯度、地図のズームレベルを指定することができます。setCenterメソッドの1番目の引数は位置情報オブジェクトで、GLatLngクラスを利用して受け取ります。2番目の引数は倍率を指定するためのもので、値が小さいほど詳細な地図になります。

座標オブジェクトの生成

GlatLngクラスは第1引数に経度、第2引数に緯度を受け取ります。返却値は位置情報オブジェクトです。

var latlng = new GLatLng(35.644934,139.699166);
座標の指定

setCenterメソッドに位置情報オブジェクトと倍率を渡し、座標を設定します。

var map = new GMap2( document.getElementById("map") );
// 座標の指定
map.setCenter( new GLatLng(35.644934,139.699166), 13 );

経度と緯度を調べるためのツールを用意したので、ご利用ください。

※『東京タワー』『中目黒3-22-4』から経度、緯度を調べてくれるGeocodingというサイトも便利です。


移動/縮尺ボタンの表示

addControlメソッドにGSmallMapControlコンストラクタ、もしくはGLargeMapControlコンストラクタを指定して、地図上に移動/縮尺ボタンを表示することが出来ます。

var map = new GMap2( document.getElementById("map") );
// 座標の指定
map.setCenter(new GLatLng(35.644934,139.699166), 13);
// 移動/縮尺ボタンの表示
map.addControl( new GSmallMapControl() );

addControlメソッドの引数として、GSmallMapControlメソッド、もしくはGLargeMapControlメソッドを指定します。GSmallMapControlメソッドは縮尺ボタンにスライドバーが表示されないタイプで、GLargeMapControlメソッドはスライドバーが表示されます。

GSmallMapControlメソッドとGLargeMapControlメソッドのサンプル


マップ/サテライト切り替えボタンの表示

addControlメソッドにGMapTypeControlコンストラクタを指定して、地図上にマップ/サテライト切り替えボタンを表示することが出来ます。

var map = new GMap2( document.getElementById("map") );
// 座標の指定
map.setCenter(new GLatLng(35.644934,139.699166), 13);
// マップ/サテライト切り替えボタンの表示
map.addControl( new GMapTypeControl() );

サンプルHTML


地図右下に拡大率が低い地図を表示

addControlメソッドにGOverviewMapControlメソッドを指定して、地図右下に拡大率が低い地図を表示することが出来ます。

var map = new GMap2( document.getElementById("map") );
// 拡大率が低い地図の表示
map.addControl( new GOverviewMapControl() );

GOverviewMapControlメソッドのサンプル


マーカーの表示

addOverlayメソッドを使って、任意の位置にマーカーを表示させることが出来ます。GLatLngメソッドにマーカーを表示させたい位置の経度と緯度を指定し、そこで生成されたオブジェクトをGMarkerクラスの引数にしてさらにオブジェクトを生成、addOverlayメソッドにそのオブジェクトを引数にして、マーカーを表示させます。

var map = new GMap2( document.getElementById("map") );
// 座標の指定
var point	= new GLatLng(35.644934,139.699166);
map.setCenter(point, 13);
// マーカーの表示
map.addOverlay(new GMarker(point));

マーカーの表示サンプル

複数のマーカーを作成

マーカーは複数表示させることが出来ます。新しい座標オブジェクトを作成してもよいですし、既存の座標オブジェクトを使って新しい座標オブジェクトを作成することも出来ます。

// 座標の指定
var point	= new GLatLng(35.644934,139.699166);
// マーカーの表示
map.addOverlay(new GMarker(point));
// 地図用の座標オブジェクトを利用して新しい座標オブジェクトを作成
marker_point = new GLatLng(point.lat() + 0.01, point.lng() + 0.01);
// マーカーの表示
map.addOverlay(new GMarker(marker_point));

マーカーの表示サンプル

マーカーのアイコンをオリジナルアイコンに変更

Gmarkerは第1引数で座標情報、第2引数でオプション情報を受け取ります。このオプション情報を設定することでアイコン画像を指定することが出来ます。

まずはPNGでアイコンを作成し、サーバにアップします。

icon

・アップ先URL
http://www.spacemonkey.jp/i/icon/ic_map_arrow.png

コーディング作業では、アイコンオプション用にGIconを設定していきます。

// 座標の指定
var latlng	= new GLatLng(35.644934,139.699166);
// アイコンオプションの設定
var icon		= new GIcon();
// アイコン画像のURL
icon.image		= "http://www.spacemonkey.jp/i/icon/ic_map_arrow.png";
// アイコン画像のサイズ(横幅/縦幅)
icon.iconSize	= new GSize(32, 32);
// アイコンの表示場所
icon.iconAnchor = new GLatLng(32, 0);
// マーカーの表示
map.addOverlay( new GMarker(latlng, icon) );

ここではアイコン画像と影画像を1つの画像で済ませていますが、別々にファイルを作成し、設定することが出来ます。その際は、アイコン画像、影共にURL、サイズなどを個別に設定していきます。

var icon = new GIcon();
// アイコン画像のURL
icon.image = "http://www.spacemonkey.jp/i/icon/ic_map_arrow.png";
// アイコン画像のサイズ(横幅/縦幅)
icon.iconSize = new GSize(32, 32);
// 影画像のURL
icon.shadow = "http://www.spacemonkey.jp/i/icon/ic_map_arrow_shadow.png";
// 影画像のサイズ(横幅/縦幅)
icon.shadowSize = new GSize(32, 32);

マーカーの表示サンプル


インフォウィンドウの表示

openInfoWindowメソッドを使って、地図に情報窓(インフォウィンドウ)を表示させます。

var map = new GMap2( document.getElementById("map") );
// 座標の指定
map.setCenter( new GLatLng(35.644934,139.699166), 13 );
// インフォウィンドウの表示
map.openInfoWindow(map.getCenter(), document.createTextNode("中目黒駅"));

サンプルHTML

openInfoWindowメソッドの第1引数にインフォウィンドウを表示させる経度と緯度を指定し、第2引数に表示させる文字列を指定します。

先のコードでは地図にインフォウインドウを表示させましたが、マーカーにインフォウインドウを表示させることが出来ます。その場合は、下記のようにマーカーオブジェクトからopenInfoWindowにアクセスします。

// マーカーを表示
var marker = new GMarker( new GLetLng(35.644934,139.699166) );
map.addOverlay(marker)
// マーカーにインフォウインドウを表示
marker.openInfoWindow(map.getCenter(), document.createTextNode("中目黒駅"));

※map.addOverlay(marker)よりも前でmarker.openInfoWindowを行ってしまうと、ふきだしは表示されなくなります。

openInfoWindowHtmlメソッドを使う

openInfoWindowメソッドは通常の文字列しか扱えませんが、openInfoWindowHtmlメソッドを使うと、HTMLタグを使えます。

// インフォウィンドウの表示
var textnode = '<b>リズムファクトリー事務所</b><br />東京都目黒区中目黒3-22-4鈴木ビル101号室</font>';
marker.openInfoWindowHtml(textnode);

インフォウインドウ内にも地図を表示

showMapBlowupメソッドを使って、インフォウインドウ内にも地図を表示させることが出来ます。showMapBlowupの第1引数に地図の位置情報、第2引数にズームレベル、地図の種類などを指定します。地図の種類には G_SATELLITE_MAP(衛星写真)、G_NORMAL_MAP(普通の地図)、G_HYBRID_MAP(ハイブリッド)が指定可能です。

var map = new GMap2( document.getElementById("map") );
// 座標の指定
var point	= new GLatLng(35.644934,139.699166);
map.setCenter(point, 13);
var opt = new Object();
// ズームレベル
opt.zoomLevel	= 18;
// 地図の種類
opt.mapType		= G_SATELLITE_MAP;
// インフォウインドウに地図を表示
map.showMapBlowup(point, opt);

サンプルHTML


タブ付きインフォウインドウの表示

openInfoWindowTabsでタブ付きのインフォウィンドウを表示することが出来ます。

まず、タブの内容を格納する配列を用意し、GInfoWindowTabメソッドでタブの名前と内容を設定します。次に、タブ情報を持った配列をopenInfoWindowTabsHtmlに渡します。

// タブの内容を準備
var list_tab = [
    new GInfoWindowTab("タブ1", "タブ1の内容"),
    new GInfoWindowTab("タブ2", "タブ2の内容")
];
marker.openInfoWindowTabsHtml(list_tab);

サンプルHTML


地図の移動

表示した地図を自動的に移動させることが出来ます。

次のスクリプトは一度表示した地図を、3秒後に違う場所に移動させます。

var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(35.644934,139.699166), 15);
// 地図の移動
window.setTimeout(function(){
    map.panTo(
        new GLatLng(35.648979,139.703178)
    );
}, 3000);

地図の中心座標を変更するメソッドはrecenterOrPanToLatLngです。このメソッドに、setCenterメソッドと同じ要領で中心座標をセットします。

map.recenterOrPanToLatLng(
    new GPoint(139.698741,35.639005)
);

3秒後に地図を移動、というアクションは、JavaScriptのタイマーメソッドのsetTimeoutを利用します。setTimeoutの書式は下記のとおりです。

setTimeout(実行したい関数, 時間);

第2引数の時間は、1/1000秒単位で指定します。3秒の場合でしたら、3000となります。

サンプルHTML


イベント処理

GEvent.addListenerメソッドかGEvent.bindメソッドを使用することで 、地図へのクリックやドラッグといったイベント発生時に指定したコードを実行させることが出来ます。

例えば、ユーザが地図をクリックした際に、JavaScriptのアラートを表示するには下記のようなコードになります。

var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(35.644934,139.699166), 12);
GEvent.addListener(map, 'click', function() {
    alert("地図がクリックされました");
});

サンプルを表示

clickイベントはオーバーレイ上をクリックした場合、そのオーバーレイを引数としてイベントハンドラに送ります。そうでない場合、クリックされた地図上のポイントの緯度/経度を送ります。たとえば、クリックされた地点の緯度/経度情報をアラートで表示するには、下記のようになります。

GEvent.addListener(map, 'moveend', function(overlay, point) {
    alert(point.x + " " + point.y)
});

クリックイベントを指定する場合は、addListenerの第2引数に'click'を指定します。その他、ズームイベント用の'zoomend'、地図をドラックした際の'move'、地図のドラック開始時の'movestart'、地図のドラック終了時の'moveend'、マップ/サテライト切り替え時時の'maptypechanged'などが用意されています。

イベント
イベント 引数 説明
click overlay, point ユーザが地図か地図上のオーバーレイをクリックしたときに引き起こされます。オーバーレイ上をクリックした場合、そのオーバーレイを引数としてイベントハンドラに送ります。そうでない場合、クリックされた地図上のポイントの緯度/経度を送ります。
move - 地図が動いたときに引き起こされます。このイベントはマップがドラッグされている間は持続的に引き起こされます。
movestart - 連続的なパン/ドラッグの移動の開始時に引き起こされます。このイベントは不連続(discretely)な移動の場合は、引き起こされません
moveend - 連続的/不連続な地図の移動の終了時に引き起こされます。このイベントは連続的なパンの終了時に1回引き起こされます。
zoom oldZoomLevel, newZoomLevel 地図のズームレベルが変更された後に引き起こされます。
maptypechanged - 地図の種類(地図, 混合、衛星写真のいずれか)が変更された後に引き起こされます。
infowindowopen - 情報ウィンドウが表示された後に引き起こされます。
infowindowclose - 情報ウィンドウが閉じられた後に引き起こされます。
addoverlay overlay 地図にオーバーレイが追加された後に引き起こされます。
removeoverlay overlay 地図からオーバーレイが削除された後に引き起こされます。clearOverlaysが呼ばれた場合は引き起こされません以下のclearoverlaysイベントをご覧ください。
clearoverlays - 地図から全てのオーバーレイが削除された後に引き起こされます。

住所を使って緯度経度を取得する

GClientGeocoderクラスを使って、住所情報から緯度と経度を取得し、その地点の地図を表示させることが可能です。

まずはジオコーディング・オブジェクトを生成します。

// ジオコーディング・オブジェクトの生成
geocoder	= new GClientGeocoder();

生成したジオコーディング・オブジェクトからgetLatLngという住所情報から緯度・経度を計算するメソッドにアクセスします。getLatLngの第1引数に住所情報、第2引数にコールバック関数を指定します。コールバック関数に緯度・経度情報が渡されるので、それを使って地図を移動させます。

// getLatLngに住所情報を渡し、コールバック関数で地図を移動させる
geocoder.getLatLng(
    ADDRESS, function( latlng ){
        if ( latlng ) {			            // コールバック関数から受け取った引数を使って地図を移動map.setCenter(latlng, 13);			            // マーカーを表示
            var marker = new GMarker(latlng);			            map.addOverlay(marker);
        }
    }
);

GClientGeocoderクラスの簡単な使い方は以上となります。以下が全ソースです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<head>
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAISaqxyviRu2ZdPokB6DyURQUmdxOOAs9gZ
KiURYEsRKKeB07FhRAvRkIHfRhGOpE3D7NkS4csznM9g" type="text/javascript"></script>
</head>
<body onload="initAddress()">
<div id="map" style="width:450px; height:400px"></div>
<script type="text/javascript">
//<![CDATA[
// グローバル変数の宣言
var map;
var geocoder;
// 初期化
function initAddress(){
    if ( GBrowserIsCompatible() ) {
        map	= new GMap2(document.getElementById("map"));
        // 初期化時は任意の経度、緯度の地点を表示させる
        map.setCenter(new GLatLng(35.644934,139.699166), 13);
        // ジオコーディングオブジェクトの生成
        geocoder	= new GClientGeocoder();
    }
}
// 地図を移動する
function moveAddress( ADDRESS ){
    if ( geocoder ) {
        // getLatLngに住所情報を渡し、コールバック関数で地図を移動させる
        geocoder.getLatLng(			            ADDRESS, function( latlng ){
                if ( latlng ) {
                    // コールバック関数から受け取った引数を使って地図を移動	     map.setCenter(latlng, 13);
                    // マーカーを表示			                    var marker = new GMarker(latlng);
                    map.addOverlay(marker);
                }			            }
        );
    }
}
//]]>
</script>
<form action="#" onsubmit="moveAddress(this.address.value); return false">
    <input type="text" name="address" value="中目黒3-22-4" />
    <button type="submit">移動する</button>
</form>
</body>
</html>

サンプルを表示

 


このエントリーをはてなブックマークに追加

Amazon Web サービス(AWS)の概要

2009年7月6日 コメントの追加

AWSの概要と、参加方法

Amazon Web サービスとは?

Amazon Web サービス(AWS)は、一般ユーザがAmazonの商品データにアクセスできるようにするための技術、サービスの総称です。Amazonで取り扱っている商品の検索や表示といったこと以外に、Amazonのほぼすべてのデータを利用することが可能で、既存のAmazonのWebサイトと同等の機能を、そっくりそのまま自分で作り上げることもできます。

Amazon Web サービスにアクセスする手段として、RESTSOAPの両方をサポートしています (RESTとSOAPについては後述)。

現在、Amazon Web サービスはバージョンアップにより名前も変更になり、Amazon E-Commerce Service(ECS)と呼ばれています。

Amazon Web サービスの利用事例

ここで、Amazon Web サービスを利用したサービスを紹介していきましょう。どのサイトも、Amazonとは関係のない、一般ユーザや企業が公開しているものです。

  • ECナビリスト
    欲しい本や、気になった本、持っている本にキーワードをつけて、参加者で共有できるコミュニティーサービスです。書籍情報はAmazonから取得しています。
  • Amazon Light
    Amazonの基本機能のみに絞ったサービスです。
  • アスキーデジタル用語辞典
    この用語辞典で語句を検索すると、検索結果とともに、その語句関連の書籍が紹介されます。
  • Amazon Flash Search
    検索結果・関連情報を表紙のサムネイル付きで閲覧することがでる検索サービスです。

アソシエイト・プログラムでアフィリエイト収入

Amazon Web サービスは、前述のとおりAmazonにある商品データ等を利用することができますが、Amazonが以前から提供していたAmazonアソシエイトというサービスも併せて利用することが可能です。Amazonアソシエイトを併用して利用することにより、Amazon Web サービスを利用してAmazonの商品を紹介し、そのリンクを通して購入があった場合はAmazonアソシエイトから販売代金の3.5~10%程度を紹介料として得ることができます。

※Amazon Web サービスの登録は全世界で共通ですが、Amazon.co.jpアソシエイトとAmazon.comアソシエイトは個別に運営されています。Amazon.co.jpアソシエイトに登録した場合は、Amazon.co.jpの商品を紹介して紹介料が支払われます。Amazon.comの商品を紹介しても紹介料は支払われません。


Amazon Web サービスとアソシエイト・プログラムに登録

Amazonの商品を紹介してアフェリエイトの収入を得るには、Amazon Web サービスとAmazonアソシエイトに登録する必要があります。Amazon Web サービス は全世界で共通ということもあり、日本語での登録ページは用意されていませんが、Amazonアソシエイトには日本語での登録ページが用意されています。どちらも無料で登録できます。

Amazon Web サービスへの登録

AWSを利用するためには、まずはAmazonに登録をする必要があります。AmazonのWebサービスページから登録手続きをおこなうことができます。

Amazon Webサービス登録手続きページ 【英】

アソシエイト・プログラムへの参加とアソシエイトID取得

アソシエイト・プログラムに登録すると、アソシエイトIDを取得することができます。Amazon商品を紹介する際に、Amazonへのリンクや、Amazonの購入ページへのリンクにアソシエイトIDを付加すると、そこから商品が購入され た場合に、Amazonから数%の紹介料を受け取ることができます。

Amazon.co.jp アソシエイト・プログラム登録ページ

以上で、Amazon WebサービスのSubscription IDと、アソシエイトIDを取得することができました。この2つのIDは、AWSを利用してアプリケーションを開発するために必要になります。


Subscription IDがAccess Key IDに変更

今まで利用していたSubscription IDの代わりに、Access Key IDに変更となりました。

amazon web servicesサイトにログインすると、右上に下記のようなボタンがあります。

マウスをあわせるとサブメニューが表示されるので、そこで [View Access Key Identifiers] を選択すると、Access Key のIDが表示されます。

今まで使っていたRESTの場合、太字になっている部分が変更箇所です。

変更前
http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService
&SubscriptionId=0DCQFXHRBNT9GN9Z64R2&AssociateTag=smart-22
&Operation=ItemSearch&Keywords=perl&SearchIndex=Books

変更後
http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService
&AWSAccessKeyId=0DCQFXHRBNT9GN9Z64R2&AssociateTag=smart-22
&Operation=ItemSearch&Keywords=perl&SearchIndex=Books


RESTとSOAP

O'REILLYのティム・オライリーのコラムに掲載されていましたが、Amazonのスタッフによると利用者の85%はRESTを使っているそうです。RESTはSOAPと比べて手軽に利用できることから、過半数を超える利用率を獲得したものと考えられます。SOAPはRESTに比べると敷居が高いのですが、その代わり複雑なシステムを設計する際などに力を発揮しやすくなっています。

下記にRESTとSOAPを利用する上で考慮したい項目を列挙しました。

※利用する上で必須となる項目ではありません。

RESTを利用する上で考慮する点
  • 技術的にXSLTが使えるか
  • Amazonから受け取るデータを加工する必要ないか
    (データ加工が必要であれば、SOAPの利用を考慮しても良いかもしれません)
SOAPを利用する上で考慮する点
  • SOAP::LiteなどのSOAP用モジュールがインストール可能か
  • レスポンスがRESTより遅いという事実があっても、使いたい理由があるか

Amazon Web サービス周辺技術情報

REST(REpresentational State Transfer)

REST(XML over HTTP、XML/HTTPとも呼ばれる)とは、キーと値のペアをパラメータに指定してAmazon Web サービスを呼び出し、処理を実行させる仕組みのことです。処理に必要なパラメータは、URIの一部として渡されます。Amazon Web サービスが返す結果はXMLドキュメントです。

SOAP

SOAPとは、クライアントとサービスの間でメッセージをXML形式でやり取りするためのプロトコルです。交換されるメッセージはXMLで記述され、メッセージを含むフレームワークもXMLの構造データとして定義されてい ます。

利用するプログラミング言語やオペレーティングシステムごとに、SOAPを利用するためのツールキットが用意されてい るので、それらを利用して、SOAPを利用したサービス呼び出しや返されたデータの処理を簡単に行えます。

XSLT

XSLT (Extensible Stylesheet Language Transformation)はXMLベースの言語で、XML文書をHTMLやテキストなどその他のマークアップ言語のドキュメントに変換するために使われます。

XSLTサービスはREST方式でのみサポートされています。XSLTサービスを利用すると、XMLを処理せずに直接整形後のデータにアクセスできます。


参考サイト

このエントリーをはてなブックマークに追加

RSSの概要

2009年7月6日 コメントの追加

RSS(RDF Site Summary)概要

RSSは、ニュースヘッドラインを効率的に配信するために開発された規格です。ドキュメントの見出しやリンクなどのリストを共通の書式で記述するために特化されていて、サイトの目次や更新情報などを効率的に配信することができます。既にニュースやウェブログのヘッドライン配信で多く利用され、標準的配信方法としての地位を確立しています。また、RSS利用後の調査で、アクセス数の増加につながったということが実証され、より多くの注目が集まっています。

RSSの活用方法

RSSは、ニュースの見出しや要約をXML文書としてまとめるための規格で、下記のように記述されます。

CNET Japanで配信しているRDF(RSS)の一部抜粋

上記のような、ドキュメント内容の要約や更新情報が掲載されたXMLファイルをRSSフィードと呼びます。これから、RSSフィードがどのように利用されているかを紹介していきましょう。

自サイトのニュース見出しとリンクを提供する

CNNのような大手ニュースサイトではなくても、自分のサイトのコンテンツを素材として、RSSを生成し、一般向けに提供することができます。たとえば、日記や商品のレビューなどを定期的に更新しているとしたら、その見出しやリンクをRSSフィードとしてホームページ上で公開するだけです。このようなヘッドラインの提供は、単純にサイトのバナーを貼ってもらうよりも、ずっと効果的なアピールになることがあります。

外部サイトのニュース見出しとリンクを利用する

RSSを公開しているサイトがあれば、そのリソースを使って自分のホームページに埋め込むことができます。

一般的な方法としては、cronのようなコマンドを利用して、RSSフィードを読みにいくスクリプトを定期的に実行し、その内容を自分のホームページに埋め込みます。このような方法により、自分のホームページのニュース欄が自動的に更新されるようになります。

ヘッドラインビューアソフトでのニュース収集

RSSフィードを表示するための、 RSSヘッドラインビューアなどと呼ばれるソフトウェアがあります。これらはホームページを更新するためのものでなく、単純にRSSを公開しているサイトを巡回し、そのヘッドライン一覧を表示するものです。

代表的なアプリケーションは以下のとおりです。

ウインドウズ用ヘッドラインビューア
  • Headlineviewer
      RSSフィードのURLをセットすると、ヘッドライン一覧を表示
  • FeedReader
      RSSフィードのURLをセットすると、ヘッドライン一覧を表示
  • nntp:// RSS
      ネットニュースリーダーソフト用にヘッドラインを変換
  • amphetadesk (シェアウエア)
      集めたデータをブラウザに表示
  • NewsGator (シェアウエア)
      Microsoft Outlook 上で動作
ヘッドラインビューワ
ヘッドライン検索サイト
  • FeedSter
      世界中のヘッドライン最新情報を検索

自作プログラム内でのRSSフィードの利用

プログラムから RSSフィードを活用するには、以下のページも参考になるでしょう。

RSSを利用するまでの流れ

RSSは、サイトの概要をメタデータとして記述するXMLフォーマットです。RSSとして記述された情報は、容易に他のサイトからも利用することができます。どこかのサイトで、ホロスコープや、天気予報、ヘッドライン・ニュースなどのコンテンツがRSSで記述されていれば、それを自分のサイトに自動的に埋め込むことができます。提供する側の利点としては、ニュースや天候予報などの情報を他サイトに流すことになりますが、ニュースの件名などに貼るリンク先を自サイトのURLにしておくことができるので、結果的にトラフィックを増やすことになります。

ソース提供サイトがニュースヘッドラインなどの情報を提供するまでの流れと、利用ユーザがRSSを自サイトに取り込むまでの流れは以下のとおりです。

ソース提供サイトの作業の流れ

  1. 既存の情報をRSSフィールドとして作成
  2. 利用ユーザにRSSフィードのURLを告知

利用ユーザが RSSを自サイトに埋め込むまでの作業の流れ

  1. ソース提供サイトにあるRSSフィードを取得
  2. 取得したデータを、HTMLなどに変換して出力

XMLとRDF

RSSのに関連した技術として 『XML』 と 『RDF』 があります。XMLRDFは、ウェブサイト運営をもっと簡単にするために考案された規格です。これらの規格が考案される背景には、ウェブに次のような問題がありました。

  • 内容とレイアウトを混合するHTML文書の限界
  • 保守性と柔軟性に欠けるウェブサイト運営
  • 動的コンテンツを効果的に提供するための手段の欠如
  • 巡回型検索エンジンで問題となっている、検索ワードに対する検索結果の精度

最初の2点をクリアするものとして、XMLが脚光を浴びて登場しました。XMLは、HTMLのようなシンプルなフォーマットで文書構造を記述でき、独自にタグを定義できることが特徴のマークアップ言語です。XMLを利用することにより、ウェブデータの保守を容易にし、柔軟性を高めることが可能になります。
残る2点の問題、動的コンテンツを効果的に提供、検索ワードに対する検索結果の制度を解決する手段として、RDFが開発されました。RDFは、異なるウェブアプリケーション同士がデータを交換できるようにするためのメタデータフレームワークで、ウェブ上にある膨大なドキュメントを容易に管理することを基本目的としています。その交換構文として、XMLを使用しています。つまり、RDFXMLのアプリケーションの1種ということができます。

RSSの歴史

RSSはもともと、Netscape Communications社がMy Netscapeポータルページにニュースヘッドラインを配信する方法として、1999年3月に開発・公開した規格です。

最初のRSS(RSS0.9)RDFベースに、見出し一覧を配信するためのRDFコンパクト版のようなものでした。1999年7月には、見出しだけでなく、要約、著作権、更新日付などさまざまな情報も加えたサイトサマリーを提供できるようにしたRSS0.91が登場します。

RSSへの注目度とは別に、Netscape社のポータル事業それほどの成功をもたらさず、同社はRSSの開発を事実上棚上げにしました。皮肉なことに、同技術のみはサイトサマリーを提供する枠組みとしてウェブサイト開発者に採用され、広く一般に浸透していきました。

多くのウェブサイトで利用されるようになると、これに独自の改造を加えたRSSなども出現し、多くの亜種が混在する危険性が高まりました。そのような事態を避けるために、基本的なサマリー提供機能をコアなRSSとして定義し、 より高度な機能はモジュールとして追加できるようにするという 規格が開発者のグループで検討されました。この成果として2000年12月に提案されたのがRSS1.0です。

RSSが一般に普及する理由

先に紹介したXMLRDFにより、ウェブを管理する効果的な手法が提供されるようになりましたが、実際のところ、まだまだ一般に普及しているとはいえないのが現状です。一般に普及しない要因として、XMLRDFも抽象的な規格で、即時的な効果がないことが挙げられます。それとは反対に、これから紹介するRSSは、登場と同時に多くの利用者を獲得し、様々な技術で利用されるようになりました。RSSは、RDFから派生した規格で、交換構文としてXMLを使用しているので、このような紹介は正しくないのかもしれません。ですが、ここで強調したいのは、RSSが開発者の心をつかんだのは、XMLRDFの理念ではないということです。

RSSが利用ユーザを増やした要因を端的に言えば、RSSを利用することにより、ニュースサイトのニュースヘッドラインや最新技術情報などを自分のサイトに自動的に埋め込むことができるので、常に新しいコンテンツを探しているウェブ運営者の目に留まったということです。また、ソース提供者にとっても、トラフィックを増やすための手段として受け入れられています。そこには、XMLRDFの理念は関係ありません。XMLRDFは、その利用により巡回型検索サービスなどの検索能力を向上させ、管理も容易にしますが、普通のサイト管理者に強くアピールするための、目に見える明快な効果というのは非常に薄いといえます。ブラウザで確認することのできる、明確なサービスを提供できるというのがRSSの強みではないでしょうか。

用語
RDF(Resource Description Framework)
RDF(Resource Description Framework) は、メタデータのプロパティを定義し、異なるアプリケーション同士がウェブを通じて効果的なデータ交換を可能にするためのメタデータフレームワークです。交換構文としてXMLを使用します。
XML(eXtensible Markup Language)
HTMLのようなシンプルなフォーマットで文書構造を記述でき、独自にタグを定義できることが特徴のマークアップ言語です。XML 準化は、W3C で行なわれています。
PAGE TOP

RSS実技

RSSフィードの読み込み

XMLはインターネット・エクスプローラでも閲覧することができますが、ソースの状態のまま表示されてしまいます。このままでは読みにくいので、RSSのヘッドライン情報を利用しているサイトのほとんどは、RSSフィードを読み込んでからHTML形式に変換して表示させています。

RSSフィードを読み込み、そこからタイトルやリンクだけを抜き取るには、XML::RSSモジュールが便利です。Perl 5.6には標準のモジュールとしてXML::Parserモジュールが含まれていますが、これは汎用的にXMLを扱うものです。RSSに関しては、RSS用に特化して設計されたXML::RSSモジュールを利用したほうがよいでしょう。

ダウンロードリンク

以下のプログラムは、インターネットで公開されているRSSフィードからデータを取得し、出力するためのものです。

#!/usr/local/bin/perl
use LWP::Simple 'get';
use XML:: RSS;
# RSSオブジェクトのリファレンスを取得
my $rss = new XML::RSS;
# LWP::SimpleのgetメソッドでRDFファイルを読み込み、
# XML::RSSのparseメソッドでRSSフィードをパースし、その結果を保存。
eval {
    $rss->parse( LWP::Simple::get('http://slashdot.org/slashdot.rdf') );
};
exit if $@;
# RSSの各 item ごとの title を抜き出し、出力
foreach my $ref( @{$rss->{items}} ) {
    print "$ref->{'title'}:$ref->{'link'}\n";
}

LWPはウェブにあるデータを処理するためのライブラリです

※LWPはPerlの標準モジュールなので、CPANからインストールする必要はありません。

XML::RSSparseメソッドは、XML構文のパースに失敗すると例外を投げてスクリプトを終了させるので、evalを使ってそれを回避させるのがベストです。

ここでは、取得したヘッドラインニュースをそのまま出力していますが、データベースなどに挿入しておき、必要なときだけそこから取り出すようにしてもよいでしょう。

RSSの出力

RSSの出力は、読み込みと同様にXML::RSSモジュールを利用します。

処理の流れは、XML::RSSクラスのインスタンスを生成し、channel/add_itemメソッドで情報を登録、as_stringメソッドで出力となります。少し詳しく紹介していきましょう。

まず、XML::RSSクラスのインスタンスを生成します。ここで生成されたインスタンスからchannelメソッドを呼び出し、サイト情報を定義します。次に記事データを取得します。記事データは、データベースに登録してある情報などを取得するのが一般的ですが、ここではスクリプトの中でタイトルとURLを指定しています。記事データを取得したら、add_itemメソッドで記事を追加していきます。channelメソッドやadd_itemメソッドによって登録された情報は、as_stringメソッドで取得することができます。ここで取得したXMLデータを、JcodeモジュールでUTF8に変換、最後はprintで出力します。

以下は、RSSフィードを出力する簡単なスクリプトです。

#!/usr/bin/perl -w
use XML::RSS;
use Jcode;
# XML::RSSクラスのインスタンスを生成
my $rss = new XML::RSSversion => '0.91';
# サイト情報をchannelメソッドで 定義
$rss->channel(
    title => 'rhythmfactory',
    link => 'http://xxx/',
    language => 'ja',
    description => sprintf('Summary for %s',$title),
);
# 記事データを準備
my %item = (
    'title1' => 'http://xxx/1',
    'title2' => 'http://xxx/2',
);
# 記事をadd_itemメソッドで追加
while ( my($k,$v) = each %item ){
    $rss->add_item(
        title => $k,
        link => $v,
    );
}
# 出力
print "Content-Type:text/plain\n\n";    # or "text/xml"
print Jcode->new($rss->as_string)->utf8;

定期的に巡回する方法

ニュースなどのRSSは1日に1回、多ければ数回更新されます。これを自動で定期的に読み込み、データを同期するにはcrontabというシェルコマンドを使います。

crontabの書式は下記のとおりで、分・時・日・曜日とコマンドのパスを記入します。

min hour day month week command

分・時・日・曜日の代わりにワイルドカード( * )を使うことができます。たとえば、毎日 10:00 にcron.cgiを実行したい場合は、下記のように日・曜日にワイルドカードを使います。

10 0 * * * cron.cgi

毎月1日の10:00にcron.cgiを実行するには、下記のように記述します。

10 0 1 * * cron.cgi

それでは、crontabを実行して、定期実行の設定を行いましょう。cronファイルを編集するには、crontabにオプションの -e をつけて実行します。

crontab -e

  編集画面で、たとえば以下のように入力します。

0 0 * * * /home/www/cgi-bin/rss_outdb.cgi

上記の意味は、「毎日0時0分にrss_outdb.cgiを実行」となります。

RSS関連リンク集

現在提供されている RSS

RSSを集めて提供しているサイト

RSSツール・サンプル

RSS講座・解説

RSSに関連するプロジェクト

RSS関連の書籍

このエントリーをはてなブックマークに追加

Jump to the top