読者です 読者をやめる 読者になる 読者になる

WebサービスをRailsで1週間程度で作ってみた:技術編1

さて、前回の続きです。
khondalit.hatenablog.com


今回はスクレイピングに必要なYoutube周りの話となります。

作ったサービス

落語の動画をまとめています。
http://sqale.yoseba.org/

技術

開発したいものは前回に決めているので、まずは技術の選定から。

フレームワーク

Sinatoraとか他にも使ったことのあるフレームワークはいくつもありますが、仕事の延長もあってRailsを選択しました。
このレベルだとちょっとフルスタックすぎる気もしますが、gemもRails前提が多いですしね。
Ruby以外のフレームワークもありですが、Ruby以外だと過去互換性が弱い言語やセキュリティがアレだったりしますし...

個人開発ですと、なるべくメンテが少ないほうが嬉しいです。仕事だと毎日時間を使えますけど、そこまでコストは掛けれないですし。
RubyRails界隈はアップデートが多いのですが、このサイト自体は機能的にかなり少ないですしテストを書く余裕もあるかと思います。

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の便利な所でもあり不便な所でもありますね。