forked from id774/automaticruby
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathxml.rb
More file actions
53 lines (48 loc) · 1.43 KB
/
xml.rb
File metadata and controls
53 lines (48 loc) · 1.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# -*- coding: utf-8 -*-
# Name:: Automatic::Plugin::Subscription::Xml
# Author:: 774 <http://id774.net>
# Created:: Jul 12, 2013
# Updated:: Oct 29, 2014
# Copyright:: Copyright (c) 2012-2014 Automatic Ruby Developers.
# License:: Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0.
module Automatic::Plugin
class SubscriptionXml
require 'open-uri'
require 'active_support'
require 'active_support/core_ext'
require 'active_support/deprecation'
require 'rss'
def initialize(config, pipeline=[])
@config = config
@pipeline = pipeline
end
def run
@return_feeds = []
@config['urls'].each {|url|
retries = 0
retry_max = @config['retry'].to_i || 0
begin
create_rss(URI::Parser.new.escape(url))
rescue
retries += 1
Automatic::Log.puts("error", "ErrorCount: #{retries}, Fault in parsing: #{url}")
sleep ||= @config['interval'].to_i
retry if retries <= retry_max
end
}
@return_feeds
end
private
def create_rss(url)
Automatic::Log.puts("info", "Parsing XML: #{url}")
hash = Hash.from_xml(open(url).read)
json = hash.to_json
data = ActiveSupport::JSON.decode(json)
unless data.nil?
rss = Automatic::FeedMaker.content_provide(url, data)
sleep ||= @config['interval'].to_i
@return_feeds << rss
end
end
end
end