「楽天API」を使って、楽天が提供してくれる情報を使用して、Webサービスを作る方法をお伝えします!
APIを使用することで、Webサービスでできる幅がグンと広がります。ここでは、「楽天API」を使用して、ホテル情報と本の検索の方法をご紹介します。
私は、プログラミングスクールの卒業制作として、旅行の情報を調べたり、登録したりできる「旅フィルム」というWebサービスを作成しました。
「旅フィルム」の中で、ホテルの情報を探せるようにしたいけど、自分でデータベースに情報を持つなんて絶対無理💦
簡単にいろんな情報が見れる方法はないかな?と思っていた時に、FrankuL代表の川角に「API使ったらいいよ!」と勧められました。
そこで、無料で使えるAPIを調べた時に見つけたのが、「楽天API」でした。
APIを使用してみたい方は、ぜひ、参考にしてみてください。
APIって何?
API・・・アプリケーションプログラミングインタフェース(Application Programming Interface)とは、広義ではソフトウェアコンポーネント同士が互いに情報をやりとりするのに使用するインターフェイスの仕様である。
引用元:ウィキペディア
すごく簡単に言うと、サービスを広めたい提供者から、サービスを使いたい利用者がルールに基づいて情報を使用するものです。
「Amazon」や「Google」「Yahoo」などが提供しています。これらは、APIの中でも「Web API」と言われています。
Web APIは誰でも使うことができるのですが、私が使いますよ〜と言うお知らせのキーを取得する必要があります。
そのキーを使用して利用者が各サービス提供者へ「リクエスト」をし、サービス提供者が「レスポンス」を返すということが行われます。

