本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

IBM Lotus Connections アプリケーション開発

IBM Lotus Connections が提供する API の概要と使用方法の解説

林田 憲昌 (hysd@jp.ibm.com), Software Engineer, Lotus Notes Client, IBM
林田 憲昌は Lotus Notes の開発に取り組んでいるソフトウェアエンジニアです。アナログオシロスコープを買おうかどうか悩んでいる30歳です。買うならもちろん輝度が高いものを。

概要: 2007年8月末に出荷が開始された IBM Lotus Connections (以下 Lotus Connections) は、企業向けのソーシャル・ネットワーク・サービス (SNS) を提供する製品であり、製品発表以来、各方面から大きな注目を集め続けています。Lotus Connections がどのようなサービスを提供しているのかについては、「IBM Lotus Connections 技術概説」を参照してください。Lotus Connections が提供するサービスは非常に完成度が高く、そのままでも十分に企業内のコラボレーション促進に貢献することができますが、それに加え、各サービスにアクセスするための API を提供することで、各ユーザーの用途に合わせた SNS 環境を創り出すことを可能にしています。これにより、サービスの利便性を向上させるためのツールを開発したり、マッシュアップと呼ばれるような外部のサービスとの連携を行ったりすることで、新たなサービスを生み出ことが可能です。本稿では、Lotus Connections が 提供している API について、その概要と使用方法について簡単な例を示しながら解説します。

日付:  2007年 10月 19日
レベル:  初級
アクティビティー: 1826 ビュー
お気軽にご意見・ご感想をお寄せください: 


Lotus Connections API の概要

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 自体は ネットワーク分散システムにおけるアーキテクチャスタイルのことを指します。詳細についてはこちらの論文を参照してください)。


Lotus Connections API の使用例

ここでは、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つのサービスと外部のサービスをマッシュアップさせることにより、全く新しいイノベーティブなサービスを創出できる可能性もあります。興味を持たれた方は是非チャレンジしてみてください。


参考文献

著者について

林田 憲昌は Lotus Notes の開発に取り組んでいるソフトウェアエンジニアです。アナログオシロスコープを買おうかどうか悩んでいる30歳です。買うならもちろん輝度が高いものを。

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Lotus
ArticleID=262456
ArticleTitle= IBM Lotus Connections アプリケーション開発
publish-date=10192007
author1-email=hysd@jp.ibm.com
author1-email-cc=

タグ

Help
このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。

スライダーバーを使用することで、より多く(少なく)タグを表示します。

人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。

マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。

このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。