-
-
Notifications
You must be signed in to change notification settings - Fork 108
Expand file tree
/
Copy pathget_dojo_list.rb
More file actions
executable file
·122 lines (108 loc) · 4.86 KB
/
get_dojo_list.rb
File metadata and controls
executable file
·122 lines (108 loc) · 4.86 KB
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/env ruby
require 'net/http'
require 'json'
# 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>\n\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(/codedojo/i, '')
.gsub(/coderdojo/i, '')
.gsub(/corderdojo/i, '') # 時々ある Typo
.gsub(/coder dojo/i, '')
.gsub(/コーダー道場/, '')
.gsub(/コードー道場/, '')
.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 (including inactive dojos).
# MEMO: Same dojo name can exist like 南風原 (old: inacive, new: active).
found_dojo = DOJO_DB.find do |dojo|
dojo[:name] == dojo_name.downcase
.gsub('aizu', '会津')
.gsub('anjo', '安城')
.gsub('harumi', '晴海')
.gsub('hitachinaka', 'ひたちなか')
.gsub('ishigaki', '石垣')
.gsub('kodaira', 'こだいら')
.gsub('nagareyama', '流山')
.gsub('minami-kashiwa', '南柏')
.gsub('miyoshi', '三好') # NOTE: 'Miyoshi' can be 三好 or 三次. Only 三好 uses 'Miyoshi' for now.
.gsub('tempaku', '天白')
.gsub('toke', '土気')
.gsub('tokushima', '徳島')
.gsub('tsuruoka', '鶴岡')
.gsub('yabuki', '矢吹')
.gsub('まつど', '松戸')
.gsub('高岡', 'たかおか')
.gsub('町田', 'まちだ')
.gsub('小平', 'こだいら')
.gsub('八戸', '八戸@吹上')
.gsub('八尾@yotteco', '八尾')
.gsub('平野', '平野@YOZORA LABO')
.gsub('麹町', '麹町@アドバンスト・ソフト')
.gsub('吉備okayama', '吉備')
.gsub('吉備岡山', '吉備')
.gsub('名護 恩納@oist', '名護')
.gsub('浦和', '浦和@Urawa Minecraft Club')
.gsub('浦和@urawa minecraft club', '浦和@Urawa Minecraft Club')
.gsub('南風原', '南風原')
end
# Show all dojos, including in-active dojos, if SHOW_ALL mode
if ENV['SHOW_ALL'].eql?('true')
(found_dojo) ?
dojo_list << found_dojo :
not_found << dojo_name
else
(found_dojo && found_dojo[:is_active]) ?
dojo_list << found_dojo :
not_found << dojo_name
end
end
# coderdojo.jp の掲載順と同じ順序に揃える
dojo_list.sort_by!{ |dojo| dojo[:order] }
# 掲載方式 v1(リスト形式)e.g. https://news.coderdojo.jp/2022/07/12/donation-from-box-to-coderdojo/
#result << "\n\n<ul>\n"
#result << dojo_list.map{ |dojo| " <li><a href='#{dojo[:url]}'>#{dojo[:name]}</a><small>(#{dojo[:prefecture]})</small></li>" }.join("\n")
#result << "\n</ul>\n"
# 掲載方式 v2(表形式)e.g. https://news.coderdojo.jp/2024/12/25/box-japan-to-coderdojo/
result << "<table style='margin: auto; border-collapse: separate; border-spacing: 20px; table-layout: fixed; width: 98%;'>\n"
result << " <tbody>\n"
dojo_list.each_with_index do |dojo, i|p
result << " <tr>\n" if i%3 == 0
result << <<-DOJO_HTML
<td style='text-align: center; width: 33%;'>
<a href='#{dojo[:url]}'>
<img src='#{dojo[:logo].gsub('.webp', '.png')}' width='100px'/><br>
<span style='font-weight: bolder;'>#{dojo[:name]}<br><small> (#{dojo[:prefecture]})</small></span>
</a>
</td>
DOJO_HTML
result << " </tr>\n" if i%3 == 2 || i == dojo_list.size - 1
end
result << " </tbody>\n"
result << "</table>"
puts result
# デバッグ用コード -- 見つからなかった Dojo 等あれば出力
puts ''
puts '--- NOTE ---'
puts "道場数: #{dojo_list.count}"
not_found.each {|dojo_name| puts "Not-found or In-active: #{dojo_name}" }