-
-
Notifications
You must be signed in to change notification settings - Fork 102
/
get_dojo_list.rb
executable file
·76 lines (66 loc) · 2.86 KB
/
get_dojo_list.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/env ruby
require 'net/http'
require 'json'
require 'pry'
# Google Spreadsheet などから対象となった Dojo 名の列をコピーし、
# get_dojo_list.txt にペースト後、本スクリプトを実行すると、
# お知らせ記事などで使える HTML のリスト一覧が出力されます。
#
# 詳細: https://github.com/coderdojo-japan/coderdojo.jp/pull/1433
INPUT_TEXT = IO.readlines('./get_dojo_list.txt')
DOJO_DB = JSON.parse Net::HTTP.get(URI.parse 'https://coderdojo.jp/dojos.json'), symbolize_names: true
# CoderDojo の名前を使って、Dojo 一覧からデータを検索
result = '<h3>🎁️ 寄贈先の CoderDojo 一覧<small style="white-space: nowrap;">(カッコ内は都道府県名となります)</small></h3>'
result << "\n\n<ul>\n"
dojo_name = ''
dojo_list = []
not_found = []
# Load and tweak dojo names from get_dojo_list.txt
INPUT_TEXT.each do |line|
next if line.start_with?('#') || line.strip.empty?
# Delete prefix like 'CoderDojo', fix 表記揺れ, etc.
dojo_name = line
.gsub(/coderdojo/i, '')
.gsub(/corderdojo/i, '') # 時々ある Typo
.gsub(/コーダー道場/, '')
.gsub('', '')
.gsub(' ', '')
.gsub('@', '@')
.gsub('(', '(').gsub(')', ')') # Ex: Anjo(愛知県)
.gsub(/\(.*\)+/, '') # Delete '(...)'
.split('/').first # Ex: 堺/泉北和泉
.split('、').first # Ex: 東大阪、八尾
.strip
# Search dojo data by its KANJI name from DOJO_DB
dojo_data = DOJO_DB.find do |dojo|
binding.pry if dojo_name.nil?
dojo[:name].start_with? dojo_name.downcase
.gsub('ishigaki', '石垣')
.gsub('hitachinaka', 'ひたちなか')
.gsub('kodaira', 'こだいら')
.gsub('toke', '土気')
.gsub('anjo', '安城')
.gsub('yabuki', '矢吹')
.gsub('nagareyama', '流山')
.gsub('minami-kashiwa', '南柏')
.gsub('miyoshi', '三好') # NOTE: 'Miyoshi' can be 三好 or 三次. Only 三好 uses 'Miyoshi' for now.
.gsub('tsuruoka', '鶴岡')
.gsub('町田', 'まちだ')
.gsub('小平', 'こだいら')
.gsub('吉備岡山', '吉備')
.gsub('浦和@urawa minecraft club', '浦和@Urawa Minecraft Club')
end
dojo_data.nil? ?
not_found << dojo_name :
dojo_list << dojo_data
end
dojo_list.sort_by!{ |dojo| dojo[:order] }
result << dojo_list.map{ |dojo| " <li><a href='#{dojo[:url]}'>#{dojo[:name]}</a><small>(#{dojo[:prefecture]})</small></li>" }.join("\n")
result << "\n</ul>\n"
puts result
# 検索して見つからなかった Dojo 一覧があれば出力
if not_found.any?
puts '--- NOTE ---'
puts "道場数: #{dojo_list.count}"
not_found.each {|dojo_name| puts "Not found: #{dojo_name}" }
end