LoginSignup
9
7

More than 5 years have passed since last update.

いろんな情報を収集するサイトをRailsで作成した。

Last updated at Posted at 2018-12-25

初めに

本日はクリスマスですね。

アドベントカレンダーの最終日なので最近作っていたサイトを公開してみました。
latest.png

なぜか今javascriptがうまく機能しないところがあります。

サイトの内容

まずどういったサイトかというと様々なサイトをスクレイピングして情報を収集して情報が更新されていたらその記事のタイトルとurlを取得するといった感じです。

このサイトを作ろう思った経緯

このサイトを作ろうと思った経緯ですが正直今いろんな情報があふれていてそれを集めるには自分でググっていかなきゃいけないと思います。
その手間を省くために例えばニュースであればいろんなニュースサイトの最新記事の情報を集めてそのサイトへのリンクを張ることでグーグルで調べる手間が省けるだろうし世の中で起きていることがわかりやすくなると思ったからです。

こんな感じのサイト

サイト名はLaNLibです。

latest2.png

基本的に10分ごとにいろんなサイトを巡回して更新されていたら情報を取得しています。

また日本語だけでなく英語の記事も集めていて最終的には世界的な動向を確認できるようにもなればなと思っています。

サイトを作るうえで工夫したこと

サイトを作るうえで工夫したことはwheneverの設定です。

とりあえずコードをどうぞ…

schedule.rb
set :environment, "development"
set :output, { :error => "log/cron_error.log" }
set :path, "/mnt/c/users/owner/desktop/appname"


Dir.chdir('/mnt/c/users/owner/desktop/appname/lib/tasks')
Directories = Dir.glob("*")
methods = []
Directories.each do |drc|
    File.open("#{drc}") {|f|
    data = f.read
    @classname = data.to_s.match(/Tasks::(.+?)\r/)[1]
    datas = data.scan(/def self\.(.+?)\r/)
    datas.flatten!
    datas = datas.map {|d| [@classname.chomp,d.chomp]}
    methods << datas 
}
end 

methods.flatten!(1)

every 10.minutes do 
    methods.each do |method|
        eval "runner 'Tasks::#{method[0]}.#{method[1]}'"
    end
end 

これ何をしているのかというとlib/tasksの中にスクレイピングをするメソッドを定義していてるのですがそれをwhenever --update-crontabをするときにファイルの中身を読み込んでクラス名とメソッドを取得して自動的に反映されるようにしています。

なぜこんなことをしたかというと既に50個近くのスクレイピングのタスクがありそれをひとつずつ

runner Tasks::CrawlData.method

みたいにするのは気が遠くなるからです。

これによって自動的に反映されるため楽ですしスペルミスもないです。

evalは便利

今回アプリを作っていく中でevalがとても便利であることがわかりました。

メタプログラミングに関してはまだよくわかっていないですがこれからもっと勉強して書けるコードの幅を増やしていきたいなと思います。

おわりに

今日はクリスマスですね。

世の中は友達をワイワイしている中で自分は家でひとりプログラミングで遊んでいました。

ですが不思議と悪くないというかプログラミングで楽しく過ごせたクリスマスでした。

おわり:snowman2:

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7