LoginSignup
13

More than 3 years have passed since last update.

楽天APIでタイトルから書籍情報(著者、出版社等)を取得する

Last updated at Posted at 2017-03-08

やりたいこと

タイトルを元に書籍情報を調べる
今回使うAPIはこれ → 楽天ブックス書籍検索API

環境

  • 楽天ブックス書籍検索API
  • Visual Studio
  • C#

API利用方法

アプリIDを発行

楽天に登録後、アプリIDを発行してアプリIDをメモ。
楽天apiinfo.PNG

API用URL

https://app.rakuten.co.jp/services/api/BooksBook/Search/20130522?
        applicationId=[アプリID]
        &title=%E5%A4%AA%E9%99%BD
        &format=json

[アプリID]にはさきほど取得してメモしたものを入れ、タイトルはURLエンコードしたものを指定する。
返却形式はjsonとxmlがあったが、今回はjsonを使う。
他にも著者名や、出版社を指定する方法もある。詳細はこちら

ソースコード

リクエスト

注意すべき点として、リクエストは1秒に1回以下でないといけない。各APIの利用制限に関して

リクエスト

const string REQUEST_URL = "https://app.rakuten.co.jp/services/api/BooksBook/Search/20130522?";
const string APPLICATION_ID = ""; //ここにアプリIDを指定
string title = "もやしもん"; //書籍のタイトル
string requstUrl = REQUEST_URL
    + "&format=json" //フォーマットの指定
    + "&applicationId=" + APPLICATION_ID
    + "&title=" + HttpUtility.UrlEncode(title); //書籍タイトルをURLエンコードして指定
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(requstUrl);
req.Method = "GET"; //メソッドの形式
HttpWebResponse res = (HttpWebResponse)req.GetResponse(); //リクエストして格納。

レスポンス

レスポンス
Stream s = res.GetResponseStream(); //レスポンスのストリームを取得
StreamReader sr = new StreamReader(s);
string str = sr.ReadToEnd(); //ストリームの内容を全てstrに格納

NuGetが利用できる環境であれば、DynamicJsonを導入することによって、jsonを簡単に扱うことが出来る。

