2011年 8月 22日 ― 著者からの要求により、リスト 2 の直後の段落の最初の文を変更しました。
この連載の第 1 回の記事では、Identi.ca Web サービス API について紹介し、この API を使用して PHP ベースの Web アプリケーションでデータを読み取って使用するいくつかの例を示しました。さらに、Identi.ca API の 2 通りの使い方として、SimpleXML や Zend Framework などのツールを使って手動でコードを作成する方法、そして identica-php などの既製の PHP ライブラリーを使用する方法を説明しました。
前回の記事で紹介した例では、いずれも Identi.ca API への読み取り専用アクセスを焦点としましたが、連載を締めくくるこの最後の記事では、Identi.ca API を使ってユーザーの入力を取得し、Identi.ca に表示する方法を説明します。今回の取り組みでは、新しい投稿を作成する機能、投稿にお気に入りのマークを付ける機能、そしてフォロワーの関係をセットアップする機能などを組み込んで、サンプル PHP スクリプトの機能を拡張します。それでは、さっそく本題に入りましょう。
Identi.ca API を使用する最も一般的な理由の 1 つがその検索機能です。Identi.ca API がベースとしている Twitter API と同じように、Identi.ca API が公開する検索インターフェースは、検索結果を Atom フォーマットと JSON フォーマットの両方で返します。URL http://identi.ca/api/search.atom でアクセスできるこの検索インターフェースを処理するのに最も簡単な手段となるのは、この連載の第 1 回でも使用した Zend_Feed コンポーネントのようなツールです。
リスト 1 に、Zend_Feed を使用して Identi.ca で特定の検索語と一致する投稿を検索し、検索結果を表示する方法を示します。
リスト 1. Identi.ca に対して検索を行う
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Feed');
// define query term
$q = 'green lantern';
// load search results
try {
$feed = Zend_Feed::import('http://identi.ca/api/search.atom?q=' . urlencode($q));
} catch (Zend_Feed_Exception $e) {
echo "Failed to import feed: " . $e->getMessage();
exit();
}
if ($feed->count() > 0) {
echo "<h2>Search results for '$q'</h2>";
foreach ($feed as $entry) {
echo '<div>';
echo $entry->title . '<br/>';
echo 'By: <em>' . $entry->author->name .
'</em> on ' . date('d M Y h:i', strtotime($entry->published)) .
'</div> <br/>';
}
}
?>
|
リスト 1 に示されているように、Identi.ca に対して検索を行うには、q パラメーターを使って検索語をリクエスト URL
の後に続けます。このリクエスト URL には .atom サフィックスが指定されているため、検索結果は Atom フィードとして返されます。Zend_Feed
コンポーネントは Atom フィードと RSS フィードを構文解析する目的で設計されているため、Zend_Feed コンポーネントで使用するには Atom フィードが適しています。
Zend_Feed import() メソッドを使って Atom フィードをインポートすると、標準のオブジェクト・プロパティー表記を使って処理できるオブジェクトに変換されます。リスト 1 には、Zend_Feed を使用してフィード内のエントリーを繰り返し処理し、各エントリーのタイトル、作成者、公開日を抽出する方法が示されています。この処理の結果、図 1 のような出力が生成されます。
図 1. 検索結果を一覧表示する Web ページ
サンプル・アプリケーション: インタラクティブな検索ユーティリティー
リスト 2 は、よりインタラクティブな検索ユーティリティーを作成するためにリスト 1 を修正したものです。この検索ユーティリティーでは、ユーザーが検索語をフォームに入力して、その検索語と一致する Identi.ca の投稿を表示できるようになっています。
リスト 2. インタラクティブな Identi.ca 検索ユーティリティー
<html>
<head>
<style>
.item {
float:none;
clear:both;
margin-top:1em;
}
</style>
</head>
<body>
<h2>Search </h2>
<form method="get">
Search for: <input type="text" name="q" />
</form>
<?php
if (isset($_GET['q'])) {
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Feed');
// define query term
$q = urlencode($_GET['q']);
// load search results
try {
$feed = Zend_Feed::import(
'http://identi.ca/api/search.atom?rpp=25&q=' . $q);
} catch (Zend_Feed_Exception $e) {
echo "Failed to import feed: " . $e->getMessage();
exit();
}
if ($feed->count() > 0) {
echo "<h2>Search results for '$q'</h2>";
foreach ($feed as $entry) {
echo '<div class="item">';
echo $entry->title . '<br/>';
echo 'By: <em>' . $entry->author->name .
'</em> on ' .
date('d M Y h:i', strtotime($entry->published)) .
'</div>';
}
}
}
?>
</body>
</html>
|
リスト 1 からリスト 2 への変更内容は、検索リクエスト URL のエンドポイントに、ユーザーによる入力に対するサポートを追加しているだけのマイナーなものです。具体的には、このリストでは生成された Atom フィードを構文解析し、検索の一致結果を一覧表示します。ページごとに表示する結果件数は、リクエスト URL に追加された rpp パラメーターによって指定されます。検索語は URL エンコードしてから API に渡さなければならないことに注意してください。
図 2 に、このツールが実行されている様子を示します。
図 2. インタラクティブな Identi.ca 検索エンジン
投稿を検索できるだけでなく、新たに投稿を作成することも可能です。Identi.ca API には、新しい近況メッセージを投稿したり、既存の近況メッセージを削除したりするためのメソッドが用意されています。新規メッセージをユーザーのタイムラインに投稿するには、認証済みのクライアントが POST を使ってリクエストを送信しなければなりません。第 1 回でも登場した Zend_Http_Client コンポーネントは、POST と認証の両方をサポートするため、この必要を満たすにはぴったりです。
リスト 3 を見てください。ここに、Identi.ca API を使用して新しい近況メッセージをユーザー・タイムラインに投稿するプロセスが説明されています。
リスト 3. 新しい近況メッセージを投稿する
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Http_Client');
// define user credentials
$username = 'your-username';
$password = 'your-password';
// post notice and display unique identifier
// if message successfully posted
try {
$client = new Zend_Http_Client('http://identi.ca/api/statuses/update.xml');
$client->setAuth($username, $password);
$client->setParameterPost('status', 'Happy hippos in the sun');
$response = $client->request('POST');
$xml = simplexml_load_string($response->getBody());
if ($xml->id) {
echo 'New notice created with id: ' . $xml->id;
} else {
if ($xml->error) {
throw new Exception($xml->error);
} else {
throw new Exception('Unspecified error');
}
}
} catch (Exception $e) {
echo "ERROR: " . $e->getMessage();
exit();
}
?>
|
リスト 3 ではまず、必要なクラス・ライブラリーをロードして、ユーザーのアカウント資格情報を定義します。次に、Zend_Http_Client オブジェクトが Identi.ca API のエンドポイント URL で初期化され、setAuth() メソッドを使用して認証用のアカウント資格情報が設定されます。続いて、’status’ リクエスト引数によって近況メッセージ・テキストが POST パラメーターとしてリクエストに追加された後、リクエスト全体が Identi.ca に送信されます。
リクエストが成功すると、Identi.ca は新しく作成されたメッセージを表す XML レスポンスを、そのメッセージに固有の ID とともに返します。この XML文書を構文解析すれば、成功または失敗を示すメッセージを表示できるというわけです。また、Identi.ca のユーザー・タイムラインにも、新しく作成されたメッセージが表示されます。
既存のメッセージを削除するのも同じく簡単で、メッセージ削除に対応する API エンドポイントにメッセージの固有 ID を POST 送信するだけで削除することができます。リスト 4 に、このプロセスを示します。
リスト 4. 近況メッセージの削除
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Http_Client');
// define user credentials
$username = 'your-username';
$password = 'your-password';
// define ID of notice to delete
$id = '0011223344';
// delete specified notice
try {
$client = new Zend_Http_Client(
"http://identi.ca/api/statuses/destroy/$id.xml");
$client->setAuth($username, $password);
$response = $client->request('POST');
$xml = simplexml_load_string($response->getBody());
if ($xml->id) {
echo 'Notice with id: ' . $xml->id . ' successfully deleted.';
} else {
if ($xml->error) {
throw new Exception($xml->error);
} else {
throw new Exception('Unspecified error');
}
}
} catch (Exception $e) {
echo "Failed to read API response: " . $e->getMessage();
exit();
}
?>
|
サンプル・アプリケーション: ユーザー・タイムライン・エディター
リスト 3 とリスト 4 に示した手法を適用すれば、ユーザー・タイムラインのインタラクティブなビューをごく簡単に作成することができます。このビューでは、ユーザーが前に投稿した自分のメッセージを表示できるだけでなく、用意されたコントロールを使って、既存のメッセージを削除したり、新しいメッセージを追加したりすることができます。
リスト 5 に、このエディターの完全なコードを記載します。
リスト 5. ユーザー・タイムライン・エディター
<html>
<head>
<style>
.item {
float:none;
clear:both;
margin-top:1em;
}
.img {
float:left;
margin-right:1em;
padding-bottom: 10px;
height: 48px;
width: 48px;
}
</style>
</head>
<body>
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Http_Client');
// define user credentials
$username = 'your-username';
$password = 'your-password';
// set up authenticated client
$client = new Zend_Http_Client();
$client->setAuth($username, $password);
try {
// post message if message text present
if (isset($_POST['m'])) {
$client->setUri('http://identi.ca/api/statuses/update.xml');
$client->setParameterPost('status', $_POST['m']);
$response = $client->request('POST');
$xml = simplexml_load_string($response->getBody());
if (!isset($xml->id)) {
if ($xml->error) {
throw new Exception($xml->error);
} else {
throw new Exception('Unspecified error');
}
}
// delete message if message id present
} else if (isset($_GET['d'])) {
$id = $_GET['d'];
$client->setUri(
'http://identi.ca/api/statuses/destroy/$id.xml');
$response = $client->request('POST');
$xml = simplexml_load_string($response->getBody());
if (!isset($xml->id)) {
if ($xml->error) {
throw new Exception($xml->error);
} else {
throw new Exception('Unspecified error');
}
}
}
// load user timeline
$client->setUri(
'http://identi.ca/api/statuses/user_timeline.xml');
$response = $client->request('GET');
$xml = simplexml_load_string($response->getBody());
} catch (Exception $e) {
echo "ERROR: " . $e->getMessage();
exit();
}
// parse and display status messages
if (count($xml->status) > 0) {
echo '<h2>Recent status updates</h2>';
foreach ($xml->status as $entry) {
echo '<div class="item">';
echo $entry->text . '<br/>';
echo 'By: <em>' .
$entry->user->name . '</em> on ' .
date('d M Y h:i', strtotime($entry->created_at)) .
'<br/>';
echo '<small>';
echo '<a href="?d=' . $entry->id . '">Delete</a>';
echo '</small>';
echo '</div>';
}
}
?>
<h2>Add New Post</h2>
<form method="post">
Message: <input type="text" name="m" /> <br/>
<input type="submit" name="submit" value="Post" />
</form>
</body>
</html>
|
上記のコードは一見すると複雑そうに思えますが、実際には極めて単純な内容です。リスト 5 は最初に Zend Framework クラス・ライブラリーをロードして、認証済み HTTP クライアントをセットアップします。また、第 1 回で説明した手法を使って現行ユーザーのタイムラインを取得し、そのタイムライン XML を構文解析して、ユーザーがこれまで投稿したメッセージを一覧表示します。各メッセージには、同じくメッセージの固有 ID が GET 変数として組み込まれた「Delete (削除)」リンクが伴います。さらに、このコードにはユーザーが新しい近況メッセージを入力できるように、単純な Web フォームも含まれています。このフォームを送信することで、入力されたメッセージが POST によってフォーム処理スクリプトに送信されます。
フォーム処理スクリプトは、要求されるたびに、リクエスト・メソッドが GET と POST のどちらであるかを調べ、そのメソッドに応じて実行するアクションを決定します。
- POST リクエストの場合、スクリプトはユーザーが入力したメッセージを取得した後、リスト 3 と同じように、そのメッセージを新規メッセージの作成に対応する API エンドポイントに POST 送信します。
- GET リクエストの場合、スクリプトはリクエスト URL に含まれるメッセージ ID を取得した後、リスト 4 と同じように、そのメッセージをメッセージの削除に対応する API エンドポイントに POST 送信します。
図 3 に、このスクリプトを実行することで、ユーザーの近況メッセージが一覧表示された様子を示します。
図 3. 現行ユーザーのタイムラインを一覧表示する Web ページ
図 4 に、この Web フォームで新しい投稿を追加した結果を示します。
図 4. メッセージ投稿後に更新されたユーザー・タイムラインを一覧表示する Web ページ
Identi.ca API では、ユーザー自身のタイムラインにメッセージを投稿したり、既存のメッセージを削除したりすることができるだけではありません。この API を使って、フォロワー関係を管理することもできます。Identi.ca API にはユーザーがフォローしている他のユーザーや、ユーザーをフォローしている他のユーザーを一覧表示するためのメソッドが組み込まれている上、フォロワーの一覧に対してユーザーを追加または削除する機能もあります。
リスト 6 ではその一例として、他の Identi.ca ユーザーをフォローする方法を示してあります。
リスト 6. フォロワー関係を作成する
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Http_Client');
// define user credentials
$username = 'your-username';
$password = 'your-password';
// define user to follow
$u = 'some-user';
// follow a user
try {
$client = new Zend_Http_Client(
'http://identi.ca/api/friendships/create.xml');
$client->setAuth($username, $password);
$client->setParameterPost('screen_name', $u);
$response = $client->request('POST');
$xml = @simplexml_load_string($response->getBody());
if ($xml->following == 'true') {
echo 'Now following user: ' . $u;
} else {
if ($xml->error) {
throw new Exception($xml->error);
} else {
throw new Exception('Unspecified error');
}
}
} catch (Exception $e) {
echo "Failed to read API response: " . $e->getMessage();
exit();
}
?>
|
リスト 6 に示されているように、この場合の POST リクエストは、認証済みクライアントがフォロー対象のユーザーのスクリーン名を指定して
API エンドポイントに送信する必要があります。リクエストが成功すると、指定されたユーザーの詳細を記載した XML
文書が含まれるレスポンスが返されます。このレスポンスでは、特殊な following というプロパティーが true に設定されます。
リスト 7 に、アンフォロー (つまり、フォロワー関係を解除) する場合のプロセスを示します。
リスト 7. フォロワー関係を解除する
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Http_Client');
// define user credentials
$username = 'your-username';
$password = 'your-password';
// define user to unfollow
$u = 'some-user';
// unfollow a user
try {
$client = new Zend_Http_Client(
'http://identi.ca/api/friendships/destroy.xml');
$client->setAuth($username, $password);
$client->setParameterPost('screen_name', $u);
$response = $client->request('POST');
$xml = @simplexml_load_string($response->getBody());
if ($xml->following == 'false') {
echo 'No longer following user: ' . $u;
} else {
if ($xml[0]) {
throw new Exception($xml[0]);
} else {
throw new Exception('Unspecified error');
}
}
} catch (Exception $e) {
echo "Failed to read API response: " . $e->getMessage();
exit();
}
?>
|
Identi.ca では、Twitter と同じようにユーザーが特定のメッセージにお気に入りのマークを付けることができるようになっています。この機能は、ユーザーが特定のメッセージに、特に関心の高い貴重なメッセージとしてフラグを立てるのに便利な方法です。Identi.ca API には、ユーザーのお気に入りを取得するためのメソッドと、一覧に対して項目の追加や削除をするためのメソッドが組み込まれています。
リスト 8 に、認証済みユーザーのお気に入りのメッセージをすべて取得する例を記載します。
リスト 8. ユーザーのお気に入りの取得
<html>
<head>
<style>
.item {
float:none;
clear:both;
margin-top:1em;
}
</style>
</head>
<body>
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Http_Client');
// define user credentials
$username = 'your-username';
$password = 'your-password';
// list user favorites
try {
$client = new Zend_Http_Client('http://identi.ca/api/favorites.xml');
$client->setAuth($username, $password);
$response = $client->request('GET');
$xml = simplexml_load_string($response->getBody());
} catch (Exception $e) {
echo "Failed to read API response: " . $e->getMessage();
exit();
}
// parse and display favorite status messages
echo '<h2>Favorites</h2>';
foreach ($xml->status as $entry) {
echo '<div class="item">';
echo $entry->text . '<br/>';
echo 'By: <em>' . $entry->user->name .
'</em> on ' . date('d M Y h:i', strtotime($entry->created_at)) .
'</div>';
}
?>
</body>
</html>
|
お気に入りを取得するための操作は至って簡単です。GET リクエストをお気に入り用エンドポイントに送信するだけで、ユーザーのお気に入りのメッセージ一覧が含まれた XML 文書がレスポンスとして返されます。図 5 に、その出力例を示します。
図 5. ユーザーのお気に入りを一覧表示する Web ページ
別のユーザーのお気に入りを取得することもできます。それには、id パラメーターを使って対象ユーザーのスクリーン・ネームをエンドポイントに渡せばよいのです。
プログラムによって新しいメッセージをユーザーのお気に入りに追加するには、まず始めに、メッセージの固有 ID を取得する必要があります。リスト 9 では、お気に入りのメッセージの ID を取得しているという前提で、その ID を参照する API に POST リクエストを送信しています。
リスト 9. お気に入りのメッセージを追加する
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Http_Client');
// define user credentials
$username = 'your-username';
$password = 'your-password';
// define ID of notice to be favored
$id = '0011223344';
// favor a notice
try {
$client = new Zend_Http_Client(
"http://identi.ca/api/favorites/create/$id.xml");
$client->setAuth($username, $password);
$response = $client->request('POST');
$xml = simplexml_load_string($response->getBody());
if ($xml->favorited == 'true') {
echo 'Successfully added favorite.';
} else {
if ($xml->error) {
throw new Exception($xml->error);
} else {
throw new Exception('Unspecified error');
}
}
} catch (Exception $e) {
echo "ERROR: " . $e->getMessage();
exit();
}
?>
|
POST リクエストが成功した場合のレスポンスは、メッセージのメタデータとコンテンツが含まれ、favorited プロパティーが true に設定された XML 文書となります。
ここまでのところでお察しのことと思いますが、プログラムによってお気に入りのメッセージを削除することも可能です。それには同じく、適切な API エンドポイントにメッセージ ID を渡します。リスト 10 に、このコードを記載します。
リスト 10. お気に入りのメッセージを削除する
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Http_Client');
// define user credentials
$username = 'your-username';
$password = 'your-password';
// define ID of notice to be disfavored
$id = '0011223344';
// disfavor a notice
try {
$client = new Zend_Http_Client(
"http://identi.ca/api/favorites/destroy/$id.xml");
$client->setAuth($username, $password);
$response = $client->request('POST');
$xml = simplexml_load_string($response->getBody());
if ($xml->favorited == 'false') {
echo 'Successfully removed favorite.';
} else {
if ($xml->error) {
throw new Exception($xml->error);
} else {
throw new Exception('Unspecified error');
}
}
} catch (Exception $e) {
echo "ERROR: " . $e->getMessage();
exit();
}
?>
|
これまでに説明した情報を基に、Identi.ca に対する単純なブラウザー・ベースの管理インターフェースを作成することができます。このインターフェースは Identi.ca のホームページのインターフェースと似ており、最新のパブリック・タイムラインを表示し、他のユーザーをフォローする機能や、特定のメッセージにお気に入りのマークを付ける機能を提供します。
リスト 11 に、完全なコードを記載します。
リスト 11. Identi.ca ダッシュボード
<html>
<head>
<style>
.item {
float:none;
clear:both;
margin-top:1em;
}
</style>
</head>
<body>
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Http_Client');
// define user credentials
$username = 'your-username';
$password = 'your-password';
$client = new Zend_Http_Client();
$client->setAuth($username, $password);
try {
if (isset($_GET['o'])) {
switch ($_GET['o']) {
case 'follow':
$client->setUri('http://identi.ca/api/friendships/create.xml');
$client->setParameterPost('user_id', $_GET['d']);
$response = $client->request('POST');
$xml = @simplexml_load_string($response->getBody());
if ($xml->following != 'true') {
if ($xml->error) {
throw new Exception($xml->error);
} else {
throw new Exception('Unspecified error');
}
}
break;
case 'unfollow':
$client->setUri('http://identi.ca/api/friendships/destroy.xml');
$client->setParameterPost('user_id', $_GET['d']);
$response = $client->request('POST');
$xml = @simplexml_load_string($response->getBody());
if ($xml->following != 'false') {
if ($xml->error) {
throw new Exception($xml->error);
} else {
throw new Exception('Unspecified error');
}
}
break;
case 'favor':
$client->setUri(
'http://identi.ca/api/favorites/create/' . $_GET['d'] . '.xml');
$response = $client->request('POST');
$xml = simplexml_load_string($response->getBody());
if ($xml->favorited != 'true') {
if ($xml->error) {
throw new Exception($xml->error);
} else {
throw new Exception('Unspecified error');
}
}
break;
case 'disfavor':
$client->setUri(
'http://identi.ca/api/favorites/destroy/' . $_GET['d'] . '.xml');
$response = $client->request('POST');
$xml = simplexml_load_string($response->getBody());
if ($xml->favorited != 'false') {
if ($xml->error) {
throw new Exception($xml->error);
} else {
throw new Exception('Unspecified error');
}
}
break;
}
}
// load public timeline
$client->setUri(
'http://identi.ca/api/statuses/public_timeline.xml');
$response = $client->request('GET');
$xml = simplexml_load_string($response->getBody());
} catch (Exception $e) {
echo "ERROR: " . $e->getMessage();
exit();
}
// parse and display status messages
echo '<h2>Recent public timeline updates</h2>';
foreach ($xml->status as $entry) {
echo '<div class="item">';
echo $entry->text . '<br/>';
echo 'By: <em>' . $entry->user->name .
'</em> on ' .
date('d M Y h:i', strtotime($entry->created_at)) .
'<br/>';
echo '<small>';
echo ($entry->user->following == 'false') ?
'<a href="?o=follow&d=' . $entry->user->id .
'">Follow user</a>' :
'<a href="?o=unfollow&d=' . $entry->user->id .
'">Unfollow user</a>';
echo ' | ';
echo ($entry->favorited == 'false') ?
'<a href="?o=favor&d=' . $entry->id .
'">Mark message as favorite</a>' :
'<a href="?o=disfavor&d=' . $entry->id .
'">Remove message from favorites</a>';
echo '</small>';
echo '</div>';
}
?>
</body>
</html>
|
リスト 11 は、巨大な条件文として考えるのが適切でしょう。この条件文は以下のように、リクエスト URL の o パラメーターの値に応じてそれぞれの分岐を実行します。
o=followの場合には、スクリーン・ネームを検索し、そのスクリーン・ネームに対応するユーザーとのフォロワー関係を、API を使用してプログラムで作成します。o=unfollowの場合には、数値のユーザー ID を検索し、その ID で指定されたユーザーとの認証済みユーザーのフォロワー関係を、API を使用して削除します。o=favorの場合、数値のメッセージ ID を検索し、その ID に対応するメッセージを認証済みユーザーのお気に入りリストに、API を使用して追加します。o=disfavorの場合、数値のメッセージ ID を検索し、その ID に対応するメッセージを認証済みユーザーのお気に入りリストから、API を使用して削除します。
いずれの場合にも、指定されたアクションを実行した後に、スクリプトは API を使って Identi.ca パブリック・タイムラインを再度リクエストして、XML レスポンスを構文解析し、リスト内のメッセージを適切なコントロールと併せて表示します。
図 6. Identi.ca のブラウザー・ベースのダッシュボード
この記事では、SimpleXML と Zend HTTP クライアント・ライブラリーの組み合わせを利用して Identi.ca API から PHP アプリケーションにデータを統合する方法をまとめて一気に説明しました。この 2 回連載の記事の例では、Identi.ca API の 2 つの主な使い方を紹介し、Identi.ca のコンテンツを検索する方法、プログラムによってコンテンツを追加、変更、削除する方法、ユーザーの購読情報とお気に入りを管理する方法、そしてユーザーの Identi.ca データにアクセスするためのカスタマイズしたインターフェースを作成する方法をサンプル・コードと併せて説明しました。
これらのサンプル・コードで明らかにされているように、Identi.ca API は、開発者がマイクロブロギング・サービス、そしてコンテンツの集約と検索をベースとした独創的な新しいアプリケーションを作成する際にすぐに使える、本格的で柔軟なインターフェースです。ぜひ、実際に使って自分で確かめてみてください。
学ぶために
- 「Identi.ca で
PHP を使用する: 第 1 回: PHP と StatusNet API を使用して、Identi.ca のマイクロブログのアップデートと一覧表示、検索、投稿する」(Vikram Vaswani 著、developerWorks、2011年7月): Identi.ca は、近況メッセージやニュースを投稿できる、人気の高い無料のマイクロブロギング・サービスです。この 2 回連載の記事で、Identi.ca API を使って、これらのメッセージにアクセスしたり、これらのメッセージを作成、検索したりする方法、そしてこの API を PHP と組み合わせて動的な Web アプリケーションを作成する方法を学んでください。
- StatusNet API: StatusNet API とその使い方について詳しく学んでください。
- Indenti.ca のパブリック・タイムライン: Identi.ca アカウントを無料で登録して、無料のソフトウェア StatusNet ツールをベースとしたマイクロブロギング・サービスを試してください。
- Zend_Http_Client
コンポーネント: 簡単に HTTP リクエストを実行できるこのインターフェースの詳細を読んでください。Zend_Http_Client は、HTTP クライアントに期待される単純な機能と複雑な機能をサポートします。
- Zend_Feed コンポーネント: フィードの要素、フィードの属性、およびエントリーの属性に自然な構文でアクセスして RSS フィードおよび Atom フィードを使用する方法についての詳細を読んでください。
- Twitter の API
ドキュメント: このマニュアルを参照しながら Twitter API を使い始めてください。
- この著者による他の記事 (Vikram Vaswani 著、developerWorks、2007年8月から現在まで): XML や Google API、そしてその他の技術に関する記事を読んでください。
- New to XML: XML を学ぶために必要なリソースを入手してください。
- developerWorks の XML エリア:
DTD、スキーマ、XSLT を含め、XML 分野でのスキルを磨くための資料を見つけてください。広範な技術に関する記事とヒント、チュートリアル、標準、そして IBM
Redbooks については、XML 技術文書一覧を参照してください。
- IBM XML 認定: XML や関連技術の IBM 認定技術者になる方法について調べてください。
- developerWorks の
Technical events and webcasts: これらのセッションで最新情報を入手してください。
- Twitter
での developerWorks: 今すぐ登録して developerWorks のツイートをフォローしてください。
- developerWorks podcasts: ソフトウェア開発者向けの興味深いインタビューとディスカッションを聞いてください。
- developerWorks オンデマンド・デモ: 初心者向けの製品のインストールおよびセットアップから熟練開発者向けの高度な機能に至るまで、さまざまに揃ったデモを見てください。
製品や技術を入手するために
- Zend Framework: Zend Framework をダウンロードして、よりセキュアで信頼性に優れ、幅広く利用可能な API を備えた最新の Web 2.0 アプリケーションおよび Web サービスを構築してください。
- identica-php ライブラリー: この使いやすい完全な PHP ライブラリーをダウンロードして、identi.ca プラットフォームと対話してください。
- IBM 製品の評価版:
DB2、Lotus、Rational、Tivoli、および
WebSphere のアプリケーション開発ツールとミドルウェア製品を体験するには、評価版をダウンロードするか、IBM SOA Sandbox のオンライン試用版を試してみてください。
議論するために
- XML
ゾーンのディスカッション・フォーラム: XML 関連のフォーラムに参加してください。
- developerWorks コミュニティー: ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者が主導するブログ、フォーラム、グループ、ウィキを調べることができます。

Vikram Vaswani は、オープンソースのツールと技術を専門とするコンサルティング・サービス会社、Melonfire の創業者で、現在 CEO を務めています。彼は、『Zend Framework: A Beginners Guide』および『PHP: A Beginners Guide』の著者でもあります。