lita-today-ja 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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