-
Notifications
You must be signed in to change notification settings - Fork 0
/
getchuya
executable file
·186 lines (164 loc) · 7.7 KB
/
getchuya
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#!/usr/bin/env ruby
# frozen_string_literal: true
# げっちゅ屋コマンド
# げっちゅ屋の発売リストページから発売情報とゲーム情報をスクレイピング
# してゲーム情報を確認できるコマンドラインツールです
# -------------------------------------------------------------------------
# -h, --help Show this help
# --robots Display contents of robots.txt
# -y, --year_month [YEAR_MONTH] Set Target Year And Month
# -v, --voice_actor [VOICE_ACTOR] Narrow down by voice actor name
# -t, --title [TITLE] Filter by title
# -b, --brand_name [BRAND_NAME] Narrow down by brand_name
# -o, --open [OPEN] Open game page in browser
# -c, --csv [CSV] Create a csv file
# -j, --json [JSON] Create a json file
# -s, --spreadsheet [SPREADSHEET] Write to spreadsheet from CSV
# --clear_cache [CLEAR_CACHE] Clear the cache
# --simple [SIMPLE] Display results in a simplified way
# -------------------------------------------------------------------------
require './eroge_release/command_line/command_line_arg'
require './eroge_release/games/games'
require './eroge_release/spreadsheet/spreadsheet'
require './eroge_release/spreadsheet/spreadsheet_writer'
require 'inifile'
# GoogleスプレッドシートIDの読み込み
@ini_file = IniFile.load('./eroge_release/spreadsheet/spreadsheet.conf')
SPREADSHEET_ID = @ini_file['GoogleSpreadSheet']['id']
# Gamesクラスのインスタンスを取得する
# Gamesクラスのインスタンスをキャッシュクリア区分、年月の引数に応じて取得する
def get_games_instance(has_clear_cache, year_month)
return ErogeRelease::Games.new(has_clear_cache) if year_month.empty?
ErogeRelease::Games.new(has_clear_cache, year_month)
end
# ゲーム情報を絞り込む
# タイトル、ブランド名、声優名で絞り込む
def filtering_games(games, title, brand_name, voice_actor)
games.set_search_condition('title', title)
games.set_search_condition('brand_name', brand_name)
games.set_search_condition('voice_actor', voice_actor)
games
end
# スプレッドシートへCSVファイルから書き込む
# 更新対象のワークシート(年月のタイトル)を削除し、新しくワークシートへ
# CSVファイルから書き込む
def write_spreadsheet_by_csv(year_month, csv_file)
spreadsheet = ErogeRelease::SpreadsheetWriter.new(SPREADSHEET_ID)
# 更新対象のワークシートを削除しCSVファイルから書き込みを行なう
spreadsheet.delete_worksheet_by_title(year_month)
spreadsheet.get_worksheet_by_title_not_exist_create(year_month)
spreadsheet.write_by_csv(csv_file)
# 書き込みを行ったスプレッドシートを返す
spreadsheet
end
# シェルコマンドの「open」を使用して対象のものを開く
# URLを指定された時は規定のブラウザでそのURLを開く
def system_open(target)
system("open #{target}")
end
# URLを開く
# 絞り込んだゲームを規定のブラウザで表示する
def open_urls(game_list)
# 画面にゲーム数を表示し、ユーザーにそのまま処理を続行するか対話する
puts
puts "「#{game_list.count}」件のゲーム情報をブラウザで表示します"
puts '処理を終了する時は「Ctrl + C」で終了して下さい'
# Ctrl+Cを押下後用の処理
# ※例外を補足し画面に何も表示させないようにする
begin
system('read -p "続行する場合はEnterを押して下さい: "')
rescue Interrupt
puts
exit
end
# ゲームの紹介ページを開く
game_list.each do |game|
system_open(game[:introduction_page])
end
end
# ゲーム情報を表示する
# タイトル、発売日、ブランド名、価格、声優情報を画面に表示する
def display_games(game_list)
# データが存在しなかったら処理を終了
if game_list.count.zero?
puts '表示データがありませんでした'
exit
end
puts '-----------------------------------------------------------------------------'
game_list.each do |game|
puts game[:title]
puts game[:release_date]
puts game[:brand_name]
puts game[:price]
puts game[:voice_actor].empty? ? '声優情報なし' : game[:voice_actor].join('、')
puts '-----------------------------------------------------------------------------'
end
end
# ゲーム情報を簡略表示する
# 発売日、タイトルを画面に表示する
def simple_display_games(game_list)
# データが存在しなかったら処理を終了
if game_list.count.zero?
puts '表示データがありませんでした'
exit
end
game_list.each do |game|
puts "#{game[:release_date]} #{game[:title]}"
end
end
# ---------------------------------
# コマンドライン引数を取得する
# ---------------------------------
command_line_args = ErogeRelease::CommandLineArg.new
year_month = command_line_args.get(:year_month) # 年月
title = command_line_args.get(:title) # 絞り込み用のタイトル
brand_name = command_line_args.get(:brand_name) # 絞り込み用のブランド名
voice_actor = command_line_args.get(:voice_actor) # 絞り込み用の声優名
has_clear_cache = command_line_args.get(:clear_cache) # キャッシュクリア区分(true:キャッシュをクリアする、false:キャッシュをクリアしない)
is_simple_display = command_line_args.get(:simple) # ゲーム情報を簡略表示する
is_open = command_line_args.get(:open) # ゲーム紹介ページを開くかどうかの区分
should_create_csv = command_line_args.get(:csv) # CSVをファイル作成する
should_create_json = command_line_args.get(:json) # jsonファイルを作成する
should_writing_spreadsheet = command_line_args.get(:spreadsheet) # スプレッドシートへ書き込みをする
is_open_spreadsheet = command_line_args.get(:open_spreadsheet) # スプレッドシートページを開くかどうかの区分
# ---------------------------------
# ゲーム情報の取得
# ---------------------------------
begin
games = get_games_instance(has_clear_cache, year_month)
rescue StandardError => e
# 例外メッセージとバックトレースを表示して処理を終了する
puts "#{e.message}(#{e.class})"
puts e.backtrace
exit
end
getchuya_games = filtering_games(games, title, brand_name, voice_actor)
# ---------------------------------
# ファイルの作成
# ---------------------------------
getchuya_games.create_csv if should_create_csv
getchuya_games.create_json if should_create_json
# ---------------------------------
# スプレッドシートへの書き込み
# ---------------------------------
if should_writing_spreadsheet
# スプレッドシートへの書き込み処理
target_year_month = "#{getchuya_games.year}#{getchuya_games.month}"
spreadsheet = write_spreadsheet_by_csv(target_year_month, getchuya_games.csv_file_path)
# 書き込みを行ったワークシートをブラウザで開く
system_open(spreadsheet.worksheet.human_url) if is_open_spreadsheet
end
# ---------------------------------
# 画面表示
# ---------------------------------
if is_simple_display
# 簡略表示処理
simple_display_games(getchuya_games.game_list)
else
# 通常表示処理
display_games(getchuya_games.game_list)
end
# ---------------------------------
# ゲーム情報をブラウザで表示
# ---------------------------------
open_urls(getchuya_games.game_list) if is_open