DynamicJson
var jsonData = DynamicJson.Parse(str); //先にNuGetを利用してDynamicJsonを導入している必要がある
レスポンスの中身の一部
{
  "count": 14,
  "page": 1,
  "first": 1,
  "last": 14,
  "hits": 14,
  "carrier": 0,
  "pageCount": 1,
  "Items": [
    {
      "Item": {
        "title": "もやしもん(11)",
        "titleKana": "モヤシモン",
        "subTitle": "",
        "subTitleKana": "テイルズ オブ アグリカルチャー",
        "seriesName": "イブニングKC",
        "seriesNameKana": "イブニング ケイシー",
        "contents": "",
        "author": "石川雅之",
        "authorKana": "イシカワ,マサユキ",
        "publisherName": "講談社",
        "size": "コミック",
        "isbn": "9784063524086",
        "itemCaption": "",
        "salesDate": "2012年03月",
        "itemPrice": 586,
        "listPrice": 0,
        "discountRate": 0,
        "discountPrice": 0,
        "itemUrl": "http://books.rakuten.co.jp/rb/11536505/",
        "affiliateUrl": "",
        "smallImageUrl": "http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/4086/9784063524086.jpg?_ex=64x64",
        "mediumImageUrl": "http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/4086/9784063524086.jpg?_ex=120x120",
        "largeImageUrl": "http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/4086/9784063524086.jpg?_ex=200x200",
        "chirayomiUrl": "",
        "availability": "1",
        "postageFlag": 0,
        "limitedFlag": 0,
        "reviewCount": 71,
        "reviewAverage": "4.14",
        "booksGenreId": "001001003021"
      }
    },
    {
      "Item": {
        "title": "もやしもん(12)",
        "titleKana": "モヤシモン",
        "subTitle": "TALES OF AGRICULTURE",
        "subTitleKana": "テイルズ オブ アグリカルチャー",
        "seriesName": "イブニングKC",
        "seriesNameKana": "イブニング ケイシー",
        "contents": "",
        "author": "石川雅之",
        "authorKana": "イシカワ,マサユキ",
        "publisherName": "講談社",
        "size": "コミック",
        "isbn": "9784063524567",
        "itemCaption": "",
        "salesDate": "2013年04月",
        "itemPrice": 606,
        "listPrice": 0,
        "discountRate": 0,
        "discountPrice": 0,
        "itemUrl": "http://books.rakuten.co.jp/rb/12235169/",
        "affiliateUrl": "",
        "smallImageUrl": "http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/4567/9784063524567.jpg?_ex=64x64",
        "mediumImageUrl": "http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/4567/9784063524567.jpg?_ex=120x120",
        "largeImageUrl": "http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/4567/9784063524567.jpg?_ex=200x200",
        "chirayomiUrl": "",
        "availability": "1",
        "postageFlag": 0,
        "limitedFlag": 0,
        "reviewCount": 40,
        "reviewAverage": "4.4",
        "booksGenreId": "001001003021"
      }
    },
    {
      "Item": {
        "title": "もやしもん(13)",
        "titleKana": "モヤシモン",
        "subTitle": "TALES OF AGRICULTURE",
        "subTitleKana": "テイルズ オブ アグリカルチャー",
        "seriesName": "モーニングKC",
        "seriesNameKana": "モーニング ケイシー",
        "contents": "",
        "author": "石川雅之",
        "authorKana": "イシカワ,マサユキ",
        "publisherName": "講談社",
        "size": "コミック",
        "isbn": "9784063883060",
        "itemCaption": "",
        "salesDate": "2014年03月20日",
        "itemPrice": 606,
        "listPrice": 0,
        "discountRate": 0,
        "discountPrice": 0,
        "itemUrl": "http://books.rakuten.co.jp/rb/12686581/",
        "affiliateUrl": "",
        "smallImageUrl": "http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3060/9784063883060.jpg?_ex=64x64",
        "mediumImageUrl": "http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3060/9784063883060.jpg?_ex=120x120",
        "largeImageUrl": "http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3060/9784063883060.jpg?_ex=200x200",
        "chirayomiUrl": "",
        "availability": "1",
        "postageFlag": 0,
        "limitedFlag": 0,
        "reviewCount": 20,
        "reviewAverage": "4.55",
        "booksGenreId": "001001003004"
      }
    },
    //---以下略---

jsonを見ての通り、書籍データはItems>itemにある。
同じ書籍でも巻によっては著者や出版社のデータ内容が違うことがあるから、ある程度回して取り出したほうがいい。
FormのListBoxに値をセットして、その中から選ぶなどの方法がオススメ。

書籍データ
var books = jsonData.Items;
foreach (var book in books) {
    Console.WriteLine("タイトル:" + book.Item.title);
    Console.WriteLine("著者名:" + book.Item.author);
    Console.WriteLine("出版社:" + book.Item.publisherName);
}

ListBoxを使ったサンプル

デザイナーは省略。
StrConvはVB.NETの関数。
using Microsoft.VisualBasic;
を追加しておく必要がある。

サンプル
var books = jsonData.Items;
titleList.Items.Add(title); //タイトルのListBoxに値をセット
foreach (var book in books) {

    string titleKana = Strings.StrConv(book.Item.titleKana, VbStrConv.Hiragana, 0); //タイトルかなを平仮名に
    string author = book.Item.author;
    string authorKana = Strings.StrConv(book.Item.titleKana, VbStrConv.Hiragana, 0); //著者かなを平仮名に
    string publisherName = book.Item.publisherName;

    titleKanaList.Items.Add(titleKana); //タイトルかなのListBoxに値をセット
    authorList.Items.Add(author); //著者のListBoxに値をセット
    authorKanaList.Items.Add(authorKana); //著者かなのListBoxに値をセット
    publisherList.Items.Add(publisherName); //出版社のListBoxに値をセット
}

listbox.PNG

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13