rsscache 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: e7cfe15e402c2718309c7b4e58fb3090482480a2
4
+ data.tar.gz: 4ddb22d9f20f1045f70037fae6ff8b56a5a0d660
5
+ SHA512:
6
+ metadata.gz: d359f70f0c63a2a1e424e6db93bd3b82e2e095329771c6afee348b091f6ad39b9b2bf2f0e53e59be1a47ad3e63733ffb840bf09364c9f533a1691dd2882b8a04
7
+ data.tar.gz: 2e3de31653a64184d6bbf6fe74d1a991c25013cd72fc4505734811be754d18cef756394b80abfd74ff1ff1aaaf9d4f03328670f5fcbb22c437cee1c012252586
checksums.yaml.gz.sig ADDED
@@ -0,0 +1,3 @@
1
+ E��*��Oݿ[�q�)��7���+�ˑ��K�z ��Sĵ��<�Lr���n��!��H����� ��6! mG[5?���S]� |�|�ben���v<E�3�5�A��vSz��5z�<�F"���P^�����c�5MFL #�'�I���>��YD��7�s)tD
2
+ ����GU�S�F
3
+ a��󱯁̲Eyp��Wx�n��\ф�U�F�^T�!"�\��E�W����A3� �����\�K�?r�g�q.��\UU�0��U
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
@@ -0,0 +1,2 @@
1
+ !^���!Wc�wBb�c���;�<�(^)�j`IW̋9In¡��)"����I��J�x[��e�1G�YAKt�wk�g)t�+�#�o��K��40�Ť�&k���q��p��q�� o�x|���VU�u�
2
+ Iy��Pm�'~#��*���7��U3��ЃGv 26í�(�V��﹜>`�Pe��H���b}Ȧ^�;�P޺�)0tV@K�ާh��]ld#�����8d-Чs��������n
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