WebサービスをRailsで1週間程度で作ってみた:技術編1
さて、前回の続きです。
khondalit.hatenablog.com
今回はスクレイピングに必要なYoutube周りの話となります。
作ったサービス
落語の動画をまとめています。
http://sqale.yoseba.org/
技術
開発したいものは前回に決めているので、まずは技術の選定から。
フレームワーク
Sinatoraとか他にも使ったことのあるフレームワークはいくつもありますが、仕事の延長もあってRailsを選択しました。
このレベルだとちょっとフルスタックすぎる気もしますが、gemもRails前提が多いですしね。
Ruby以外のフレームワークもありですが、Ruby以外だと過去互換性が弱い言語やセキュリティがアレだったりしますし...
個人開発ですと、なるべくメンテが少ないほうが嬉しいです。仕事だと毎日時間を使えますけど、そこまでコストは掛けれないですし。
Ruby、Rails界隈はアップデートが多いのですが、このサイト自体は機能的にかなり少ないですしテストを書く余裕もあるかと思います。
DataBase
個人だとPostgreSQLを使うことも多いのですが、今回はMySQL。
これはレンタルサーバーとかまで考えるとまだまだMySQLが強いですしね。
サーバ
はじめはHerokuを考えていましたが、Sqaleを選択しました。
Herokuは制限が多かったりしますが、Sqaleは日本語というのも大きな理由。
Sqaleはメール使えないとかメモリが少ないとかありますが、まあさほど大きくないサービスですしこれで良しとしましょう。
MySQLを選択したのもSqaleも影響しています。
個人開発だとこれぐらいのサーバーで動作するのを前提にアイディアを出したほうが良いかもしれません。
風呂敷を広げても完成しませんし、制限がある前提で考えるぐらいで調度良かったです。
Gem
今回のメイン機能はYoutubeAPIです。
YoutubeAPIを使用するGemはyoutube_itが有名だと思います。
github.com
ただ最終更新が1年以上前で、現状のYoutubeAPIでは使い物にならないようです。
代わりのGemを探していた所Ytというのを見つけましたので、ありがたく採用することに。
github.com
APIキーの取得
Google Developers ConsoleからYoutubeDataAPIのキーを所得しておきましょう。
console.developers.google.com
APIキーの設定
Yt.configuration.api_key = "APIのキー"
検索
検索も非常に簡単です。
videos = Yt::Collections::Videos.new videos.where(q:"落語").each do |video| p video.title p video.id end
IDから取得
IDが分かっていれば動画単体でも取得できます。
video = Yt::Video.new(id:"youtubeの動画ID") p video.title p video.description
詳しい使い方はこちらから
fullscreen.github.io
これでYoutubeからスクレイピングする準備が整いました。
あとは、落語家名なり演目名なりでひたすら検索、DBへの保存を行えば良いでしょう。
今回大変だったのはyoutube_itが死んでいたことです。
このGem数年前に試しに使ってみて問題がなく普通に使えていたのですが、久しぶりに使ってみるとまったく動かず対応するのにそれなりに時間を使いました。
Gemの便利な所でもあり不便な所でもありますね。