Skip to content

Instantly share code, notes, and snippets.

@littlekbt
Last active October 2, 2016 23:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save littlekbt/9f05a9b1265a304c38dbc58968a95f0a to your computer and use it in GitHub Desktop.
Save littlekbt/9f05a9b1265a304c38dbc58968a95f0a to your computer and use it in GitHub Desktop.
require 'capybara/poltergeist'
require 'nokogiri'
require 'time'
require 'pry'
class YourNameFinder
class Base
attr_accessor :date, :time, :session
def initialize(date, time)
@date = date
@time = time
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, {:js_errors => false, :timeout => 5000 })
end
Capybara.javascript_driver = :poltergeist
@session = Capybara::Session.new(:poltergeist)
@session.driver.headers = {
'User-Agent' => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2564.97 Safari/537.36"
}
end
def schedules
end
private
def select_date
end
end
end
class Schedule
attr_accessor :cinema, :date, :time, :seats
def initialize(cinema, date, time, seats)
@cinema = cinema
@date = date
@time = time
@seats = seats
end
# seatsを分ける。
def split
end
end
# Scheduleインスタンスの集合
class Schedule::Set
end
class Toho < YourNameFinder::Base
def schedules
select_date
schedule = Nokogiri::HTML.parse(@session.html).css('.schedule-body-section-item').select do |schedule|
schedule.children[1].children[1].children[0].text == '君の名は。'
end[0]
schedule
.css('.schedule-item.white')
.map do |white_schedule|
start = Time.parse("#{@date} #{white_schedule.css('a > .time > .start')[0].children.text}")
if Time.parse("#{@date} #{@time[0]}") < start && start < Time.parse("#{@date} #{@time[1]}")
@session.execute_script white_schedule.children[0].attributes['href'].value
sleep 3
# 空き席一覧
seats = Nokogiri::HTML(@session.html)
.xpath("//table//tbody//tr")
.map do |tr|
tr.children.select do |td|
td.children.count >= 1 &&
td.children[0].respond_to?(:attributes) &&
td.children[0].attributes.key?('alt') &&
td.children[0].attributes['alt'].value.include?('空席')
end
end
.map do |tr|
tr.map {|td| td.children[0].attributes['alt'].value}
end
.select do |tr|
tr.size >= 1
end
Schedule.new(:toho, @date, start, seats)
end
end
.select{|s| s}
end
private
def select_date
@session.visit "https://hlo.tohotheater.jp/net/schedule/076/TNPI2000J01.do"
@session.execute_script "$('##{@date}').trigger('click')"
sleep 5
end
end
s = Toho.new('20161003', ['18:00', '22:30']).schedules
binding.pry
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment