-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtracker.rb
52 lines (40 loc) · 1.09 KB
/
tracker.rb
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
# frozen_string_literal: true
require "bundler/inline"
gemfile do
source "https://rubygems.org"
ruby "> 3.3"
gem "nokolexbor"
gem "ostruct"
gem "pstore"
gem "rss"
end
require "yaml/store"
# Tracker
class Tracker
def initialize
@database = YAML::Store.new "tracking.yml"
end
def warez = @warez ||= repository.map { OpenStruct.new _1 }
def run = process_warez! && save!
private
def repository = @database.transaction { _1["warez"] } || []
def save! = @database.transaction { _1["warez"] = warez.map(&:to_h) }
def process_warez!
warez.each do |ware|
parsed_value = fetch_value ware
puts("Rien trouvé pour #{ware.title} ! Xpath ou URL ok ?") && next if parsed_value.empty?
next if parsed_value == ware.value
puts "Màj disponible pour #{ware.title} : #{parsed_value}"
ware.value = parsed_value
end
end
def fetch_value(ware)
doc = URI.parse(ware.url).open
if ware.xpath == :rss
RSS::Parser.parse(doc).items.first.title
else
Nokolexbor::HTML(doc).xpath(ware.xpath).text.strip
end
end
end
Tracker.new.run