WEB API PROGRAMMING!

web creators 2010年1月号
WEB API PROGRAMMING!:サンプルデータ

<注意書き>
※Web APIの仕様が変更されたなどの理由により、記事と動作が異なる場合があります。あらかじめご了承ください。

●●●●●サンプルデータ1のタイトル

wacca API

●●●●●サンプルデータ1

<?php
// xmlrpc.inc.php part of nucleus project
// http://sourceforge.jp/projects/nucleus-jp/svn/view/nucleus-jp/trunk/utf8/nucleus/libs/xmlrpc.inc.php?view=log&root=nucleus-jp
require 'xmlrpc.inc.php';

// XMLRPC用の内部文字コードの設定
// wacca APIの文字コードは、UTF-8になっているためUTF-8に設定する
$GLOBALS['xmlrpc_internalencoding'] = 'UTF-8';

/**
* 文字列データ用の配列を作成する
*
* @param string データ
*/
function _string($value)
{
return array('type' => 'string', 'value' => $value);
}

/**
* 整数データ用の配列を作成する
*
* @param integer データ
*/
function _integer($value)
{
return array('type' => 'int', 'value' => $value);
}

/**
* wacca APIに接続する
*
* @param string メソッド名
* @param array 引数
*/
function request_wacca($method, $pars = array())
{
// XMLRPCクライアントオブジェクトを作成する
$client = new xmlrpc_client('/api/xmlrpc', 'a.wacca.fm', 80);
// XMLRPC通信をデバッグしたいときは、下記のコメントをはずすこと
//$client->debug = 1;

// XMLRPC用のメッセージオブジェクトを作成する
if (count($pars) === 1) {
$val = array_shift($pars);
$param = array(new xmlrpcval($val['value'], $val['type']));
}
else {
$struct = array();
foreach ($pars as $key => $val) {
$struct[$key] = new xmlrpcval($val['value'], $val['type']);
}
$param = array(new xmlrpcval($struct, 'struct'));
}

$message = new xmlrpcmsg($method, $param);

// XMLRPCクライアントからメッセージを送信する
$result = $client->send($message);
if (! $result) {
return false;
} elseif ($result->faultCode()) {
return false;
}

// レスポンスデータを返却する
return $result->value();
}

/**
* 楽曲を検索する
*
* @param array 検索データ
*/
function request_search($options = array())
{
return request_wacca('song.Search',
array(
'keyword' => _string(isset($options['keyword']) ? $options['keyword'] : ''),
'mode' => _string(isset($options['mode']) ? $options['mode'] : ''),
'genre' => _integer(isset($options['genre']) ? $options['genre'] : ''),
'sub_genre' => _integer(isset($options['sub_genre']) ? $options['sub_genre'] : ''),
'copyright' => _string(isset($options['copyright']) ? $options['copyright'] : ''),
'copyright_commercial' => _string(isset($options['copyright_commercial']) ? $options['copyright_commercial'] : ''),
'copyright_modifications' => _string(isset($options['copyright_modifications']) ? $options['copyright_modifications'] : ''),
'order' => _string(isset($options['order']) ? $options['order'] : ''),
'limit' => _integer(isset($options['limit']) ? $options['limit'] : 20),
'offset' => _integer(isset($options['offset']) ? $options['offset'] : 0),
));
}

/**
* 任意のアーティスト情報を取得する
*
* @param integer アーティストID
*/
function request_artist_info($artist_id)
{
return request_wacca('artist.getInfo',
array('artist_id' => _integer($artist_id)));
}

/**
* 任意の楽曲情報を取得する
*
* @param integer 楽曲ID
*/
function request_song_info($song_id)
{
return request_wacca('song.getInfo',
array('song_id' => _integer($song_id)));
}

/**
* ジャンル情報を取得する
*
*/
function request_genre_list()
{
return request_wacca('song.getGenreList');
}

$keyword = $mode = '';
$result_type = '';
$result = array();
if (isset($_GET['search'])) {
$keyword = $_GET['keyword'];
$mode = $_GET['mode'];
$result_type = 'search';
$result = request_search(array('keyword' => $keyword));
}
else if (isset($_GET['artist_id'])) {
$result_type = 'artist';
$result = request_artist_info($_GET['artist_id']);
}
else if (isset($_GET['song_id'])) {
$result_type = 'song';
$result = request_song_info($_GET['song_id']);
}

