Skip to content

Instantly share code, notes, and snippets.

@QB
Last active August 29, 2015 13:56
Show Gist options
  • Save QB/9055151 to your computer and use it in GitHub Desktop.
Save QB/9055151 to your computer and use it in GitHub Desktop.
裁判所の傍聴券交付情報や、裁判所の番号(パラメータ)の一覧を生成して、データベースに突っ込むプログラムです。処理の仕方が苦し紛れですが、察してください (真顔)
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