Skip to content

Commit 1ba7368

Browse files
committed
First draft of torrent keywords updater functionality.
1 parent a61412b commit 1ba7368

10 files changed

+163
-81
lines changed

Tracker_add_Tracker_releases.idea

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
Tracker
2+
ID: 1
3+
Keywords: "Fury 2014 HD"
4+
5+
Timestamp: "Mon, 16 Feb 2015 09:24:01 +0000" ====> Compared with usertracker timestamp. If Tracker.timestamp newer than usertracker.timestamp, then inform user.
6+
7+
created_at: "Sat, 07 Dec 2014 23:18:52 +0000"
8+
updated_at "Mon, 16 Feb 2015 11:44:17 +0000"
9+
10+
Tracker_releases
11+
FK: Tracker_id: 1
12+
Keywords: "Fury 2014 the achilles The Doors heel"
13+
Timestamp: "Mon, 16 Feb 2015 09:26:02 +0000"
14+
15+
FK: Tracker_id: 2
16+
Keywords: "DVDRIP Cuban Fury 2014 The Doors"
17+
Timestamp: "Mon, 16 Feb 2015 09:25:01 +0000"
18+
19+
Delete all tracker_releases with timestamps older than one month, once a month.

alternative_updater.rb

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
class TrackerUpdater
2+
3+
# Revert this! New perspective.
4+
# Get all new torrents through last 24 hours as RSS file.
5+
# Download and parse/search through.
6+
# Only one hit = no hammering.)
7+
8+
def initialize
9+
@updated_trackers = []
10+
@updatepool = Tracker.where{updated_at < Time.now-86400}.all
11+
end
12+
13+
def go!
14+
@updatepool.each do |t|
15+
search = KeywordSearch.new(t.keywords)
16+
results = search.results
17+
timestamp = results[0].at_css('pubDate').text.to_time
18+
if timestamp > t.timestamp
19+
t.timestamp = timestamp
20+
@updated_trackers << t.id
21+
#sleep 3 #to avoid ban for hammering feed source?
22+
#else
23+
# t.touch #why?
24+
end
25+
26+
def save_list
27+
someDBentry (with timestamps) = @updated_trackers
28+
if someDBentry.save
29+
@updated_trackers = nil
30+
self (TrackerUpdater) = nil
31+
send update success email to admin
32+
else
33+
alert admin of error via email!!!
34+
# retry?
35+
end
36+
end
37+
end

app.rb

+23-81
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
require 'sinatra'
2-
require 'net/http'
3-
require 'oga'
2+
#require 'net/http' -relocated to get_torrent_releases.rb
3+
#require 'oga'
44

55
class Updater
66

@@ -12,113 +12,55 @@ def initialize
1212
@tracker_keywords = prepare_tracker_keywords
1313
@regex_keywords = convert_keywords_to_regex
1414
@updated_matches = match_regex_and_torrents
15-
# update_tracker_timestamps
16-
# generate_updated_tracker_list
15+
update_tracker_timestamps
16+
generate_updated_tracker_list
1717
# mail_admin_summary
18+
# mail_users_with_new_releases
1819
@finish_time = Time.now
1920
end
2021

21-
#private
22+
private
2223

23-
def get_torrent_releases
24-
pn, titles, timestamps = 0, [], []
25-
while pn < 1
26-
url = URI.parse('https://torrentz.eu/feedA?f=added%3A1d&p=' + pn.to_s)
27-
response = Net::HTTP.get_response(url)
28-
if response.body.include?("item")
29-
doc = Oga.parse_xml(response.body)
30-
doc.xpath('//item/title').map {|t| titles << t.text }
31-
doc.xpath('//item/pubDate').map {|t| timestamps << t.text }
32-
pn += 1
33-
else
34-
pn = nil
35-
end
36-
end
37-
titles.zip(timestamps).uniq
38-
end
39-
40-
def prepare_tracker_keywords
41-
updatepool = Tracker.where{updated_at < Time.now-86400}.all
42-
keywords = []
43-
updatepool.each do |k|
44-
keywords << k.keywords.split(' ')
45-
end
46-
keywords
47-
end
48-
49-
def convert_keywords_to_regex
50-
keywords = @tracker_keywords.map do |array_lineitem|
51-
builder = ""
52-
last = ""
53-
array_lineitem.each do |string_element|
54-
if string_element[0] == "-"
55-
string_element.sub!(/^-/, '')
56-
last += '(?m)^(?!.*?' + string_element + ')'
57-
else
58-
builder += '(?=.*?\b' + string_element + '\b)'
59-
end
60-
end
61-
if last.empty?
62-
throwback = "/" + builder + ".*/i"
63-
else
64-
throwback = "/" + builder + ".*" + last + ".*$" + "/i"
65-
end
66-
eval(throwback)
67-
end
68-
end
69-
70-
def match_regex_and_torrents
71-
hash = @released_torrents.to_h
72-
@regex_keywords.map do |regex|
73-
hash.select{ |k, _| k[regex]}
74-
end # hash.select{ |k, _| k[/(?=.*?\bkeyword1\b)(?=.*?\bkeyword2\b)(?=.*?\bkeyword3\b).*(?m)^(?!.*?keyword4).*$/i]}
75-
end
24+
require_relative 'controllers/init'
7625

