Sinatra とは
- Web アプリを簡単につくれるライブラリ
- Sinatra
インストール
- sinatra と、併せて利用する webrick の Gem をインストール
% gem i sinatra webrick簡単な内容をブラウザ表示する
- 適当なディレクトリにファイル
main.rbを用意する - 以下のスクリプトを記述
require "sinatra" # sinatra 読み込み
get "/hello" do # get メソッド以降にブラウザパスを指定
"Hello!" # ブロック内にブラウザでアクセスされた時の処理を書く
end- ポート番号を指定して Sinatra 起動
% ruby main.rb -p 4567- http://localhost:4567/hello にアクセス
- ブラウザ画面に Hello! と表示される
Sinatra を起動できない
- 以下のエラーが出る
== Someone is already performing on port 4567!
/Users/username/.rbenv/versions/3.1.2/lib/ruby/3.1.0/socket.rb:201:in `bind': Address already in use - bind(2) for 127.0.0.1:4567 (Errno::EADDRINUSE)- 原因
- 同じポート番号を使用したプロセスが存在する
- 対処法
killコマンドで不要なプロセスを切る
ps -ax | grep ruby- 現在動いているrubyのプロセスを確認する
- 不要とおぼしきプロセス番号を特定する
kill プロセス番号
`bind': Address already in use - bind(2) for 127.0.0.1:3000 (Errno::EADDRINUSE)エラーの対処法 - Qiita
Web アプリの中で Ruby プログラムを実行
- 配列から 1 つの要素をランダムに表示する
- ブラウザをリロードするごとに表示内容がランダムで変わる
require "sinatra"
get "/drink" do
["coffee", "tea", "latte", "mocha"].sample
endWeb ページへアクセスして HTML を取得
- 以下は『はてなブックマーク』のトップページの HTML ソースコードを取得するプログラム
require "net/http" # (1)
require "uri" # (2)
uri = URI.parse("https://b.hatena.ne.jp/") # (3)
result = Net::HTTP.get(uri) # (4)
puts result- 標準添付ライブラリ
net/http読み込み- (4)の
Net::HTTPクラスを使えるようになる ::名前空間の指定で、Netモジュールの中にあるHTTPクラスを指している
- (4)の
- 標準添付ライブラリ
uri読み込み- (3)で
URIモジュールを使えるようになる
- (3)で
URI.parseメソッドに URL を文字列で渡すことで、URI オブジェクト(正確にはURI::HTTPSオブジェクト)を作る- (ここでは URL と URI は同じと考えてよい)
Net::HTTP.getメソッドに、(3)で作った URI オブジェクトを渡すと、URI オブジェクトが示す先の Web サーバーへHTTP GETメソッドでリクエストを送る- Web サーバーが返したレスポンス HTML が戻り値となる
スクレイピングしたい場合
Net::HTTP.getメソッドは、リクエスト結果を文字列で返す- スクレイピング結果を編集したい場合は
xml パーサーと呼ばれるnokogiri Gemなどを利用する
Web ページへアクセスして JSON を取得
require "net/http"
require "uri"
uri = URI.parse("https://igarashikuniaki.net/example.json")
p result = Net::HTTP.get(uri)"{\"caffe latte\":400}\n"- 標準添付ライブラリ
jsonを使うと、JSON をハッシュへ変換できる JSON.parseメソッドは、引数で渡した JSON である文字列を、ハッシュへと変換するメソッド
require "net/http"
require "uri"
require "json"
uri = URI.parse("https://igarashikuniaki.net/example.json")
result = Net::HTTP.get(uri)
hash = JSON.parse(result)
p result # "{\"caffe latte\":400}\n"
p hash # {"caffe latte"=>400}
p hash["caffe latte"] # 400JSON へ変換
- 標準添付ライブラリ
jsonを使うと、ハッシュを JSON への変換もできるto_jsonメソッドを使う
- JSON へ変換することで、HTTP リクエストするときに利用などもできる
require "json"
p({mocha: 400}.to_json)
# "{\"mocha\":400}"Web ページへ HTTP POST メソッドでリクエストする
- ブラウザで Web ページへリクエストするときや、リクエストするプログラム
HTTP GETメソッドを使う- リクエスト先の状態を変えないときに使う
- リクエスト先の状態を変えるときに使う
HTTP POSTメソッドもある- 例)住所を登録する際、入力フォームに情報を入れて登録ボタンを押した際に使われる
HTTP POST 自体がよく分かっていないので省略
253 ページ