asakusa-rss-monitor 0.0.2
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.
- data/.gitignore +18 -0
- data/Gemfile +4 -0
- data/README.md +4 -0
- data/Rakefile +1 -0
- data/asakusa-rss-monitor.gemspec +20 -0
- data/lib/asakusa-rss-monitor.rb +4 -0
- data/lib/asakusa-rss-monitor/as-info.rb +13 -0
- data/lib/asakusa-rss-monitor/date-checker.rb +25 -0
- data/lib/asakusa-rss-monitor/date-save.rb +22 -0
- data/lib/asakusa-rss-monitor/post-bot.rb +31 -0
- data/lib/asakusa-rss-monitor/rss-getter.rb +18 -0
- data/lib/asakusa-rss-monitor/rss-monitor.rb +42 -0
- data/lib/asakusa-rss-monitor/version.rb +6 -0
- data/sample/qa-checker.txt +1 -0
- data/sample/qa-monitor.rb +26 -0
- metadata +63 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "asakusa-rss-monitor/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "asakusa-rss-monitor"
|
7
|
+
s.version = AsakusaRssMonitor::VERSION
|
8
|
+
s.authors = ["3100"]
|
9
|
+
s.email = ["sugar16g@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/3100/asakusa-rss-monitor"
|
11
|
+
s.summary = %q{Posting rss updates to a room in your AsakusaSatellite.}
|
12
|
+
s.description = %q{Posting rss updates to a room in your AsakusaSatellite. To monitor rss with this script, you need to use a cron job.}
|
13
|
+
|
14
|
+
s.rubyforge_project = "asakusa-rss-monitor"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module AsakusaRssMonitor
|
4
|
+
class ASInfo
|
5
|
+
attr_accessor :api_key, :entry_point, :room_id
|
6
|
+
def initialize(config)
|
7
|
+
@api_key = config[:api_key]
|
8
|
+
@entry_point = config[:entry_point]
|
9
|
+
@room_id = config[:room_id]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'asakusa-rss-monitor/date-save'
|
4
|
+
|
5
|
+
module AsakusaRssMonitor
|
6
|
+
class DateChecker
|
7
|
+
def initialize(config)
|
8
|
+
@save = DateSave.new(:file_name => config[:file_name])
|
9
|
+
end
|
10
|
+
|
11
|
+
def latest
|
12
|
+
@latest ||= @save.read
|
13
|
+
end
|
14
|
+
|
15
|
+
def check(time)
|
16
|
+
time == @latest
|
17
|
+
end
|
18
|
+
|
19
|
+
def update(time)
|
20
|
+
@save.write time
|
21
|
+
@latest = time
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#/usr/bin/ruby
|
3
|
+
|
4
|
+
module AsakusaRssMonitor
|
5
|
+
class DateSave
|
6
|
+
require 'time'
|
7
|
+
|
8
|
+
def initialize(config)
|
9
|
+
@file_name = config[:file_name]
|
10
|
+
end
|
11
|
+
|
12
|
+
def read
|
13
|
+
return Time.new(1999, 1, 1, 0, 0, 0) unless File.exist?(@file_name) # 十分古い日付
|
14
|
+
text = File.read(@file_name, :encoding => Encoding::UTF_8)
|
15
|
+
Time.parse text
|
16
|
+
end
|
17
|
+
|
18
|
+
def write(time)
|
19
|
+
File.write(@file_name, time.to_s)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module AsakusaRssMonitor
|
4
|
+
class PostBot
|
5
|
+
require 'net/http'
|
6
|
+
|
7
|
+
def initialize(config)
|
8
|
+
@api_key = config[:as_info][:api_key]
|
9
|
+
@entry_point = config[:as_info][:entry_point]
|
10
|
+
@room_id = config[:as_info][:room_id]
|
11
|
+
end
|
12
|
+
|
13
|
+
def post(message)
|
14
|
+
uri = URI(@entry_point)
|
15
|
+
Net::HTTP.version_1_2
|
16
|
+
Net::HTTP.start(uri.host, uri.port) do |http|
|
17
|
+
p http.post(uri.path + "/message.json",
|
18
|
+
"room_id=#{@room_id}&api_key=#{@api_key}&message=#{message}")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def get_rooms
|
23
|
+
uri = URI(@entry_point)
|
24
|
+
Net::HTTP.version_1_2
|
25
|
+
Net::HTTP.start(uri.host, uri.port) do |http|
|
26
|
+
response = http.get(uri.path + "/room/list.json")
|
27
|
+
p response.body
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module AsakusaRssMonitor
|
4
|
+
class RssGetter
|
5
|
+
require 'rss'
|
6
|
+
|
7
|
+
def initialize(config)
|
8
|
+
@url = config[:url]
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_new_articles(time)
|
12
|
+
results = RSS::Parser.parse(@url)
|
13
|
+
results.items.select{|item|
|
14
|
+
item.date > time
|
15
|
+
}.reverse
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'asakusa-rss-monitor/date-checker'
|
4
|
+
require 'asakusa-rss-monitor/date-save'
|
5
|
+
require 'asakusa-rss-monitor/post-bot'
|
6
|
+
require 'asakusa-rss-monitor/rss-getter'
|
7
|
+
|
8
|
+
module AsakusaRssMonitor
|
9
|
+
|
10
|
+
class RssMonitor
|
11
|
+
def initialize(config)
|
12
|
+
@check_file = config[:check_file]
|
13
|
+
@rss_url = config[:rss_url]
|
14
|
+
@as_info = config[:as_info]
|
15
|
+
end
|
16
|
+
|
17
|
+
def call
|
18
|
+
checker = DateChecker.new(:file_name => @check_file)
|
19
|
+
latest_time= checker.latest
|
20
|
+
|
21
|
+
rss = RssGetter.new(:url => @rss_url)
|
22
|
+
new_articles = rss.get_new_articles latest_time
|
23
|
+
return unless new_articles.any?
|
24
|
+
|
25
|
+
begin
|
26
|
+
bot = PostBot.new(:as_info => @as_info)
|
27
|
+
new_articles.each do |entry|
|
28
|
+
bot.post perform(entry)
|
29
|
+
end
|
30
|
+
rescue => exception
|
31
|
+
p exception
|
32
|
+
end
|
33
|
+
|
34
|
+
# rss.get_new_entries returns articles by ascending order
|
35
|
+
checker.update new_articles.last.date
|
36
|
+
end
|
37
|
+
|
38
|
+
def perform(rss_entry)
|
39
|
+
"New Article - #{rss_entry.date}\n#{rss_entry.title}\n #{rss_entry.link} "
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Fri, 18 Jan 2013 15:24:56 +0900
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#/usr/bin/ruby
|
3
|
+
|
4
|
+
require 'asakusa-rss-monitor'
|
5
|
+
|
6
|
+
class QaMonitor < AsakusaRssMonitor::RssMonitor
|
7
|
+
def initialize(config)
|
8
|
+
super(config)
|
9
|
+
end
|
10
|
+
|
11
|
+
def perform(rss_entry)
|
12
|
+
"新着の質問がありました。 - #{rss_entry.date}\n#{rss_entry.title}\n #{rss_entry.link} "
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
monitor = QaMonitor.new({
|
17
|
+
:check_file => 'qa-checker.txt',
|
18
|
+
:rss_url => 'http://localhost/?type=rss',
|
19
|
+
:as_info => AsakusaRssMonitor::ASInfo.new({
|
20
|
+
:api_key => ENV['AS_API'],
|
21
|
+
:entry_point => ENV['ENTRY_POINT'],
|
22
|
+
:room_id => '<target-room-id>'
|
23
|
+
})
|
24
|
+
})
|
25
|
+
monitor.call
|
26
|
+
|
metadata
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: asakusa-rss-monitor
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- '3100'
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-01-19 00:00:00.000000000 +09:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
description: Posting rss updates to a room in your AsakusaSatellite. To monitor rss
|
16
|
+
with this script, you need to use a cron job.
|
17
|
+
email:
|
18
|
+
- sugar16g@gmail.com
|
19
|
+
executables: []
|
20
|
+
extensions: []
|
21
|
+
extra_rdoc_files: []
|
22
|
+
files:
|
23
|
+
- .gitignore
|
24
|
+
- Gemfile
|
25
|
+
- README.md
|
26
|
+
- Rakefile
|
27
|
+
- asakusa-rss-monitor.gemspec
|
28
|
+
- lib/asakusa-rss-monitor.rb
|
29
|
+
- lib/asakusa-rss-monitor/as-info.rb
|
30
|
+
- lib/asakusa-rss-monitor/date-checker.rb
|
31
|
+
- lib/asakusa-rss-monitor/date-save.rb
|
32
|
+
- lib/asakusa-rss-monitor/post-bot.rb
|
33
|
+
- lib/asakusa-rss-monitor/rss-getter.rb
|
34
|
+
- lib/asakusa-rss-monitor/rss-monitor.rb
|
35
|
+
- lib/asakusa-rss-monitor/version.rb
|
36
|
+
- sample/qa-checker.txt
|
37
|
+
- sample/qa-monitor.rb
|
38
|
+
has_rdoc: true
|
39
|
+
homepage: https://github.com/3100/asakusa-rss-monitor
|
40
|
+
licenses: []
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options: []
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
none: false
|
47
|
+
requirements:
|
48
|
+
- - ! '>='
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '0'
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ! '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
requirements: []
|
58
|
+
rubyforge_project: asakusa-rss-monitor
|
59
|
+
rubygems_version: 1.6.2
|
60
|
+
signing_key:
|
61
|
+
specification_version: 3
|
62
|
+
summary: Posting rss updates to a room in your AsakusaSatellite.
|
63
|
+
test_files: []
|