Last active
August 29, 2015 13:56
-
-
Save QB/9055151 to your computer and use it in GitHub Desktop.
裁判所の傍聴券交付情報や、裁判所の番号(パラメータ)の一覧を生成して、データベースに突っ込むプログラムです。処理の仕方が苦し紛れですが、察してください (真顔)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "mechanize" | |
require "sqlite3" | |
require "pp" | |
# このプログラムは裁判所のウェブサイトから情報を取得しているため、 | |
# 裁判所のウェブサイトの仕様が変わると使えなくなります。 | |
# 使えなくなったときは連絡してください。気が向いたら修正します。 | |
# CRT には傍聴券交付情報を取得したい裁判所の番号(パラメータ)を代入。 | |
# よく使うのは、東京地裁=>15, 東京高裁=>6 ぐらいですかね。 | |
# 情報は2次元配列で返ってくるので、あとは煮たり焼いたりできます。 | |
CRT = 15 | |
DBFILE = "mydata.db" | |
settings = { | |
"tickets"=> true, # 傍聴券交付情報を取得したいときに使う | |
"courts"=> false # 裁判所のパラメータ一覧表を生成したいときに使う | |
} | |
# 設定ここまで | |
class Courts | |
def initialize(s) | |
if s["tickets"] | |
data = make_tickets_list(CRT) | |
tickets_db(data) | |
end | |
if s["courts"] | |
data = make_courts_list() | |
courts_db(data) | |
end | |
end | |
def tickets_db(data) | |
db = SQLite3::Database.new(DBFILE) | |
sql = <<-SQL | |
create table if not exists tickets( | |
str1 string, | |
str2 string unique, | |
str3 string, | |
str4 string | |
); | |
SQL | |
db.execute_batch(sql) | |
data.each do |d| | |
begin | |
db.execute("insert into tickets values(?,?,?,?);", d[0], d[1], d[2], d[3]) | |
rescue | |
puts "it may be duplicate..." # 無茶苦茶な例外処理 | |
end | |
end | |
db.execute("select * from tickets;") do |row| | |
p row | |
end | |
db.close | |
end | |
def courts_db(data) | |
db = SQLite3::Database.new(DBFILE) | |
sql = <<-SQL | |
create table if not exists courts( | |
ctr integer primary key not null, | |
name string | |
); | |
SQL | |
db.execute_batch(sql) | |
data.each do |d| | |
db.execute("insert into courts values(?,?);", d[0], d[1]) | |
end | |
db.execute("select * from courts;") do |row| | |
p row | |
end | |
db.close | |
end | |
def make_courts_list() | |
toppage = "http://www.courts.go.jp/kengaku/botyo_koufu/index.html" | |
page = Mechanize.new.get(toppage) | |
list = Hash.new | |
search_crt_link(page, list) | |
#list[1] = Time.now | |
return list.sort #{ |a,b| a[0]<=>b[0] } | |
end | |
def search_crt_link(page, list) | |
page.links_with(:href => /crtName/).each do |l| | |
num = l.href.gsub(/(.*)crtName=/, "").to_i | |
list[num] = l.text | |
end | |
page.links_with(:href => /botyo_koufu\//).each do |l| | |
country = l.click | |
country.links_with(:href => /crtName/).each do |c| | |
num = c.href.gsub(/(.*)crtName=/, "").to_i | |
list[num] = c.text | |
end | |
end | |
end | |
def make_tickets_list(crt) | |
uri = "http://www.courts.go.jp/search/jbsp0010?crtName=" + crt.to_s | |
page = Mechanize.new.get(uri) | |
list = Array.new | |
page.search("table.inline").each do |t| | |
l = Array.new | |
for i in 0..3 | |
l.push t.children[i].children[1].children.text | |
end | |
list.push l | |
end | |
return list | |
end | |
def bar # デバッグ用 | |
puts "===============" | |
end | |
end | |
Courts.new(settings) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment