こんにちは!kossyです!
さて、今回はRubyの標準モジュールであるnet/httpsを使って、
GoogleBooksAPIを使う方法について、ブログに残してみたいと思います。
環境
Ruby 2.6.3
Rails 6.0.2.1
MacOS Mojave
コード全晒し
require 'net/https'
class GoogleBookClient
include Singleton
def initialize
@uri = URI.parse 'https://www.googleapis.com/books/v1/volumes'
@http = Net::HTTP.new @uri.host, @uri.port
@http.use_ssl = true
end
def search(keyword)
create_request(keyword)
@res['items'].map do |item|
info = item['volumeInfo']
{
id: item['id'],
title: info['title'],
price: item['saleInfo']['listPrice'].nil? ? ' - ' : item['saleInfo']['listPrice']['amount'].floor.to_s,
authors: info['authors'],
publisher: info['publisher'],
published_date: info['publishedDate'],
description: info['description'],
image_path: info['imageLinks']['smallThumbnail']
}
end
end
private
def create_request(keyword)
req = Net::HTTP::Get.new @uri.path + "?q=#{keyword}"
_res = @http.request req
@res = JSON.parse(_res.body)
end
end
Railsの場合、このファイルをディレクトリに置いて、config/application.rbに
module MyApp
class Application < Rails::Application
config.load_defaults 6.0
config.paths.add 'lib', eager_load: true
end
end
上記のようにlibディレクトリのファイルをロードするように設定すれば、
コンソールで試せるようになるかと思います。
早速コンソールで試してみます。
$ cd ~/任意のRailsアプリのディレクトリ
$ bundle exec rails c
> GoogleBookClient.instance.search('Rails')
=> [{:id=>"jqKkDwAAQBAJ",
:title=>"独習Ruby on Rails",
:price=>"3960",
:authors=>["小餅 良介"],
:publisher=>"翔泳社",
:published_date=>"2019-06-19",
:description=>
"現場で使える Ruby on Rails 5.2の基本 プログラミング言語RubyによるWebアプ
リケーション開発の フレームワーク「Ruby on Rails」が、『独習』シリーズに登場!
Rails入門者だけでなく、プログラミング初心者も、 ・解説→コード→演習 という形
式で、自力で使えるようになるまで、 基礎から一通り学べる本格入門書。 Railsを実
際に教えている著者による、 オブジェクト指向から、MVCモデルまで、 しっかり、じ
っくり学べる一冊です。 ~~~目次~~~ Chapter 1 Rails概要 Chapter 2 オブジェクト
指向とRubyの基本 Chapter 3 Railsの起動と簡単なアプリケーションの構築 Chapter
4 Rails全体の仕組み Chapter 5 Active Record Chapter 6 モデルに実装すべき役割
Chapter 7 モデルを豊かにする仕組み Chapter 8 ルーターとコントローラー Chapter
9 コントローラーによるデータの扱い Chapter 10 Action View Chapter 11 ビュー
を支える機能 Chapter 12 その他のコンポーネント Chapter 13 Active SupportとRai
lsのテスト ※本電子書籍は同名出版物を底本として作成しました。記載内容は印刷出
版当時のものです。 ※印刷出版再現のため電子書籍としては不要な情報を含んでいる
場合があります。 ※印刷出版とは異なる表記・表現の場合があります。予めご了承く
ださい。 ※プレビューにてお手持ちの電子端末での表示状態をご確認の上、商品をお
買い求めください。 (翔泳社)",
:image_path=>
"http://books.google.com/books/content?id=jqKkDwAAQBAJ&printsec=frontcover
&img=1&zoom=5&edge=curl&source=gbs_api"},
...
上記のような出力結果が得られると思います。
あとは返ってきた値をviewで使用すればOKです。