割とどうでもいいことも記事に起こすって目標があった記憶があるから 割とどうでもいい記事書きます。
最近仕事でPHPしているので プライベートでちょろっとだけRuby書いて遊んでます。
今日はその中のひとつであるURL収集用スクリプト。
ぶっちゃけ、あるサイトをスクレイビングしているだけなので超簡単。
#!/usr/bin/env ruby
# スクレイビング用にMechanizeさんにお世話になる
require 'mechanize'
agent = Mechanize.new
url = 'http://***********/' # 趣味がバレるのでURLは伏せる:p
# get_urls.rb 20140404
# と実行したら
# http://***********/20140404.html を取得するように
url += ARGV[0] + ".html" if ARGV[0]
# ページ取得
agent.get(url)
# 各テーブル内に必要な情報があるのでとりあえずテーブル拾う
tables = agent.page.search("div.txtBody > table")
# 各テーブルを解析
tables.each do |table|
tds = table.search("td")
# 各セルを解析
tds.each do |td|
links = td.search("a")
# このページから動画へのリンクは数字のみ含まれているのでそういうリンクを取得
movie_links = links.select {|link| link.text =~ /^\d+$/ }
# そのセルに目的のリンクがなければ次へ
next if movie_links.empty?
# 画像のalt属性に動画タイトルがあるのでそれを出力しておく
img = td.at("img")
puts img["alt"]
# 動画のリンクをそれぞれ出力
movie_links.each {|ml| puts ml["href"] }
end
end
実行したら、こんな感じのテキストファイルができる。 (実際に取得したデータではありません)
オッス! 漢だらけのふんどし大会! http://movie.example.com/video_id=92871 http://movie.example.com/video_id=92878 美人すぎる男たちの宴 http://vids.example.com/video832171 http://vids.example.com/video832198 http://vids.example.com/video832211
あとはタイトルを見て適当に必要そうな動画のURLだけ残して ほげほげしている感じ。
コードのコメントなどを真面目に読んだ方なら気付いていると思いますが 対象のサイトは毎日ページを更新しているので このスクリプトを適当に ~/bin/get_urls.rb という位置に保存して crontab で
PATH="/home/mugijiru/bin:/home/mugijiru/.rbenv/shims:/bin:/usr/bin:/usr/local/bin" 5 2 * * * get_urls.rb > $HOME/video_urls/`date +'\%Y\%m\%d'`.urls
とか書いて毎日取得している感じ。 cronの環境変数周りとかdateの書き方とか よくわからんしなんか面倒だよねってこれを書いてて思った。
ま、いい加減だけど巡回の手間が省けてるので良し。幸せになれてる。

