Rubyでクエリパラメータを作る場合,大体の記事がActiveSupportの to_param
を使っているのではないでしょうか.
このエントリではActiveSupportを様々な理由で入れたくないけれども,良い感じにクエリパラメータを作りたい場合に有効なサンプルコードを紹介します.
#!/usr/bin/env ruby
require 'net/http'
require 'uri'
require 'json'
APIID = ENV.fetch("APIID")
AFFIID = ENV.fetch("AffiliateID")
uri = URI('https://api.dmm.com/affiliate/v3/itemList')
uri.query = { api_id: APIID,
affiliate_id: AFFIID,
site: "DMM.com",
keyword: "魔法少女まどかマギカ"
}.map{ |key,val| "#{key.to_s}=#{val}"}.join('&')
json = Net::HTTP.get(uri)
res = JSON.parse(json)
主に
.map{ |key,val| "#{key.to_s}=#{val}"}.join('&')
の部分で実行しています.
クエリパラメータは =
の前後でkeyとvalがあるため,to_s
でシンボルから文字列へとキャストし,クエリパラメータの並び順に文字列を設定します.
2つ目以降のクエリパラメータは &
で連結していくため, join('&')
などでつけてあげるといいでしょう.
追記
Rack::Utils#build_query を使っても同様のことが出来るようです! 教えていただきありがとうございます!
URIを使う
URI.encode_www_formでも良い感じに出来るようです!!!! やり方は色々ある!!!