楽天APIとは?
「楽天API」は、楽天が提供するAPIです。楽天ウェブサービスの「Rakuten Developers」を利用します。
無料で利用できるので、自分のWebサービスに組み込んでみたい!という方は、ぜひ利用してみてください。
APIの種類
利用できるAPIはこちらです。
- 楽天市場系API
- 楽天ブックス系API
- 楽天トラベル系API
- 楽天ブックマーク系API
- 楽天レシピ系API
- 楽天Kobo系API
- 楽天GORA系API
上記の中で、さらに細かく使いたいものがセレクトできるようになっています。
楽天APIの使用に必要なこと
楽天APIの利用には、Rakutenのアカウントが必要です。
Rakutenのアカウントを持っていない方は、まず最初にアカウントを作成しましょう。
また、利用するアプリ(Webサービス)の登録が必要なので、アプリ名やURL等も先に準備しておきましょう。
参考)楽天ウェブサービス(https://webservice.rakuten.co.jp/)
楽天APIで、できること

結局のところ、楽天APIで何ができるの!?
「楽天API」を利用することで、自分が作りたいWebサービスに簡単に情報を入れ込むことができます。
例えば、私が作成したWebサービスの「旅フィルム」では、ホテルや旅館の検索に楽天トラベル系APIの「楽天トラベル空室検索API」を利用しています。
楽天トラベル系APIには「楽天トラベル検索API」や「楽天トラベルランキングAPI」などがあります。
「旅フィルム」では、空室検索から予約までできるようにしたかったので、「楽天トラベル空室検索API」を使用しましたが、ランキングを紹介するサイトを作りたかったら、「楽天トラベルランキングAPI」など、目的に合わせて利用できます。
そのほかにも、オススメレシピの紹介サイトを作成したければ、楽天レシピ系APIを利用したり、本の紹介をするサイトを作る場合は、楽天ブックス系APIを使用するなど、作成したいWebサービスに合わせて上手にAPIを取り入れてみましょう。
また、実際にWebサービスに取り入れる前に、APIテストフォームを利用してやりたいことができるかお試しすることもできるので、まず最初に試してみましょう!
楽天APIの使い方
楽天ウェブサービス にアクセス

テストフォームで自分のやりたいことができるか試してみましょう

・APIカテゴリー、API名を選択します。・アプリ名は未登録の場合は、「Rakuten Api Explorer」を選択したままにしてください。

※ パラメーター名は、必要なものを選択しましょう。ここでは、施設検索に最低限必要なlargeClassCode, middleClassCode, smallClassCodeを選択しています。

すると、URLが生成されます。
「GET」をクリックすると結果が表示されます。

テストで欲しい結果が取得できたら、アプリを登録して自分のサイトに活用しましょう!
アプリ(Webサービス)の登録
「+アプリID発行」もしくは「新規アプリ登録」をクリック

利用規約を読んだら、
・アプリ名
・アプリURL
・認証ナンバー
を入力して、「規約に同意して新規アプリを作成」をクリック

アプリ用のIDが生成されます。

実際にソースを書いてみましょう
<サンプル1>
楽天トラベル系APIを使用して、空室検索
※ 「ゲット」は「_GET」に置き換えて使用してください。
「x」は「*(半角)」に置き換えて使用してください。① 情報を取得するためのPHP
//フォームで入力された検索キーを使用する
$largeClassCode = "japan";
$middleClassCode = $ゲット['prefecture'];
$smallClassCode = $ゲット['smallarea'];
$detailAreaCode = $ゲット['detailarea'];
$checkinDate = $ゲット['checkin_date'];
$checkoutDate = $ゲット['checkout_date'];
$adultNum = $ゲット['adultNum'];
if ($middleClassCode == null) {
echo "検索条件を入力してください。";
} else {
if (!isset($ゲット['page'])) { //$ゲット['page']はURLに渡された現在のページ数
$page = 1; //設定されていない場合は1ページ目
} else {
$page = $ゲット['page'];
}
//developerId
$applicationId = "アプリID";
//affiliateId
$affiliateId = "アフェリエイトID(希望に合わせて)";
// rakuten URLの生成
$url = "https://app.rakuten.co.jp/services/api/Travel/VacantHotelSearch/20170426?format=json".
'&applicationId='.$applicationId.
'&affiliateId='.$affiliateId.
'&largeClassCode='.$largeClassCode.
'&middleClassCode='.$middleClassCode.
'&smallClassCode='.$smallClassCode.
'&detailAreaCode='.$detailAreaCode.
'&checkinDate='.$checkinDate.
'&checkoutDate='.$checkoutDate.
'&adultNum='.$adultNum.
'&roomNum='.$middle.
'&serchpattern=0'.
'&hotelThumbnailSize=2'.
'&hits=30'.
'&page='.$page.
'&responseType=middle'.
'&sort=standard';
//RESTで返されるjsonファイルを取得
$json = file_get_contents($url);
//jsonファイルの読み込み
$obj = json_decode($json);
//空室情報取得数
$recordCount = $obj->pagingInfo->recordCount;
$pageCount = $obj->pagingInfo->pageCount;
$page = $obj->pagingInfo->page;
$first = $obj->pagingInfo->first;
$last = $obj->pagingInfo->last;
}
ご自分の作成したい内容に合わせて、パラメーターを参考に検索キーやURL生成部分は調整してください。 ② 情報を表示するためのPHP
if (!isset($ゲット['page'])) {
//$ゲット['page']はURLに渡された現在のページ数
$now = 1; //設定されていない場合は1ページ目
} else {
$now = $ゲット['page'];
}
// 表示開始ナンバー設定 ページ数×30件÷30件
$hEnd = 30;
if ($pageCount == $now) {
$hEnd = $last - (($now - 1) x 30);
}
// ホテルの情報取得
for ($hCount = 0 ; $hCount < $hEnd ; $hCount++) { // 表示開始ナンバー以上、表示終了ナンバー以下の場合のみホテルの情報を表示
$hotelName = $obj->hotels[$hCount]->hotel[0]->hotelBasicInfo->hotelName;
$hotelSpecial = $obj->hotels[$hCount]->hotel[0]->hotelBasicInfo->hotelSpecial;
$hotelInformationUrl = $obj->hotels[$hCount]->hotel[0]->hotelBasicInfo->hotelInformationUrl;
$planListUrl = $obj->hotels[$hCount]->hotel[0]->hotelBasicInfo->planListUrl;
$reviewUrl = $obj->hotels[$hCount]->hotel[0]->hotelBasicInfo->reviewUrl;
$hotelMinCharge = $obj->hotels[$hCount]->hotel[0]->hotelBasicInfo->hotelMinCharge;
$hotelImageUrl = $obj->hotels[$hCount]->hotel[0]->hotelBasicInfo->hotelImageUrl;
$roomImageUrl = $obj->hotels[$hCount]->hotel[0]->hotelBasicInfo->roomImageUrl;
$reviewCount = $obj->hotels[$hCount]->hotel[0]->hotelBasicInfo->reviewCount;
$reviewAverage = $obj->hotels[$hCount]->hotel[0]->hotelBasicInfo->reviewAverage;
$userReview = $obj->hotels[$hCount]->hotel[0]->hotelBasicInfo->userReview;
$address1 = $obj->hotels[$hCount]->hotel[0]->hotelBasicInfo->address1;
$address2 = $obj->hotels[$hCount]->hotel[0]->hotelBasicInfo->address2;
$access = $obj->hotels[$hCount]->hotel[0]->hotelBasicInfo->access;
}
ソースを利用した内容は「旅フィルム」でご確認ください。
*参考にさせていただいたWebサイト*
参考)きまっし金沢の雑記帖(https://kimassi.net/zak/?p=19634)
<サンプル2>
楽天ブックス系APIを使用して、書籍検索① 情報を表示するためのPHP
// フォームで入力された検索キーを使用する
$keyword = $ゲット['keyword'];
//developerId
$applicationId = "アプリID";
//affiliateId
$affiliateId = "アフェリエイトID";
// rakuten URL
$url = "https://app.rakuten.co.jp/services/api/BooksTotal/Search/20170404?format=json".
'&applicationId='.$applicationId.
'&affiliateId='.$affiliateId.
'&booksGenreId=000'.
'&keyword='.$keyword;
if($keyword != "") {
//RESTで返されるjsonファイルを取得
$json = file_get_contents($url);
//jsonファイルの読み込み
$obj = json_decode($json, true);
}
ご自分の作成したい内容に合わせて、パラメーターを参考に検索キーやURL生成部分は調整してください。 ② 情報を取得するためのPHP
if (!isset($ゲット['page'])) { //$ゲット['page']はURLに渡された現在のページ数
$now = 1; //設定されていない場合は1ページ目
} else {
$now = $ゲット['page'];
}
// 表示開始ナンバー設定 ページ数×30件÷30件
$hEnd = 30;
if ($pageCount == $now) {
$hEnd = $last - (($now - 1) x 30);
}
if ($keyword != "") {
// 情報取得
for ($hCount = 0 ; $hCount < $hEnd ; $hCount++) {
// 表示開始ナンバー以上、表示終了ナンバー以下の場合のみホテルの情報を表示
$author = $obj["Items"][$hCount]["Item"]["author"];
$isbn = $obj["Items"][$hCount]["Item"]["isbn"];
$itemCaption = $obj["Items"][$hCount]["Item"]["itemCaption"];
$itemPrice = $obj["Items"][$hCount]["Item"]["itemPrice"];
$itemUrl = $obj["Items"][$hCount]["Item"]["itemUrl"];
$mediumImageUrl = $obj["Items"][$hCount]["Item"]["mediumImageUrl"];
$publisherName = $obj["Items"][$hCount]["Item"]["publisherName"];
$title = $obj["Items"][$hCount]["Item"]["title"];
$subTitle = $obj["Items"][$hCount]["Item"]["subTitle"];
}
表示するとこんな感じです。

表示方法は、グリッドや表タイプなど、HTML・CSSで調整してください!
まとめ
最後までお読みいただき、ありがとうございます。
APIを利用することで、開発時間を大幅に減らすことができます。
しかも、自分では作りきれないサービスを作ることもできちゃいます。
楽天APIは、楽天のサービスの中からいろんな種類のAPIを使用することができます。また、楽天のポイントでの還元でアフェリエイトをすることもできます。
APIに興味がある方は、無料で使える「楽天API」を使って、様々なサービスを作ってみましょう!
2020年10月にプログラミングスクールを卒業して、フリーランスエンジニアとして、Web制作・執筆活動を行っている私が、実際に仕事をしていく中で感じた気づき、あっ!これ便利!と思ったことや本の感想などをご紹介する、学習のヒントをお届けしました!
次回もお楽しみに!