77-
def update_tracker_timestamps
78-
@updated_trackers = []
79-
end
80-
81-
def generate_updated_tracker_list
26+
def mail_admin_summary
8227
# something
8328
end
8429

85-
def mail_admin_summary
30+
def mail_users_with_new_releases
8631
# something
8732
end
8833

8934
end
9035

91-
=begin
92-
keywords.each do |keys|
93-
words = keys.split(' ')
94-
95-
hash.select{ |k, _| k[/(?=.*?\bkeyword1\b)(?=.*?\bkeyword2\b)(?=.*?\bkeyword3\b).*(?m)^(?!.*?keyword4).*$/i]}
96-
=end
97-
9836
get '/verysecreturl33403430/?' do
9937
Updater.new
10038
end
10139

10240
get '/?' do
103-
@list
41+
@list = @updated_matches.map do |new_torrent|
42+
new_torrent[1]
43+
end
10444
erb :index
10545
end
10646

10747
__END__
10848
@@layout
10949
<html>
110-
<head>
111-
<body>
112-
<%= yield %>
113-
</body>
114-
</head>
50+
<head>
51+
<body>
52+
<%= yield %>
53+
</body>
54+
</head>
11555
</html>
11656

11757
@@index
11858
<ul>
119-
<% @list.each do |title, time| %>
120-
<li>
121-
<%= "The torrent " + "'" + title + "'" + " was released on " + time %>
122-
</li>
59+
<% @list.each do |item| %>
60+
<% item.each do |new_torrent| %>
61+
<li>
62+
<%= "'" + new_torrent[0] + "'" + " was released on " + new_torrent[1] %>
63+
</li>
64+
<% end %>
12365
<% end %>
12466
</ul>
+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
def convert_keywords_to_regex
2+
id = []
3+
regex = []
4+
@tracker_keywords.map do |array_lineitem|
5+
builder = ""
6+
last = ""
7+
id << array_lineitem[0]
8+
array_lineitem[1].each do |string_element|
9+
if string_element[0] == "-"
10+
string_element.sub!(/^-/, '')
11+
last += '(?m)^(?!.*?' + string_element + ')'
12+
else
13+
builder += '(?=.*?\b' + string_element + '\b)'
14+
end
15+
end
16+
if last.empty?
17+
throwback = "/" + builder + ".*/i"
18+
else
19+
throwback = "/" + builder + ".*" + last + ".*$" + "/i"
20+
end
21+
regex << eval(throwback)
22+
end
23+
id.zip(regex)
24+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
def generate_updated_tracker_list
2+
@updated_matches.map do |updated_tracker|
3+
updated_tracker[0]
4+
end
5+
end

controllers/get_torrent_releases.rb

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
require 'net/http'
2+
require 'oga'
3+
4+
def get_torrent_releases
5+
pn, titles, timestamps = 0, [], []
6+
while pn < 1
7+
url = URI.parse('https://torrentz.eu/feedA?f=added%3A1d&p=' + pn.to_s)
8+
response = Net::HTTP.get_response(url)
9+
if response.body.include?("item")
10+
doc = Oga.parse_xml(response.body)
11+
doc.xpath('//item/title').map {|t| titles << t.text }
12+
doc.xpath('//item/pubDate').map {|t| timestamps << t.text }
13+
pn += 1
14+
else
15+
pn = nil
16+
end
17+
end
18+
titles.zip(timestamps).uniq
19+
end

controllers/init.rb

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
require_relative 'get_torrent_releases'
2+
require_relative 'prepare_tracker_keywords'
3+
require_relative 'convert_keywords_to_regex'
4+
require_relative 'match_regex_and_torrents'
5+
require_relative 'update_tracker_timestamps'
6+
require_relative 'generate_updated_tracker_list'
7+
#require_relative 'mail_admin_summary'
8+
#require_relative 'mail_users_with_new_releases'
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
def match_regex_and_torrents
2+
hash = @released_torrents.to_h
3+
@regex_keywords.each do |tracker_regex|
4+
regex = tracker_regex[1]
5+
matching_torrents = hash.select{ |k, _| k[regex]}
6+
if matching_torrents.empty?
7+
@regex_keywords.delete(@regex_keywords.assoc(tracker_regex[0]))
8+
else
9+
tracker_regex.pop
10+
tracker_regex.push(matching_torrents)
11+
end
12+
end
13+
end
+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
def prepare_tracker_keywords
2+
updatepool = Tracker.where{updated_at < Time.now-86400}.all
3+
id, keywords = [], []
4+
updatepool.each do |k|
5+
id << k.id
6+
keywords << k.keywords.split(' ')
7+
end
8+
id.zip(keywords)
9+
end
+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
def update_tracker_timestamps
2+
@updated_matches.each do |array_item|
3+
time_insert = array_item[1].values.sort.last
4+
Tracker[id: array_item[0]].update(timestamp: time_insert)
5+
end
6+
end

0 commit comments

Comments
 (0)