// ジャンル情報を取得する
$genre_list = request_genre_list();
// ジャンルとサブジャンルにわける
$genre = $sub_genre = array();
if ($genre_list) {
$scalrval = $genre_list->scalarval();
foreach ($scalrval as $val) {
$genre_id = $val->structmem('genre_id')->scalarval();
$sub_genre_id = $val->structmem('sub_genre_id')->scalarval();
$genre_name = $val->structmem('genre_name')->scalarval();

$genre[$genre_id] = $genre_name;

if (! isset($sub_genre[$genre_id])) {
$sub_genre[$genre_id] = array();
}
$sub_genre[$genre_id][$sub_genre_id] = $genre_name;
}
}
?>

<!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" lang="ja" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>wacca APIを使って、さまざまな楽曲を検索してみよう</title>
<style text="text/css">
table { border: 1px solid gray; border-collapse: collapse; }
table th, table td { border: 1px solid gray; text-align: center; padding: 5px; }
.result { width: 240px; }
</style>
</head>

<body style="text-align: center;">
<h2>wacca APIを使って、さまざまな楽曲を検索してみよう</h2>

<p>キーワードを入力から、検索条件を必要に応じて選択して「検索」ボタンをクリックしてください</p>
<form action="wacca.php" class="search">
<label for="keyword"></label><input type="text" name="keyword" value="<?php echo htmlspecialchars($keyword) ?>" size="60">
<br>
検索対象:
<input type="radio" name="mode" value="song_title" <?php echo ($mode == '' || $mode == 'song_title') ? "checked" : "" ?>>楽曲タイトル
<input type="radio" name="mode" value="genre_freeword" <?php echo ($mode == 'genre_freeword') ? "checked" : "" ?>>楽曲の詳細
<input type="radio" name="mode" value="artist_style" <?php echo ($mode == 'artist_style') ? "checked" : "" ?>>アーティストの音楽スタイル
<input type="radio" name="mode" value="favorite_artist" <?php echo ($mode == 'favorite_artist') ? "checked" : "" ?>>尊敬するアーティスト
<input type="radio" name="mode" value="song_comment" <?php echo ($mode == 'song_comment') ? "checked" : "" ?>>アーティスト自身のコメント
<br>
ジャンル:
<select name="genre">
<option value="0">-- 指定しない --</option>
<?php foreach ($genre as $key => $val): ?>
<option value="<?php echo $key ?>"><?php echo $val ?></option>
<?php endforeach; ?>
</select>
<br>
サブジャンル:
<select name="sub_genre">
<option value="0">-- 指定しない --</option>
<?php foreach ($sub_genre as $sub): ?>
<?php foreach ($sub as $key => $val): ?>
<option value="<?php echo $key ?>"><?php echo $val ?></option>
<?php endforeach; ?>
<?php endforeach; ?>
</select>
<br>
<input type="submit" name="search" value="検索する">
</form>
<br>

<?php if ($result && $result_type == 'search'): ?>
<?php $scalrval = $result->scalarval() ?>
<?php foreach ($scalrval as $val): ?>
<center>
<table style="width: 200px; margin: 15px; float: left; height: 400px;">
<tr>
<th>アーティスト名</th>
<td>
<a href="wacca.php?artist_id=<?php echo $val->structmem('artist_id')->scalarval() ?>">
<?php echo $val->structmem('artist_name')->scalarval() ?>
</a>
</td>
</tr>
<tr>
<th>楽曲タイトル</th>
<td>
<a href="wacca.php?song_id=<?php echo $val->structmem('song_id')->scalarval() ?>">
<?php echo $val->structmem('song_title')->scalarval() ?>
</a>
</td>
</tr>
<tr>
<th>サムネイル</th>
<td>
<img src="<?php echo $val->structmem('img_url')->scalarval() ?>">
</td>
</tr>
<tr>
<th>アーティストスタイル</th>
<td><?php echo $val->structmem('artist_style')->scalarval() ?></td>
</tr>
<tr>
<th>楽曲スタイル</th>
<td><?php echo $val->structmem('song_style')->scalarval() ?></td>
</tr>
<tr>
<th>著作権者の記述</th>
<td><?php echo $val->structmem('song_credit')->scalarval() ?></td>
</tr>
<tr>
<th>演奏時間(秒)</th>
<td><?php echo $val->structmem('song_duration')->scalarval() ?></td>
</tr>
<tr>
<th>視聴数</th>
<td><?php echo $val->structmem('play_count')->scalarval() ?></td>
</tr>
<tr>
<th>URL</th>
<td>
<a href="<?php echo $val->structmem('mp3_url')->scalarval() ?>">mp3</a>
<br>
<a href="<?php echo $val->structmem('asx_url')->scalarval() ?>">asx</a>
</td>
</tr>
</table>
</center>
<?php endforeach; ?>
<?php endif; ?>

