lita-today-ja 0.1.0
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 +7 -0
- data/.gitignore +17 -0
- data/Gemfile +3 -0
- data/README.md +19 -0
- data/Rakefile +6 -0
- data/lib/lita-today-ja.rb +12 -0
- data/lib/lita/handlers/today_ja.rb +197 -0
- data/lita-today-ja.gemspec +28 -0
- data/locales/en.yml +4 -0
- data/spec/lita/handlers/today_ja_spec.rb +4 -0
- data/spec/spec_helper.rb +6 -0
- data/templates/.gitkeep +0 -0
- metadata +184 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d8d3831d558ccb9df2b6817bfbc6799dedbeec65
|
4
|
+
data.tar.gz: e20cb5f919470e14db3a88f33924c3091db804b7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ae0fb5669eda5725a057a31f7ab282c8e033572c55c91eb77a506b7cd24891ba8a4aea60ab471177c662d1e5486d9858ba521c86fe7ee40a52aa02b51748ec9e
|
7
|
+
data.tar.gz: 1de6f310f82cab2044cc84f39c478670a3c318787bc19525ca6bb71cef37f9b21822b7a402b1d527ab1c4bd6734dcfc357b8e221a8821748fb12e7a01bd8632d
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# lita-today-ja
|
2
|
+
|
3
|
+
TODO: Add a description of the plugin.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add lita-today-ja to your Lita instance's Gemfile:
|
8
|
+
|
9
|
+
``` ruby
|
10
|
+
gem "lita-today-ja"
|
11
|
+
```
|
12
|
+
|
13
|
+
## Configuration
|
14
|
+
|
15
|
+
TODO: Describe any configuration attributes the plugin exposes.
|
16
|
+
|
17
|
+
## Usage
|
18
|
+
|
19
|
+
TODO: Describe the plugin's features and how to use them.
|
data/Rakefile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require "lita"
|
2
|
+
|
3
|
+
Lita.load_locales Dir[File.expand_path(
|
4
|
+
File.join("..", "..", "locales", "*.yml"), __FILE__
|
5
|
+
)]
|
6
|
+
|
7
|
+
require "lita/handlers/today_ja"
|
8
|
+
|
9
|
+
Lita::Handlers::TodayJa.template_root File.expand_path(
|
10
|
+
File.join("..", "..", "templates"),
|
11
|
+
__FILE__
|
12
|
+
)
|
@@ -0,0 +1,197 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'active_support'
|
3
|
+
require 'active_support/core_ext'
|
4
|
+
require 'nokogiri'
|
5
|
+
require 'html2markdown'
|
6
|
+
|
7
|
+
module Lita
|
8
|
+
module Handlers
|
9
|
+
class TodayJa < Handler
|
10
|
+
|
11
|
+
route(/^(.+)$/, command: true) do |response|
|
12
|
+
response.matches.flatten.first.gsub(/ /, ' ').split.each do |v|
|
13
|
+
date = parse_date(v.try(:strip))
|
14
|
+
unless date.nil?
|
15
|
+
response.reply(<<-STR)
|
16
|
+
#{date.strftime('%Y年%-m月%-d日')}(#{wday(date)})
|
17
|
+
```
|
18
|
+
(´-`).。oO(Wikipediaから読んできました)
|
19
|
+
|
20
|
+
#{wikipedia(date)}
|
21
|
+
```
|
22
|
+
```
|
23
|
+
(´-`).。oO(HINETから読んできました)
|
24
|
+
|
25
|
+
#{hinet(date)}
|
26
|
+
```
|
27
|
+
STR
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def hinet(date)
|
33
|
+
params = {
|
34
|
+
conf: 'today.pro',
|
35
|
+
d: date.strftime('%b %-d,%Y'),
|
36
|
+
}
|
37
|
+
charset = nil
|
38
|
+
response = open('http://today.hakodate.or.jp/apps/Today/Content?' << params.to_query) do |f|
|
39
|
+
charset = f.charset
|
40
|
+
f.read
|
41
|
+
end
|
42
|
+
xml = Nokogiri::HTML.parse(response, nil, charset)
|
43
|
+
xml.search('br').each { |br| br.replace("\n") }
|
44
|
+
xml.xpath('//html/body/ul').inner_text
|
45
|
+
end
|
46
|
+
|
47
|
+
def wikipedia(date)
|
48
|
+
params = { titles: date.strftime('%-m月%-d日') }
|
49
|
+
content = call_wikipedia_api(params)
|
50
|
+
rvsection = content.search('span.toctext').each_with_index do |node, i|
|
51
|
+
break i + 1 if node.inner_text == '記念日・年中行事'
|
52
|
+
end
|
53
|
+
return nil unless rvsection.is_a?(Integer) && rvsection > 0 # not found
|
54
|
+
|
55
|
+
doc = call_wikipedia_api(params.merge({ rvsection: rvsection }))
|
56
|
+
Nokogiri::HTML(doc.to_html).text
|
57
|
+
.gsub(/\[編集\]/, '')
|
58
|
+
.gsub(/^\n$^\n$/, "\n")
|
59
|
+
end
|
60
|
+
|
61
|
+
def call_wikipedia_api(params = {})
|
62
|
+
params.merge!({
|
63
|
+
format: 'xml',
|
64
|
+
action: 'query',
|
65
|
+
prop: 'revisions',
|
66
|
+
rvprop: 'content',
|
67
|
+
rvparse: nil,
|
68
|
+
})
|
69
|
+
charset = nil
|
70
|
+
response = open('https://ja.wikipedia.org/w/api.php?' << params.to_query) do |f|
|
71
|
+
charset = f.charset
|
72
|
+
f.read
|
73
|
+
end
|
74
|
+
|
75
|
+
xml = Nokogiri::HTML.parse(response, nil, charset)
|
76
|
+
content = Nokogiri::HTML.parse(CGI.unescapeHTML(xml.xpath('//api/query/pages/page/revisions/rev').to_html), nil, charset)
|
77
|
+
content = yield content if block_given?
|
78
|
+
content
|
79
|
+
end
|
80
|
+
|
81
|
+
def parse_date(str)
|
82
|
+
date = nil
|
83
|
+
begin
|
84
|
+
date = DateTime.parse(str)
|
85
|
+
rescue ArgumentError
|
86
|
+
[
|
87
|
+
'%Y年%m月%d日',
|
88
|
+
'%m月%d日',
|
89
|
+
].each do |format|
|
90
|
+
begin
|
91
|
+
break date = DateTime.strptime(str, format)
|
92
|
+
rescue ArgumentError
|
93
|
+
date = case str
|
94
|
+
when three_days_before_yesterday?; Date.today - 4
|
95
|
+
when two_days_before_yesterday?; Date.today - 3
|
96
|
+
when day_before_yesterday?; Date.today - 2
|
97
|
+
when yesterday?; Date.today - 1
|
98
|
+
when today?; Date.today
|
99
|
+
when tomorrow?; Date.today + 1
|
100
|
+
when day_after_tomorrow?; Date.today + 2
|
101
|
+
when two_days_after_tomorrow?; Date.today + 3
|
102
|
+
when three_days_after_tomorrow?; Date.today + 4
|
103
|
+
else
|
104
|
+
match = str.tr('0-9', '0-9').match(/^(\d+)日([前後])/)
|
105
|
+
unless match.nil?
|
106
|
+
if m[2] == '前'
|
107
|
+
Date.today + m[1]
|
108
|
+
else
|
109
|
+
Date.today - m[1]
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
date
|
117
|
+
end
|
118
|
+
|
119
|
+
|
120
|
+
def three_days_before_yesterday?
|
121
|
+
->v{ [ '四日前', 'よっかまえ', ].include? v }
|
122
|
+
end
|
123
|
+
|
124
|
+
def two_days_before_yesterday?
|
125
|
+
->v{ [
|
126
|
+
'一昨昨日', '一昨々日', 'いっさくさくじつ', 'さきおととい',
|
127
|
+
'三日前', 'みっかまえ',
|
128
|
+
'前々々日', 'ぜんぜんぜんじつ',
|
129
|
+
].include? v }
|
130
|
+
end
|
131
|
+
|
132
|
+
def day_before_yesterday?
|
133
|
+
->v{ [
|
134
|
+
'一昨日', 'いっさくじつ', 'おととい',
|
135
|
+
'二日前', 'ふつかまえ',
|
136
|
+
'前の前の日', 'まえのまえのひ',
|
137
|
+
'前々日', 'ぜんぜんじつ',
|
138
|
+
].include? v }
|
139
|
+
end
|
140
|
+
|
141
|
+
def yesterday?
|
142
|
+
->v{ [
|
143
|
+
'昨日', 'さくじつ', 'きのう',
|
144
|
+
'前日', 'ぜんじつ',
|
145
|
+
].include? v }
|
146
|
+
end
|
147
|
+
|
148
|
+
def today?
|
149
|
+
->v{ [
|
150
|
+
'本日', 'ほんじつ',
|
151
|
+
'今日', 'きょう',
|
152
|
+
'当日', 'とうじつ',
|
153
|
+
].include? v }
|
154
|
+
end
|
155
|
+
|
156
|
+
def tomorrow?
|
157
|
+
->v{ [
|
158
|
+
'明日', 'あした', 'みょうにち', 'あす',
|
159
|
+
'一日後', 'いちにちご',
|
160
|
+
'翌日', 'よくじつ',
|
161
|
+
'次の日', 'つぎのひ',
|
162
|
+
].include? v }
|
163
|
+
end
|
164
|
+
|
165
|
+
def day_after_tomorrow?
|
166
|
+
->v{ [
|
167
|
+
'明後日', 'みょうごにち', 'あさって',
|
168
|
+
'二日後', 'ふつかご',
|
169
|
+
'次の次の日', 'つぎのつぎのひ',
|
170
|
+
'翌々日', 'よくよくじつ',
|
171
|
+
].include? v }
|
172
|
+
end
|
173
|
+
|
174
|
+
def two_days_after_tomorrow?
|
175
|
+
->v{ [
|
176
|
+
'明明後日', '明々後日', 'みょうみょうごにち', 'しあさって',
|
177
|
+
'三日後', 'みっかご',
|
178
|
+
'翌々々日', 'よくよくよくじつ',
|
179
|
+
].include? v }
|
180
|
+
end
|
181
|
+
|
182
|
+
def three_days_after_tomorrow?
|
183
|
+
->v{ [
|
184
|
+
'弥の明後日', 'やのあさって',
|
185
|
+
'四日後', 'よっかご',
|
186
|
+
].include? v }
|
187
|
+
end
|
188
|
+
|
189
|
+
def wday(date)
|
190
|
+
wdays = %w(日 月 火 水 木 金 土)
|
191
|
+
wdays[date.wday]
|
192
|
+
end
|
193
|
+
|
194
|
+
Lita.register_handler(self)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
Gem::Specification.new do |spec|
|
2
|
+
spec.name = "lita-today-ja"
|
3
|
+
spec.version = "0.1.0"
|
4
|
+
spec.authors = ["violetyk"]
|
5
|
+
spec.email = ["yuhei.kagaya@gmail.com"]
|
6
|
+
spec.description = "What is today?"
|
7
|
+
spec.summary = "What is today?"
|
8
|
+
spec.homepage = "https://github.com/violetyk/lita-today-ja"
|
9
|
+
spec.license = "MIT"
|
10
|
+
spec.metadata = { "lita_plugin_type" => "handler" }
|
11
|
+
|
12
|
+
spec.files = `git ls-files`.split($/)
|
13
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
14
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
15
|
+
spec.require_paths = ["lib"]
|
16
|
+
|
17
|
+
spec.add_runtime_dependency "lita", ">= 4.7"
|
18
|
+
|
19
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
20
|
+
spec.add_development_dependency "pry-byebug"
|
21
|
+
spec.add_development_dependency "rake"
|
22
|
+
spec.add_development_dependency "rack-test"
|
23
|
+
spec.add_development_dependency "rspec", ">= 3.0.0"
|
24
|
+
|
25
|
+
spec.add_dependency "nokogiri"
|
26
|
+
spec.add_dependency "activesupport"
|
27
|
+
spec.add_dependency "html2markdown"
|
28
|
+
end
|
data/locales/en.yml
ADDED
data/spec/spec_helper.rb
ADDED
data/templates/.gitkeep
ADDED
File without changes
|
metadata
ADDED
@@ -0,0 +1,184 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lita-today-ja
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- violetyk
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-01-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: lita
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.7'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.7'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry-byebug
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rack-test
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 3.0.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 3.0.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: nokogiri
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: activesupport
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: html2markdown
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
description: What is today?
|
140
|
+
email:
|
141
|
+
- yuhei.kagaya@gmail.com
|
142
|
+
executables: []
|
143
|
+
extensions: []
|
144
|
+
extra_rdoc_files: []
|
145
|
+
files:
|
146
|
+
- ".gitignore"
|
147
|
+
- Gemfile
|
148
|
+
- README.md
|
149
|
+
- Rakefile
|
150
|
+
- lib/lita-today-ja.rb
|
151
|
+
- lib/lita/handlers/today_ja.rb
|
152
|
+
- lita-today-ja.gemspec
|
153
|
+
- locales/en.yml
|
154
|
+
- spec/lita/handlers/today_ja_spec.rb
|
155
|
+
- spec/spec_helper.rb
|
156
|
+
- templates/.gitkeep
|
157
|
+
homepage: https://github.com/violetyk/lita-today-ja
|
158
|
+
licenses:
|
159
|
+
- MIT
|
160
|
+
metadata:
|
161
|
+
lita_plugin_type: handler
|
162
|
+
post_install_message:
|
163
|
+
rdoc_options: []
|
164
|
+
require_paths:
|
165
|
+
- lib
|
166
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
167
|
+
requirements:
|
168
|
+
- - ">="
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
version: '0'
|
171
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
172
|
+
requirements:
|
173
|
+
- - ">="
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: '0'
|
176
|
+
requirements: []
|
177
|
+
rubyforge_project:
|
178
|
+
rubygems_version: 2.4.5.1
|
179
|
+
signing_key:
|
180
|
+
specification_version: 4
|
181
|
+
summary: What is today?
|
182
|
+
test_files:
|
183
|
+
- spec/lita/handlers/today_ja_spec.rb
|
184
|
+
- spec/spec_helper.rb
|