imas-producer_schedule 0.1.5 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/Gemfile +2 -0
- data/imas-producer_schedule.gemspec +1 -1
- data/lib/imas/producer_schedule.rb +3 -1
- data/lib/imas/producer_schedule/client.rb +43 -46
- data/lib/imas/producer_schedule/version.rb +3 -1
- data/months.yml +62 -0
- metadata +7 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e4321804a7a892548fe77bda0321221ef7fa46b38ec7fcb4ecb13f982103eaa3
|
4
|
+
data.tar.gz: 6df38e65ae6808ef1cd45a714efe47ae7d136d811c57b8c86527500fdf09e8c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40359d98da528eb201867ce74cb60ae65beaae15bc92c585cd1a3d198c1f3f3b377d7d0bb6c4766fd9e38d607e63767e41e9d69c3f08bbf4dadee854b48fe950
|
7
|
+
data.tar.gz: 3a21b79e2f79755cf32a62ed820a306e9c729dd47a3763bb05662a1f0cc1f5c7ac2d216dcd32668161a65d9c8e8d2048303701801376d7a9065817ce617baf2b
|
data/Gemfile
CHANGED
@@ -29,6 +29,6 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_development_dependency "pry"
|
30
30
|
spec.add_development_dependency "rspec"
|
31
31
|
spec.add_dependency 'icalendar'
|
32
|
-
spec.add_dependency 'nokogiri'
|
32
|
+
spec.add_dependency 'nokogiri'
|
33
33
|
spec.add_dependency 'activesupport'
|
34
34
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'open-uri'
|
2
4
|
require 'icalendar'
|
3
5
|
require 'nokogiri'
|
@@ -26,12 +28,13 @@ module Imas::ProducerSchedule
|
|
26
28
|
/^TVアニメ「アイドルマスター シンデレラガールズ」2nd SEASON$/,
|
27
29
|
/^シンデレラガールズ劇場 第.{1,2}話放送$/,
|
28
30
|
/^アニメ アイドルマスター SideM 第.{1,2}話放送$/,
|
29
|
-
|
30
|
-
|
31
|
+
/^アイドルマスター シャイニーカラーズ はばたきラジオステーション$/,
|
32
|
+
/^アニメ アイドルマスター SideM 理由あってMini! 第.{1,2}話放送$/,
|
33
|
+
/^THE IDOLM@STER MUSIC ON THE RADIO$/
|
34
|
+
].freeze
|
31
35
|
HEADER_OFFSET = 3
|
32
36
|
TZID = 'Asia/Tokyo'
|
33
|
-
DEFAULT_MONTH_PATH = File.join(File.expand_path('
|
34
|
-
|
37
|
+
DEFAULT_MONTH_PATH = File.join(File.expand_path('../../..', __dir__), 'months.yml')
|
35
38
|
|
36
39
|
def initialize(month_path = DEFAULT_MONTH_PATH)
|
37
40
|
@months = ::YAML.load_file(month_path)
|
@@ -40,30 +43,24 @@ module Imas::ProducerSchedule
|
|
40
43
|
def output_cal(output_dir = '.')
|
41
44
|
# カレンダー情報定義
|
42
45
|
cals = [
|
43
|
-
{ name:
|
44
|
-
file:
|
45
|
-
test:
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
test: lambda{|schedule| schedule[:genre].include? "イベント"}
|
62
|
-
},
|
63
|
-
{ name:"ニコ生" ,
|
64
|
-
file:"nico_live.ics",
|
65
|
-
test: lambda{|schedule| schedule[:genre].include? "ニコ生"}
|
66
|
-
},
|
46
|
+
{ name: 'プロデューサー予定表',
|
47
|
+
file: 'schedule.ics',
|
48
|
+
test: ->(_schedule) { true } },
|
49
|
+
{ name: '定期配信番組除外版',
|
50
|
+
file: 'schedule_irregular.ics',
|
51
|
+
test: ->(schedule) { REGULAR_ARTICLE.none? { |re| schedule[:article] =~ re } } },
|
52
|
+
{ name: '定期配信番組のみ',
|
53
|
+
file: 'schedule_regular.ics',
|
54
|
+
test: ->(schedule) { REGULAR_ARTICLE.any? { |re| schedule[:article] =~ re } } },
|
55
|
+
{ name: '発売日',
|
56
|
+
file: 'release_day.ics',
|
57
|
+
test: ->(schedule) { schedule[:time] == '発売日' } },
|
58
|
+
{ name: 'イベント',
|
59
|
+
file: 'event.ics',
|
60
|
+
test: ->(schedule) { schedule[:genre].include? 'イベント' } },
|
61
|
+
{ name: 'ニコ生',
|
62
|
+
file: 'nico_live.ics',
|
63
|
+
test: ->(schedule) { schedule[:genre].include? 'ニコ生' } }
|
67
64
|
]
|
68
65
|
|
69
66
|
# タイトル・タイムゾーン設定
|
@@ -93,7 +90,7 @@ module Imas::ProducerSchedule
|
|
93
90
|
|
94
91
|
# 日付時刻
|
95
92
|
if s[:from].nil?
|
96
|
-
e.dtstart = Icalendar::Values::Date.new(
|
93
|
+
e.dtstart = Icalendar::Values::Date.new(format('%04d%02d%02d', year, month, day), 'tzid' => TZID)
|
97
94
|
else
|
98
95
|
st_tm = to_datetime(year, month, day, *split_time(s[:from]))
|
99
96
|
ed_tm = st_tm
|
@@ -120,7 +117,6 @@ module Imas::ProducerSchedule
|
|
120
117
|
cals.each do |c|
|
121
118
|
c[:cal].add_event e if c[:test].call(s)
|
122
119
|
end
|
123
|
-
|
124
120
|
end
|
125
121
|
end
|
126
122
|
|
@@ -129,39 +125,40 @@ module Imas::ProducerSchedule
|
|
129
125
|
c[:cal].publish
|
130
126
|
open(File.join(output_dir, c[:file]), 'w') { |f| f.write(c[:cal].to_ical) }
|
131
127
|
end
|
132
|
-
|
133
128
|
end
|
134
|
-
|
129
|
+
|
135
130
|
private
|
136
131
|
|
137
|
-
def to_schedule
|
132
|
+
def to_schedule(tr)
|
138
133
|
# ジャンル
|
139
134
|
genre = tr.at('.//td[@class="genre2"]').try(:text)
|
140
135
|
# 内容・リンク
|
141
136
|
article = tr.at('.//td[@class="article2"]').try(:text)
|
142
|
-
link
|
137
|
+
link = tr.at('.//td[@class="article2"]/a').try(:[], 'href')
|
143
138
|
# 日付
|
144
139
|
day = tr.at('.//td[@class="day2"]/img')
|
145
|
-
day
|
140
|
+
day ||= tr.at('.//td[@class="day"]/img')
|
146
141
|
day = day['src'][-6..-5].to_i if day
|
147
142
|
# 時刻
|
148
|
-
time =
|
143
|
+
time = tr.at('.//td[@class="time2"]').try(:text)
|
149
144
|
# From-To
|
150
145
|
from, to = time.try(:tr, '1234567890:', '1234567890:').try(:scan, /\d\d:\d\d/)
|
151
146
|
# 出演者
|
152
|
-
performance =
|
147
|
+
performance = tr.at('.//td[@class="performance2"]/img').try(:[], 'alt')
|
153
148
|
# 詳細
|
154
149
|
description = "時間:#{time}\n"
|
155
|
-
description
|
156
|
-
description
|
157
|
-
description
|
150
|
+
description += "出演:#{performance}\n"
|
151
|
+
description += "記事:#{article}\n"
|
152
|
+
description += "リンク:#{link}\n"
|
158
153
|
|
159
154
|
# ハッシュ生成
|
160
|
-
|
155
|
+
unless article.blank?
|
156
|
+
{ day: day, time: time, genre: genre.try(:strip), article: article, link: link, from: from, to: to, description: description }
|
157
|
+
end
|
161
158
|
end
|
162
159
|
|
163
|
-
def parse_calendar
|
164
|
-
html = open(url
|
160
|
+
def parse_calendar(url)
|
161
|
+
html = URI.open(url, &:read)
|
165
162
|
charset = 'utf-8'
|
166
163
|
|
167
164
|
# htmlをパースしてオブジェクトを生成
|
@@ -171,7 +168,7 @@ module Imas::ProducerSchedule
|
|
171
168
|
end.compact
|
172
169
|
end
|
173
170
|
|
174
|
-
def to_datetime
|
171
|
+
def to_datetime(year, month, day, hour, min)
|
175
172
|
if hour >= 24
|
176
173
|
hour -= 24
|
177
174
|
exceed = true
|
@@ -181,11 +178,11 @@ module Imas::ProducerSchedule
|
|
181
178
|
Icalendar::Values::DateTime.new datetime, 'tzid' => TZID
|
182
179
|
end
|
183
180
|
|
184
|
-
def split_time
|
181
|
+
def split_time(hm_string)
|
185
182
|
hm_string.split(':').map(&:to_i)
|
186
183
|
end
|
187
184
|
|
188
|
-
def set_timezone
|
185
|
+
def set_timezone(cal)
|
189
186
|
cal.timezone do |t|
|
190
187
|
t.tzid = TZID
|
191
188
|
t.standard do |s|
|
data/months.yml
CHANGED
@@ -27,3 +27,65 @@
|
|
27
27
|
- [2016, '08', 8, 'c']
|
28
28
|
- [2016, '09', 9, 'c']
|
29
29
|
- [2016, '10', 10, 'c']
|
30
|
+
- [2016, '11', 10, 'c']
|
31
|
+
- [2016, '12', 10, 'c']
|
32
|
+
- [2017, '1', 10, 'c']
|
33
|
+
- [2017, '2', 10, 'c']
|
34
|
+
- [2017, '3', 10, 'c']
|
35
|
+
- [2017, '4', 10, 'c']
|
36
|
+
- [2017, '5', 10, 'c']
|
37
|
+
- [2017, '6', 10, 'c']
|
38
|
+
- [2017, '7', 10, 'c']
|
39
|
+
- [2017, '8', 10, 'c']
|
40
|
+
- [2017, '9', 10, 'c']
|
41
|
+
- [2017, '10', 10, 'c']
|
42
|
+
- [2017, '11', 10, 'c']
|
43
|
+
- [2017, '12', 10, 'c']
|
44
|
+
- [2018, '1', 10, 'c']
|
45
|
+
- [2018, '2', 10, 'c']
|
46
|
+
- [2018, '3', 10, 'c']
|
47
|
+
- [2018, '4', 10, 'c']
|
48
|
+
- [2018, '5', 10, 'c']
|
49
|
+
- [2018, '6', 10, 'c']
|
50
|
+
- [2018, '7', 10, 'c']
|
51
|
+
- [2018, '8', 10, 'c']
|
52
|
+
- [2018, '9', 10, 'c']
|
53
|
+
- [2018, '10', 10, 'c']
|
54
|
+
- [2018, '11', 10, 'c']
|
55
|
+
- [2018, '12', 10, 'c']
|
56
|
+
- [2019, '1', 10, 'c']
|
57
|
+
- [2019, '2', 10, 'c']
|
58
|
+
- [2019, '3', 10, 'c']
|
59
|
+
- [2019, '4', 10, 'c']
|
60
|
+
- [2019, '5', 10, 'c']
|
61
|
+
- [2019, '6', 10, 'c']
|
62
|
+
- [2019, '7', 10, 'c']
|
63
|
+
- [2019, '8', 10, 'c']
|
64
|
+
- [2019, '9', 10, 'c']
|
65
|
+
- [2019, '10', 10, 'c']
|
66
|
+
- [2019, '11', 10, 'c']
|
67
|
+
- [2019, '12', 10, 'c']
|
68
|
+
- [2020, '1', 10, 'c']
|
69
|
+
- [2020, '2', 10, 'c']
|
70
|
+
- [2020, '3', 10, 'c']
|
71
|
+
- [2020, '4', 10, 'c']
|
72
|
+
- [2020, '5', 10, 'c']
|
73
|
+
- [2020, '6', 10, 'c']
|
74
|
+
- [2020, '7', 10, 'c']
|
75
|
+
- [2020, '8', 10, 'c']
|
76
|
+
- [2020, '9', 10, 'c']
|
77
|
+
- [2020, '10', 10, 'c']
|
78
|
+
- [2020, '11', 10, 'c']
|
79
|
+
- [2020, '12', 10, 'c']
|
80
|
+
- [2021, '1', 10, 'c']
|
81
|
+
- [2021, '2', 10, 'c']
|
82
|
+
- [2021, '3', 10, 'c']
|
83
|
+
- [2021, '4', 10, 'c']
|
84
|
+
- [2021, '5', 10, 'c']
|
85
|
+
- [2021, '6', 10, 'c']
|
86
|
+
- [2021, '7', 10, 'c']
|
87
|
+
- [2021, '8', 10, 'c']
|
88
|
+
- [2021, '9', 10, 'c']
|
89
|
+
- [2021, '10', 10, 'c']
|
90
|
+
- [2021, '11', 10, 'c']
|
91
|
+
- [2021, '12', 10, 'c']
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: imas-producer_schedule
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- gomao9
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-12-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -84,16 +84,16 @@ dependencies:
|
|
84
84
|
name: nokogiri
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: '0'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: activesupport
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -149,8 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
149
|
- !ruby/object:Gem::Version
|
150
150
|
version: '0'
|
151
151
|
requirements: []
|
152
|
-
|
153
|
-
rubygems_version: 2.6.12
|
152
|
+
rubygems_version: 3.0.3
|
154
153
|
signing_key:
|
155
154
|
specification_version: 4
|
156
155
|
summary: calendar generator for im@s producers
|