rsscache 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
- checksums.yaml.gz.sig +3 -0
- data/lib/rsscache.rb +114 -0
- data.tar.gz.sig +2 -0
- metadata +108 -0
- metadata.gz.sig +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e7cfe15e402c2718309c7b4e58fb3090482480a2
|
4
|
+
data.tar.gz: 4ddb22d9f20f1045f70037fae6ff8b56a5a0d660
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d359f70f0c63a2a1e424e6db93bd3b82e2e095329771c6afee348b091f6ad39b9b2bf2f0e53e59be1a47ad3e63733ffb840bf09364c9f533a1691dd2882b8a04
|
7
|
+
data.tar.gz: 2e3de31653a64184d6bbf6fe74d1a991c25013cd72fc4505734811be754d18cef756394b80abfd74ff1ff1aaaf9d4f03328670f5fcbb22c437cee1c012252586
|
checksums.yaml.gz.sig
ADDED
data/lib/rsscache.rb
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# file: rsscache.rb
|
4
|
+
|
5
|
+
require 'dynarex'
|
6
|
+
require 'open-uri'
|
7
|
+
require 'simple-rss'
|
8
|
+
require 'fileutils'
|
9
|
+
|
10
|
+
|
11
|
+
class RSScache
|
12
|
+
|
13
|
+
def initialize(rsslist, feedsfilepath=Dir.pwd)
|
14
|
+
|
15
|
+
@dx = open_dynarex(rsslist)
|
16
|
+
@rsslist, @feedsfilepath = rsslist, feedsfilepath
|
17
|
+
FileUtils.mkdir_p feedsfilepath
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
def refresh
|
22
|
+
|
23
|
+
@dx.all.each do |feed|
|
24
|
+
|
25
|
+
if feed.next_refresh.empty? or \
|
26
|
+
Time.now >= Time.parse(feed.next_refresh) then
|
27
|
+
|
28
|
+
any_new_items = updates? feed
|
29
|
+
|
30
|
+
feed.refresh_rate = if feed.refresh_rate.empty? then
|
31
|
+
|
32
|
+
10
|
33
|
+
|
34
|
+
else
|
35
|
+
|
36
|
+
if Time.now > Time.parse(feed.next_refresh) + \
|
37
|
+
feed.refresh_rate.to_i and not any_new_items then
|
38
|
+
feed.refresh_rate.to_i + 10
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
feed.next_refresh = Time.now + feed.refresh_rate.to_i * 60
|
45
|
+
|
46
|
+
|
47
|
+
else
|
48
|
+
|
49
|
+
feed.refresh_rate = feed.refresh_rate.to_i - 10 if feed.refresh_rate.to_i > 10
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
save_dynarex()
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
alias update refresh
|
59
|
+
|
60
|
+
def open_dynarex(x)
|
61
|
+
|
62
|
+
if x.lines.length == 1 and File.exists?(x) and \
|
63
|
+
File.extname(x) == '.txt'then
|
64
|
+
Dynarex.new.import x
|
65
|
+
else
|
66
|
+
Dynarex.new x
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def save_dynarex()
|
71
|
+
|
72
|
+
if @rsslist.lines.length == 1 and File.exists?(@rsslist)
|
73
|
+
|
74
|
+
if File.extname(@rsslist) == '.txt'then
|
75
|
+
|
76
|
+
File.write @rsslist, @dx.to_s
|
77
|
+
|
78
|
+
else
|
79
|
+
|
80
|
+
@dx.save
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# checks for any updates and saves the latest RSS file to
|
88
|
+
# the cache if there is
|
89
|
+
#
|
90
|
+
def updates?(feed)
|
91
|
+
|
92
|
+
# fetch the feeds from the web
|
93
|
+
rss = SimpleRSS.parse(open(feed.url))
|
94
|
+
|
95
|
+
rssfile = File.join(@feedsfilepath, feed.url[6..-1].gsub(/\W+/,'').\
|
96
|
+
reverse.slice(0,40).reverse).downcase + '.xml'
|
97
|
+
|
98
|
+
if File.exists? rssfile then
|
99
|
+
|
100
|
+
rss_cache = SimpleRSS.parse File.read(rssfile)
|
101
|
+
new_rss_items = rss.items - rss_cache.items
|
102
|
+
(File.write rssfile, rss.source; return true) if new_rss_items.any?
|
103
|
+
|
104
|
+
else
|
105
|
+
|
106
|
+
File.write rssfile, rss.source
|
107
|
+
feed.title = rss.title if feed.title.empty?
|
108
|
+
return true
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
return false
|
113
|
+
end
|
114
|
+
end
|
data.tar.gz.sig
ADDED
metadata
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rsscache
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- James Robertson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRIwEAYDVQQDDAlnZW1t
|
14
|
+
YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
|
15
|
+
8ixkARkWAmV1MB4XDTE1MTEwNjE0MzkwM1oXDTE2MTEwNTE0MzkwM1owSDESMBAG
|
16
|
+
A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
|
17
|
+
EjAQBgoJkiaJk/IsZAEZFgJldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
18
|
+
ggEBAMgkQKulRgufn0SSYnKQ+qgJx7DZdJNAqqYbnxQmACxXX1+LBrdhjvIa4f+8
|
19
|
+
hFEywDRz/chnEGZVkL5el+mgP33rrFKBD85DqHWFNoCeaa9abdyoQFttTnmOwmVS
|
20
|
+
8vMqEAqdOsRH5P+86Hi3GxaB4nvjOJ3OI6cPL2hFNTOErjAenRe8GQOoQmnRooor
|
21
|
+
eqHSi/PJpymK2qAnRMT0YhJcWUPsqX2wyvoqhCdHGWDI3zh05f6IZaK2KO4J+PEj
|
22
|
+
mS/xsVPqNZei6iaHsjOfkSY0Nquji62PUcfSfTSpz8tm6IiNVzI4RwzOzLSHjfrd
|
23
|
+
86jvSW3Zg4+/wV9SpDlqoE5hO70CAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
|
24
|
+
DwQEAwIEsDAdBgNVHQ4EFgQUOhUHHP9MNyXcPfRUB25xNPgimREwJgYDVR0RBB8w
|
25
|
+
HYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1h
|
26
|
+
c3RlckBqYW1lc3JvYmVydHNvbi5ldTANBgkqhkiG9w0BAQUFAAOCAQEAdGd2rZPC
|
27
|
+
kfnLVCNDZqAAUBePQN7af/mYKLHDRGhQR2J3+aeFm6DCY5aQJd9Fult1Nf+oHJnI
|
28
|
+
AJbq8GMkoKc1QQU+YjAIb6UgtL2qXo9VXZ3QXumQgkpbP7p4GQpH1ZQJ8m87bfms
|
29
|
+
oGDGtNn7F0b5EyTBTgDBBaVdgLDtPOMaED/yclJt6rUP//z3hGwP05NFANcjMw9c
|
30
|
+
x+u8RcmzdQ19ot55B/mN7gP/BTY6m/WiZWOkrg9NMRjrJTVknbDfL1aKparYCyoi
|
31
|
+
Fw4DQ6y8iLPuqjr0KqV/BO7FClXyXx4M+1Sejnchk0P5TEPx428bZqGPTakJNidM
|
32
|
+
6QO+pqPpZdfWfw==
|
33
|
+
-----END CERTIFICATE-----
|
34
|
+
date: 2015-11-06 00:00:00.000000000 Z
|
35
|
+
dependencies:
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: dynarex
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '1.2'
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.2.90
|
46
|
+
type: :runtime
|
47
|
+
prerelease: false
|
48
|
+
version_requirements: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - "~>"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '1.2'
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 1.2.90
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: simple-rss
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '1.3'
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 1.3.1
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - "~>"
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '1.3'
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.3.1
|
76
|
+
description:
|
77
|
+
email: james@r0bertson.co.uk
|
78
|
+
executables: []
|
79
|
+
extensions: []
|
80
|
+
extra_rdoc_files: []
|
81
|
+
files:
|
82
|
+
- lib/rsscache.rb
|
83
|
+
homepage: https://github.com/jrobertson/rsscache
|
84
|
+
licenses:
|
85
|
+
- MIT
|
86
|
+
metadata: {}
|
87
|
+
post_install_message:
|
88
|
+
rdoc_options: []
|
89
|
+
require_paths:
|
90
|
+
- lib
|
91
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
requirements: []
|
102
|
+
rubyforge_project:
|
103
|
+
rubygems_version: 2.4.8
|
104
|
+
signing_key:
|
105
|
+
specification_version: 4
|
106
|
+
summary: This gem helps reduce unnessecary requests to webservers by caching RSS feeds
|
107
|
+
where the RSS feeds are updated infrequently
|
108
|
+
test_files: []
|
metadata.gz.sig
ADDED
Binary file
|