<?php if ($result && $result_type == 'artist'): ?>
<?php $val = $result ?>
<table align="center" style="width: 400px;">
<tr>
<th>アーティスト名</th>
<td>
<a href="<?php echo $val->structmem('artist_url')->scalarval() ?>">
<?php echo $val->structmem('artist_name')->scalarval() ?>
</a>
</td>
</tr>
<tr>
<th>サムネイル</th>
<td>
<img src="<?php echo $val->structmem('img_url')->scalarval() ?>">
</td>
</tr>
<tr>
<th>アーティストスタイル</th>
<td><?php echo $val->structmem('artist_style')->scalarval() ?></td>
</tr>
<tr>
<th>プロフィール</th>
<td><?php echo $val->structmem('artist_profile')->scalarval() ?></td>
</tr>
<tr>
<th>影響を受けたアーティスト</th>
<td><?php echo $val->structmem('artist_roots')->scalarval() ?></td>
</tr>
<tr>
<th>ファン数</th>
<td><?php echo $val->structmem('fan_count')->scalarval() ?></td>
</tr>
</table>
<?php endif; ?>

<?php if ($result && $result_type == 'song'): ?>
<?php $val = $result ?>
<center>
<table align="center">
<tr>
<th>アーティスト名</th>
<td>
<a href="wacca.php?artist_id=<?php echo $val->structmem('artist_id')->scalarval() ?>">
<?php echo $val->structmem('artist_name')->scalarval() ?>
</a>
</td>
</tr>
<tr>
<th>楽曲タイトル</th>
<td>
<a href="<?php echo $val->structmem('url')->scalarval() ?>">
<?php echo $val->structmem('song_title')->scalarval() ?>
</a>
</td>
</tr>
<tr>
<th>サムネイル</th>
<td>
<img src="<?php echo $val->structmem('img_url')->scalarval() ?>">
</td>
</tr>
<tr>
<th>楽曲スタイル</th>
<td><?php echo $val->structmem('song_style')->scalarval() ?></td>
</tr>
<tr>
<th>アーティストスタイル</th>
<td><?php echo $val->structmem('artist_style')->scalarval() ?></td>
</tr>
<tr>
<th>楽曲スタイル</th>
<td><?php echo $val->structmem('song_style')->scalarval() ?></td>
</tr>
<tr>
<th>著作権者の記述</th>
<td><?php echo $val->structmem('song_credit')->scalarval() ?></td>
</tr>
<tr>
<th>演奏時間(秒)</th>
<td><?php echo $val->structmem('song_duration')->scalarval() ?></td>
</tr>
<tr>
<th>視聴数</th>
<td><?php echo $val->structmem('play_count')->scalarval() ?></td>
</tr>
<tr>
<th>ダウンロード数</th>
<td><?php echo $val->structmem('download_count')->scalarval() ?></td>
</tr>
<tr>
<th>レコメンド数</th>
<td><?php echo $val->structmem('recommend_count')->scalarval() ?></td>
</tr>
<tr>
<th>チャンネル</th>
<td><?php echo $val->structmem('channel')->scalarval() ?></td>
</tr>
<tr>
<th>ビットレート</th>
<td><?php echo $val->structmem('bitrate')->scalarval() ?></td>
</tr>
<tr>
<th>サンプリングレート</th>
<td><?php echo $val->structmem('samplingrate')->scalarval() ?></td>
</tr>
<tr>
<th>URL</th>
<td>
<a href="<?php echo $val->structmem('mp3_url')->scalarval() ?>">mp3</a>
<br>
<a href="<?php echo $val->structmem('asx_url')->scalarval() ?>">asx</a>
</td>
</tr>
</table>
</center>
<?php endif; ?>

<br clear="both">
<hr>
Powered by <a href="http://wacca.fm/help/api">wacca API</a><br>
</body>
</html>

●●●●●

←BACK

Copyright (c) 2009 MdN Corporation  All rights reserved.