Lotus Connections は5つのサービス(プロフィール、コミュニティー、ブログ、ドッグイア、アクティビティー) すべてにアクセスするための API を公開しており、各サービスからデータを取得したり、外部のアプリケーションからコンテンツを投稿したりすることができます。Lotus Connections がデフォルトで提供している Webクライアントもこれらの API を用いて構築されているため、それと同様の操作を API を介して行うことが可能です。Lotus Connections の各サービスは共通のアーキテクチャを用いて構築されているため (図1)、API が使用するプロトコルやデータフォーマットも共通しており、一つのサービスに対する API の利用方法を習得すれば、他のすべてのサービスに対しても同じ手法を適用可能です。
図1. Lotus Connections のアーキテクチャ
Lotus Connections API によって送受信されるのはフィードと呼ばれるデータです。フィードはブログやニュースサイト、ポッドキャストなどのコンテンツをインターネット上から配信する際に利用されているデータ (あるいはそのデータフォーマット) のことで、RSS (Really Simple Syndication / RDF Site Summary / Rich Site Summary) やAtom Syndication Formatなどの標準化されたフォーマットがいくつか存在します。Lotus Connections が採用しているフォーマットは Atom Syndication Format です。コンテンツの配信にフィードという共通したフォーマットを持つデータを用いることで、ユーザーはフィードリーダーと呼ばれるアプリケーション上にさまざまな Web サイトからの最新情報を集約して表示させることができます。例えば、developerWorks が提供しているフィード を IBM Lotus Notes 8 のフィードリーダーに登録すると、定期的に更新情報をサービスから取得してくれるので、常に最新の記事一覧を表示させることができます (図2)。このような、非常に一般的でかつオープンな仕様を持つフィードをデータとして用いることで、Lotus Connections は他のアプリケーションとのデータ連係を容易に行うことを可能にしています。
図2. IBM Lotus Notes 8 のフィードリーダー
Lotus Connections のサービスからデータを取得したり、新規コンテンツを作成したりする際に用いられるプロトコルは Atom Publishing Protocol です。Atom Publishing Protocolはブログや Wiki といった Web 上のリソースを編集するためのアプリケーションレベルの通信プロトコルで、Atom Syndication Format をベースとした XML 文書を、POST や GET, DELETE といった HTTP メソッドを使って送受信することによって、Web 上のコンテンツの取得や編集を可能にします。Lotus Connections にはこの HTTP リクエストを受け付けるための URI (サービスエンドポイント) が目的ごとに複数用意されており、用途に応じたサービスエンドポイントにリクエストを送信することでさまざまな操作を行うことができます。このように、一意の URI に対し、HTTP リクエストを用いて XMLを送受信することで Web コンテンツを操作するような API のことを REST (Representational State Transfer) API と呼ぶ場合があります(REST 自体は ネットワーク分散システムにおけるアーキテクチャスタイルのことを指します。詳細についてはこちらの論文を参照してください)。
ここでは、API の使用方法について、具体的な例を示しながら説明していきます。
まず、Lotus Connections から、あるEメールアドレスを持つユーザーのプロフィール情報を API を使って取得してみましょう。この場合は、"<PROFILES_SERVICE> /atom/search.do" というサービスエンドポイントに対して GET メソッドで HTTP リクエストを送信します。具体的には以下のような URI を使用します。
http://connections.lotus.com/profiles/atom/search.do?email=nhayashida@connetions.lotus.com
「?」以下はパラメーターとしてサービスに渡されます。この例の場合、"email" という名前のパラメーター値として "nhayashida@connetions.lotus.com" が渡されます。このリクエストによりどのようなデータが取得できるのかを確認する方法としては、Web ブラウザ上で上述の URI を開くのが最も簡単です(これは GETメソッドで HTTP リクエストを送信するのと同じです)。図3は実際に取得したデータの例です。プロフィール情報が Atom Syndication Formatベースの XML 文書として表示されています。最近の Web ブラウザはフィードリーダーを内蔵しているものも多く、例えば Apple の Safari であれば図4の様にプロフィール情報を自動的に見やすく表示させることもできます。
図3. Atom Syndication Format ベースの XML として取得したプロフィール情報
図4. Safari のフィードリーダーで表示させたプロフィール情報
前述のように、Lotus Connections API は HTTPリクエストを利用した Atom Publishing Protocol を用いているため、HTTP接続さえサポートされていれば、プログラミング言語やプラットフォームを問わず、API を利用した Lotus Connections サービスへのアクセスが可能です。例えば、名前でユーザーを検索し、そのプロフィール情報を取得するようなプログラムを Python を用いて簡単に実装することもできます。
import sys, httplib, urllib, urllib2, urlparse, base64
from xml.dom.minidom import parseString
_serviceEndpiont = 'http://connections.lotus.com/profiles/atom/search.do'
def searchProfile(username, password, query):
url = urlparse.urlparse(_serviceEndpiont)
auth = base64.b64encode('%s:%s' % (username, password))
# GET メソッドで HTTP リクエストを送信
request = urllib2.Request(_serviceEndpiont + '?' + urllib.urlencode({'name' : query}))
request.add_header('Host', url.hostname)
request.add_header('Content-Type', 'application/atom+xml')
request.add_header('Authorization', 'Basic %s' % auth)
response = urllib2.urlopen(request)
return response.read()
def main(argv):
if(len(argv) != 4):
sys.exit('Usage: python SearchProfile.py USERNAME PASSWORD SEARCH_QUERY')
username = argv[1]
password = argv[2]
query = argv[3]
responseXml = searchProfile(username, password, query)
# 取得した XML から DOM ツリーを生成して vCard の部分だけを取り出す。
dom = parseString(responseXml)
dom = dom.getElementsByTagName('content')[0]
print dom.toprettyxml(indent = ' ')
if __name__ == "__main__":
sys.exit(main(sys.argv))
|
このプログラムをターミナル上で実行すると、図5のように、検索したユーザーのプロフィールをAtom Syndication Formatベースの XML 文書として取得することができます。
図5. Python を用いてプロフィール情報を取得した例
今度は Lotus Connections のサービス上に新規コンテンツを作成してみましょう。ここでは API を使ってドッグイアに新規ブックマークエントリーを作成します。この場合に使用されるサービスエンドポイントは "<DOGEAR_SERVIVCE>/api/app?email={emailaddress}" で、指定されたEメールアドレスを持つユーザーのブックマークにエントリーが作成されます。このエンドポイントに対して以下のような Atom Syndication Format ベースの XML 文書を POST メソッドを使って送信することでブックマークエントリーを作成することができます。
<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://www.w3.org/2005/Atom">
<category scheme="http://www.ibm.com/xmlns/prod/sn/type" term="bookmark"/>
<title>Lotus Connections</title>
<link href="http:// www.lotus.com/connections/"/>
<content type="html"/>
</entry>
|
以下のコードは上述のような XML 文書をサービスエンドポイントに POST する Python プログラムの例です。このプログラムを実行すると図6のようにドッグイア上に新しいブックマークエントリーが作成されます。
import sys, httplib, urllib, urllib2, urlparse, base64
_serviceEndpoint = 'http://connections.lotus.com/dogear/api/app'
_bookmarkTemplate = """<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://www.w3.org/2005/Atom">
<title>%s</title>
<link href="%s" />
<content type="html" />
<category scheme="http://www.ibm.com/xmlns/prod/sn/type" term="bookmark" />
</entry> """
def createBookmark(username, password, email, title, link):
# 生成するブックマークエントリーを Atom Syndication Format ベースの XML 文書として作成
data = _bookmarkTemplate % (title, link)
auth = base64.b64encode('%s:%s' % (username, password))
url = urlparse.urlparse(_serviceEndpoint)
# POSTメソッドを使ってHTTP リクエストを送信
request = urllib2.Request(_serviceEndpoint +'?'+ urllib.urlencode({'email' : email}))
request.add_header('Host', url.hostname)
request.add_header('Content-Type', 'application/atom+xml')
request.add_header('Content-Length', str(len(data)))
request.add_header('Authorization', 'Basic %s' % auth)
request.add_data(urllib.unquote(data))
response = urllib2.urlopen(request)
def main(argv):
if(len(argv) != 6):
sys.exit('USAGE: python CreateBookmark.py USERNAME PASSWORD EMAIL TITLE LINK')
username = argv[1]
password= argv[2]
email = argv[3]
title = argv[4]
link = argv[5]
createBookmark(username, password, email, title, link);
if __name__ == "__main__":
sys.exit(main(sys.argv))
|
図6. API によって作成されたブックマーク
以上のように、HTTP リクエストを利用して XML 文書を送受信することで、Lotus Connections のサービスが提供するデータを取得したり、コンテンツを編集したりすることができます。HTTPリクエストは、Java や C#、JavaScript、Ruby などの様々な言語で使用することができるので、今回サンプルとして提示したプログラムと同様のものを他の言語を用いて実装することも可能です。
本稿で使用したサービス以外のコンテンツに API を使ってアクセスする場合であっても、パラメーター等が異なるだけで基本的な方法は同じです。各API が使用するサービスエンドポイントやパラメーター等の詳細については Information Center に記載されていますので、そちらを参照してください。
本稿では Lotus Connections が提供する API について、その概要と使用例を示しました。Lotus Connections は非常にオープンなアーキテクチャを採用しており、その API もプログラミング言語やプラットフォームに依存しないため、既存のさまざまなアプリケーションやサービスと連携させることが容易になっています。API を用いて Lotus Connections が提供する5つのサービスと外部のサービスをマッシュアップさせることにより、全く新しいイノベーティブなサービスを創出できる可能性もあります。興味を持たれた方は是非チャレンジしてみてください。