Web Marina

日々の業務や勉強などで得た知識をアウトプットしていきます。

【Ruby】RubyでURLにクエリ情報を追加する

f:id:song-of-life1352607:20180204234624j:plain

こんにちは、マリンです。

現在上司からjQueryの本を貸していただき、

その中から出された課題を解いています。

PHPを使ってYoutube Data APIにアクセスし動画情報を取得。

それをjQueryからAjaxを使って表示するという内容で、

PHPの部分をRubyに置き換えて行うというものです。


未だ課題クリアに至らないのですが、

その過程で学んだ様々なことを忘れないように書き記しておこうと思います。

今回は「RubyでURLにクエリ情報を追加する」というものです。

ちなみにこの課題、よせばいいのにRailsを使わず、

あくまでRubyだけで頑張っています。。。





Youtube Data API

そもそもYoutube Data APIとはなんぞや?

それはGoogleが提供するAPIの一つで、

Youtubeの機能をお手軽に使わせていただけるありがたい便利ツールです。


基本的にはお目あての機能のURLにアクセスすることで使用可能です。

(ただ書籍の仕様とはちょっと変わったみたいで、

APIキーなどの取得が必要となり、

まずそこで困惑したことは秘密です。。。)


今回はAPIのお話ではないので詳しい使い方は省きますが、

アクセスする際に特定のクエリパラメータを渡す必要があります。

今回はその部分をRubyを使って実装しよう!というお話です。


Youtube Data APIの使い方はこちらをどうぞ

YouTube Data API の概要  |  YouTube Data API (v3)  |  Google Developers




URLを書き換える

ソースコード

Rubyは2.4.0を使っています。

require 'uri'

uri = URI('https://www.googleapis.com/youtube/v3/search')

uri.query = URI.encode_www_form({
    part: 'snippet', q: ’〇〇', key: '〇〇'
  })

.query=.encode_www_formを使うため、

RubyのライブラリからURIライブラリを読み込んでいます。

class URI::Generic (Ruby 2.4.0)




詳細

Youtube Data APIURI

まず最初にYoutube Data APIにアクセスするためのURIを変数に入れています。

uri = URI('https://www.googleapis.com/youtube/v3/search')

今回使用する昨日は動画検索機能なので、

最後にsearchという文字が付いています。


.query=

RubyURIライブラリのURL::Genericクラスのメソッドです。

対象のインスタンスのクエリを設定します。

ここでは、youtubeのsearchのURIを格納したuriに対して設定しています。

uri = URI('https://www.googleapis.com/youtube/v3/search')

uri.query = ~




URI.encode_www_form

RubyURIライブラリのURIモジュールのメソッドです。

引数からapplication/x-www-form-urlencoded 形式の 文字列を生成します。

application/x-www-form-urlencodedはこちら

リクエストとレスポンスの仕組み



引数には通常は[key, value]の配列の形で渡します。

[key, value]の形ならハッシュも可です。

今回はAPIにパラメータを渡すために使用しています。

uri.query = URI.encode_www_form({
    part: 'snippet', q: ’〇〇', key: '〇〇'
  })

各パラメータの説明はこちら

Search: list  |  YouTube Data API (v3)  |  Google Developers

keyには最初の登録で取得したAPIキーを入れます。


まとめ

URIの書き換えはAPIに限らず役に立つと思うので、

今回勉強できてよかったです!

ついでにエンコードらへんの仕組みとかもサラッとなでれたし、

今度参考にさせていただいた記事をじっくり読み込んでみます。


ちなみに、現在Rubyでアクセスした結果をAjaxを使ってjQueryの方で処理する段階で、

なぜかRubyの実行結果ではなく、ソースコードがそのまま渡ってくる謎現象にハマっています。

お心当たりのある方、よろしければご教授願います。。。