【Ruby】アニメのTV放送スケジュールを取得するスクリプト

はじめに

新アニメの放送開始日時を定期的に調べるのはヲタクあるあるかと思います。しかしこの作業面倒ですよね。数は多いし時期もバラバラなので頻繁に確認していても、つい録画し忘れてしまいます。あの気持ちは誠に筆舌に尽くしがたいものです。

そんな作業こそ自動化してしまおうということで、某サイトから放送スケジュールを抽出するRubyスクリプトを作成したいと思います。

Rubyスクリプト

要件としてはタイトル、放送スケジュールが抽出出来れば十分です。

require 'open-uri'
require 'nokogiri'
require 'fileutils'

TITLE_KEY = '作品名'
SCHEDULE_KEY = '放送スケジュール'

def main
  tables = get_tables
  puts get_animation_schedule_object(tables)
end

def get_tables
  html = URI.open('https://www.animatetimes.com/tag/details.php?id=6212').read
  doc = Nokogiri::HTML.parse(html)
  doc.css('table')
end

def get_animation_schedule_object(tables)
  output_object = {}
  tables.each do |table|
    tmp_title = ''
    trs = table.css('tr')
    trs.each do |tr|
      if tr.text.include?(TITLE_KEY)
        tmp_title = title_parse(tr.text)
        output_object[tmp_title] = '' if tr.text.include?(TITLE_KEY)
      end
      output_object[tmp_title] = schedule_parse(tr.text) if tr.text.include?(SCHEDULE_KEY)
    end
  end
  output_object
end

def title_parse(text)
  text.sub(/#{TITLE_KEY}/, '')
end

def schedule_parse(text)
  text.scan(/\d{4}年\d{1,2}月\d{1,2}日/).join('/')
end

main

下記の様に実行します。

$ ruby ~/animation_schedule.rb

出力結果は下記の通りです。

{"明日ちゃんのセーラー服"=>"2022年1月8日", "あたしゃ川尻こだまだよ~デンジャラスライフハッカーのただれた生活~"=>"2022年1月13日", "ありふれた職業で世界最強 2nd season"=>"2022年1月13日", "イロドリミドリ"=>"2022年1月4日", "印西あるある物 語"=>"2022年1月14日", "ヴァニタスの手記"=>"2021年7月2日/2022年1月14日", "うたわれるもの 偽りの仮面"=>"2015年10月3日/2022年1月8日", "永遠の831"=>"2022年1月30日", "王子の本命は悪役令嬢"=>"2022年1月9日/2021年12月10日", "おそ松さん(第3 期)"=>"2020年10月12日/2022年1月10日", "お昼のショッカーさん"=>"2022年1月20日/2022年1月11日", "オリエント"=>"2022年1月5日", "オンエアできない!"=>"2022年1月9日", "怪人開発部の黒井津さん"=>"2022年1月8日", "からかい上手の高木さん3"=>"2022年1月7日", "ガル学。Ⅱ~Lucky Stars~"=>"2022年1月10日", "岸辺露伴は動かない"=>"2021年2月18日/2021年12月18日/2021年12月19日", "鬼滅の刃 遊郭編"=>"2021年12月5日", "CUE!"=>"2022年1月7日", "現実主義勇者の王国再建記 第二部"=>"2022年1月8日", "賢者の弟子を名乗る賢者"=>"2022年1月11日", "幻想三國誌 -天元霊心記-"=>"2022年1月10日", "殺し愛"=>"2022年1月12日", "最遊記RELOAD -ZEROIN-"=>"2022年1月6日", "佐々木と宮野"=>"2022年1月9日", "錆色のアーマ-黎明-"=>"2022年1月9日", "錆喰いビスコ"=>"2022年1月10日", "時光代理人 -LINK CLICK-"=>"2022年1月9日", "失格紋の最強賢者"=>"2022年1月8日", "終末のハーレム"=>"2022年1月7日", "シュタインズ・ゲート ゼロ"=>"2018年4月11日/2022年1月4日", "ジョジョの奇妙な冒険 ストーンオーシャン"=>"2022年1月7日/2021年12月1日", "進撃の巨人 The Final Season"=>"2020年12月6日/2022年1月9日", "スローループ"=>"2022年1月7日", "その着せ替え人形は恋をする"=>"2022年1月8日", "空色ユーティリティ"=>"2021年12月31日", "テイコウペンギン"=>"2022 年1月5日", "天才王子の赤字国家再生術"=>"2022年1月11日", "東京24区"=>"2022年1月5日", "ドールズフロントライン"=>"2022年1月7日", "トライブナイン"=>"2022年1月10日", "ニンジャラ"=>"2022年1月8日", "ハコヅメ~交番女子の逆襲~"=>"2022年1月5日", "バトルスピリッツ -コアの光主たち-"=>"2022年1月13日", "薔薇王の葬列"=>"2022年1月9日", "範馬刃牙"=>"2021年9月30日/2022年1月10日", "異世界美少女受肉おじさんと"=>"2022年1月11日", "PUI PUI モルカー"=>"2021年1月5日/2022年1月4日", "フットサ ルボーイズ!!!!!"=>"2022年1月9日", "プラネテス"=>"2003年10月4日/2004年4月17日/2022年1月9日", "プリンセスコネクト!Re:Dive Season 2"=>"2022年1月10日", "平家物語"=>"2022年1月12日/2021年9月15日", "魔法科高校の劣等生 追憶編"=>"2021年12月31日", "名探偵コナン 警察学校編 Wild Police Story"=>"2021年12月4日", "モーレツ宇宙海賊"=>"2012年1月7日/2022年1月3日", "闇芝居(第10期)"=>"", "ゆるキャン△(1期)"=>"2018年1月4日/2022年1月6日", "リアデイルの大地にて"=>"2022年1月5日", "リーマンズクラブ"=>"2022年1月22日", "ロード・エルメロイII世の事件簿 -魔眼蒐集列車 Grace note- 特別編"=>"2021年12月31日"}

出力結果のソートについてはVimやエクセルでどうにかしてしまえば済むかと思います。個人的にはVimで整形してエクセルに貼り付けてから視覚的に見やすくして管理するという方法をおすすめします。

終わりに

そう何回も実行する処理でもないのですがやはりパフォーマンス面ではまだまだ改良の余地があります。ループ処理もN+1が否めないですし、そもそも出力形式がハッシュである必要も無いかと思います。

この手のプログラムに不慣れなもので何か思いついたら都度改良を加えたいと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA