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
end
Web ページへアクセスして 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"] # 400
JSON へ変換
- 標準添付ライブラリ
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 ページ