argh_ss 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/argh_ss/resolve_url.rb +66 -11
- data/lib/argh_ss/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76e4dcbadc62cdfae8249c0fb4ee9acd62db4e04
|
4
|
+
data.tar.gz: 6707d2d47696dbfd3c314763afdc671ea881934e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f0891786f1263c476f965ed153c99998e6a614990526ec8081fd58d7143b0c41bd23aac9f127af1c6f54ab622be694bc90641aaf5b81bef9c3c64c04641fb60
|
7
|
+
data.tar.gz: ddc429398bf15bea46032536a6d6e02ebf0575c7b82c57624efd2d8c99c0dfdd8605ae0639e1bd59bb0d44c7f86e6d92ea0d2d0a5a77d763d28786f8d2506699
|
data/lib/argh_ss/resolve_url.rb
CHANGED
@@ -1,19 +1,74 @@
|
|
1
1
|
class ResolveURL
|
2
2
|
|
3
|
-
def self.resolve(
|
4
|
-
|
3
|
+
def self.resolve(url)
|
4
|
+
if url_redirects(url).is_a?(String)
|
5
|
+
return url_redirects(url)
|
6
|
+
elsif rss_redirect(url).is_a?(String)
|
7
|
+
return rss_redirect(url)
|
8
|
+
else
|
9
|
+
return nil
|
10
|
+
end
|
11
|
+
end
|
5
12
|
|
6
|
-
|
13
|
+
def self.url_redirects(uri_str, limit = 10)
|
14
|
+
begin
|
15
|
+
raise ArgumentError, 'Too many redirects!' if limit == 0
|
7
16
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
17
|
+
response = Net::HTTP.get_response(URI(uri_str))
|
18
|
+
|
19
|
+
case response
|
20
|
+
when Net::HTTPSuccess then
|
21
|
+
uri_str
|
22
|
+
when Net::HTTPRedirection then
|
23
|
+
location = response['location']
|
24
|
+
url_redirects(location, limit - 1)
|
25
|
+
else
|
26
|
+
uri_str
|
27
|
+
end
|
28
|
+
rescue
|
29
|
+
nil
|
16
30
|
end
|
17
31
|
end
|
18
32
|
|
33
|
+
def self.rss_redirect(url)
|
34
|
+
begin
|
35
|
+
rss = RSS::Parser.parse(url)
|
36
|
+
case rss.feed_type
|
37
|
+
when 'rss'
|
38
|
+
rss.channel.link
|
39
|
+
when 'atom'
|
40
|
+
rss.id.content
|
41
|
+
end
|
42
|
+
rescue
|
43
|
+
nil
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# def self.resolve(uri_str, limit = 10)
|
48
|
+
# raise ArgumentError, 'Too many redirects!' if limit == 0
|
49
|
+
|
50
|
+
# response = Net::HTTP.get_response(URI(uri_str))
|
51
|
+
|
52
|
+
# case response
|
53
|
+
# when Net::HTTPSuccess then
|
54
|
+
# uri_str
|
55
|
+
# when Net::HTTPRedirection then
|
56
|
+
# location = response['location']
|
57
|
+
# resolve(location, limit - 1)
|
58
|
+
# else
|
59
|
+
# uri_str
|
60
|
+
# end
|
61
|
+
# end
|
62
|
+
|
63
|
+
# def self.rss_pluck(url)
|
64
|
+
# rss = RSS::Parser.parse(url, false)
|
65
|
+
|
66
|
+
# case rss.feed_type
|
67
|
+
# when 'rss'
|
68
|
+
# p rss.channel.link
|
69
|
+
# when 'atom'
|
70
|
+
# p rss.id.content
|
71
|
+
# end
|
72
|
+
# end
|
73
|
+
|
19
74
|
end
|
data/lib/argh_ss/version.rb
CHANGED