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 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
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
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,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -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
@@ -0,0 +1,4 @@
1
+ en:
2
+ lita:
3
+ handlers:
4
+ today_ja:
@@ -0,0 +1,4 @@
1
+ require "spec_helper"
2
+
3
+ describe Lita::Handlers::TodayJa, lita_handler: true do
4
+ end
@@ -0,0 +1,6 @@
1
+ require "lita-today-ja"
2
+ require "lita/rspec"
3
+
4
+ # A compatibility mode is provided for older plugins upgrading from Lita 3. Since this plugin
5
+ # was generated with Lita 4, the compatibility mode should be left disabled.
6
+ Lita.version_3_compatibility_mode = false
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