apple_epf 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/apple_epf.rb +2 -0
- data/lib/apple_epf/downloader.rb +6 -24
- data/lib/apple_epf/finder.rb +85 -0
- data/lib/apple_epf/finder.rb~ +0 -0
- data/lib/apple_epf/version.rb +1 -1
- data/spec/lib/apple_epf/finder_spec.rb +22 -0
- data/spec/support/fixtures/itunes/epf/index_of_folders.html +71 -0
- metadata +10 -4
data/lib/apple_epf.rb
CHANGED
|
@@ -6,11 +6,13 @@ require 'core_ext/module'
|
|
|
6
6
|
require 'apple_epf/errors'
|
|
7
7
|
require 'apple_epf/logging'
|
|
8
8
|
require 'apple_epf/main'
|
|
9
|
+
require 'apple_epf/finder'
|
|
9
10
|
require 'apple_epf/download_processor'
|
|
10
11
|
require 'apple_epf/downloader'
|
|
11
12
|
require 'apple_epf/extractor'
|
|
12
13
|
require 'apple_epf/parser'
|
|
13
14
|
|
|
15
|
+
|
|
14
16
|
module AppleEpf
|
|
15
17
|
FILE_TYPES = %w( full incremental )
|
|
16
18
|
|
data/lib/apple_epf/downloader.rb
CHANGED
|
@@ -6,6 +6,8 @@ require 'digest/md5'
|
|
|
6
6
|
module AppleEpf
|
|
7
7
|
class Downloader
|
|
8
8
|
include AppleEpf::Logging
|
|
9
|
+
include AppleEpf::Finder
|
|
10
|
+
|
|
9
11
|
ITUNES_FLAT_FEED_URL = 'https://feeds.itunes.apple.com/feeds/epf/v3/full'.freeze
|
|
10
12
|
|
|
11
13
|
attr_accessor :type, :filename, :filedate, :force_url
|
|
@@ -62,11 +64,13 @@ module AppleEpf
|
|
|
62
64
|
# Return false if no url was suggested or file does not exist
|
|
63
65
|
raise AppleEpf::DownloaderError.new("Unable to find out what file do you want to download") if path.empty?
|
|
64
66
|
|
|
65
|
-
|
|
67
|
+
_full_url = apple_filename_full_url(path)
|
|
68
|
+
unless file_exists?(_full_url)
|
|
66
69
|
if @type == 'incremental'
|
|
67
70
|
#force prev week. Apple sometimes put files for Sunday to prev week, not current.
|
|
68
71
|
path = "#{main_dir_date(true)}/incremental/#{date_of_file}/#{@filename}#{date_of_file}.tbz"
|
|
69
|
-
|
|
72
|
+
_full_url = apple_filename_full_url(path)
|
|
73
|
+
raise AppleEpf::FileNotExist.new("File does not exist #{path}") unless file_exists?(_full_url)
|
|
70
74
|
else
|
|
71
75
|
raise AppleEpf::FileNotExist.new("File does not exist #{path}")
|
|
72
76
|
end
|
|
@@ -103,27 +107,5 @@ module AppleEpf
|
|
|
103
107
|
main_folder_date = Chronic.parse("#{this_or_last} week wednesday", :now => @filedate.to_time).to_date
|
|
104
108
|
date_to_epf_format(main_folder_date)
|
|
105
109
|
end
|
|
106
|
-
|
|
107
|
-
def date_to_epf_format(date)
|
|
108
|
-
date.strftime("%Y%m%d")
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
def file_exists?(path_to_check)
|
|
112
|
-
full_url = apple_filename_full_url(path_to_check)
|
|
113
|
-
logger_info "Checking file at URL: #{full_url}"
|
|
114
|
-
|
|
115
|
-
uri = URI.parse(full_url)
|
|
116
|
-
|
|
117
|
-
request = Net::HTTP::Head.new(full_url)
|
|
118
|
-
request.basic_auth(AppleEpf.apple_id, AppleEpf.apple_password)
|
|
119
|
-
|
|
120
|
-
r = Net::HTTP.new(uri.host, uri.port)
|
|
121
|
-
r.use_ssl = true
|
|
122
|
-
response = r.start { |http| http.request(request) }
|
|
123
|
-
|
|
124
|
-
raise AppleEpf::BadCredentialsError.new('Bad credentials') if response.code == "401"
|
|
125
|
-
|
|
126
|
-
response.code == "200"
|
|
127
|
-
end
|
|
128
110
|
end
|
|
129
111
|
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
module AppleEpf
|
|
2
|
+
module Finder
|
|
3
|
+
extend self
|
|
4
|
+
ITUNES_FULL_URL = "https://feeds.itunes.apple.com/feeds/epf/v3/full/".freeze
|
|
5
|
+
ITUNES_INCREMENTAL_URL = "https://feeds.itunes.apple.com/feeds/epf/v3/full/%s/incremental/".freeze
|
|
6
|
+
|
|
7
|
+
# AppleEpf::Finder.find_incremental(Date.parse('20140311'), 'popularity')
|
|
8
|
+
# => "https://feeds.itunes.apple.com/feeds/epf/v3/full/20140305/incremental/20140311/popularity20140311.tbz"
|
|
9
|
+
def find_incremental(date, filename)
|
|
10
|
+
all_weeks = get_weekly_folders_from_full_url
|
|
11
|
+
potential_dates = detect_closest_weeks_for_date(all_weeks, date)
|
|
12
|
+
founded_url = nil
|
|
13
|
+
potential_dates.reverse.each do |potential|
|
|
14
|
+
found = week_include_date?(potential, date)
|
|
15
|
+
if found
|
|
16
|
+
_founded_url = (ITUNES_INCREMENTAL_URL % potential) + date_to_epf_format(date) +
|
|
17
|
+
"/" + "#{filename}#{date_to_epf_format(date)}.tbz"
|
|
18
|
+
founded_url = _founded_url if file_exists?(_founded_url)
|
|
19
|
+
break if founded_url
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
founded_url
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
#daily_date is Date object
|
|
27
|
+
def week_include_date?(week_date, daily_date)
|
|
28
|
+
dates = get_daily_incremental_folders_within_week_url(week_date)
|
|
29
|
+
dates.detect{|d| Date.parse(d) == daily_date}
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
#date is Date object
|
|
33
|
+
def detect_closest_weeks_for_date(all_weeks, date)
|
|
34
|
+
date_range = ((date - 16)..(date + 16)).to_a
|
|
35
|
+
all_weeks.select{|d| date_range.include?(Date.parse(d))}
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def get_daily_incremental_folders_within_week_url(week_folder)
|
|
39
|
+
url = ITUNES_INCREMENTAL_URL % week_folder
|
|
40
|
+
get_folders_from_url(url)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def get_weekly_folders_from_full_url
|
|
44
|
+
get_folders_from_url(ITUNES_FULL_URL)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def get_folders_from_url(url)
|
|
49
|
+
uri = URI(url)
|
|
50
|
+
|
|
51
|
+
req = Net::HTTP::Get.new(uri.request_uri)
|
|
52
|
+
req.basic_auth(AppleEpf.apple_id, AppleEpf.apple_password)
|
|
53
|
+
|
|
54
|
+
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) {|http|
|
|
55
|
+
http.request(req)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
body = res.body
|
|
59
|
+
avaliable_dates = Nokogiri::HTML(body).xpath("//td/a").map(&:text).select{|s| s[0..7] =~ /\d{8}/}.map{|s| s.chomp("/")}
|
|
60
|
+
avaliable_dates
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def date_to_epf_format(date)
|
|
65
|
+
date.strftime("%Y%m%d")
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def file_exists?(full_url)
|
|
69
|
+
|
|
70
|
+
uri = URI.parse(full_url)
|
|
71
|
+
|
|
72
|
+
request = Net::HTTP::Head.new(full_url)
|
|
73
|
+
request.basic_auth(AppleEpf.apple_id, AppleEpf.apple_password)
|
|
74
|
+
|
|
75
|
+
r = Net::HTTP.new(uri.host, uri.port)
|
|
76
|
+
r.use_ssl = true
|
|
77
|
+
response = r.start { |http| http.request(request) }
|
|
78
|
+
|
|
79
|
+
raise AppleEpf::BadCredentialsError.new('Bad credentials') if response.code == "401"
|
|
80
|
+
|
|
81
|
+
response.code == "200"
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
end
|
|
85
|
+
end
|
|
File without changes
|
data/lib/apple_epf/version.rb
CHANGED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
require File.expand_path('../../../spec_helper', __FILE__)
|
|
3
|
+
|
|
4
|
+
describe AppleEpf::Finder do
|
|
5
|
+
describe ".detect_closest_weeks_for_date" do
|
|
6
|
+
it "should return closest weeks to perform further lookup" do
|
|
7
|
+
all_weeks = ["20120111", "20120118", "20120215", "20120314", "20120321", "20120328", "20120404", "20120509", "20120523", "20120606", "20120620", "20120718", "20120725", "20120801", "20120808", "20120829", "20120919", "20120926", "20121003", "20121017", "20121114", "20121121", "20121128", "20130109", "20130123", "20130130", "20130213", "20130227", "20130320", "20130327", "20130522", "20130529", "20130724", "20130821", "20130925", "20131002", "20131009", "20131016", "20131023", "20131030", "20131106", "20131113", "20131120", "20131127", "20131204", "20131211", "20131218", "20131225", "20140101", "20140108", "20140115", "20140122", "20140129", "20140213", "20140219", "20140226", "20140305", "20140312", "20140319"]
|
|
8
|
+
|
|
9
|
+
interesting_date = Date.parse('20140124')
|
|
10
|
+
|
|
11
|
+
r = AppleEpf::Finder.detect_closest_weeks_for_date(all_weeks, interesting_date)
|
|
12
|
+
r.should == ["20140108", "20140115", "20140122", "20140129"]
|
|
13
|
+
|
|
14
|
+
interesting_date = Date.parse('20131002')
|
|
15
|
+
|
|
16
|
+
r = AppleEpf::Finder.detect_closest_weeks_for_date(all_weeks, interesting_date)
|
|
17
|
+
r.should == ["20130925", "20131002", "20131009", "20131016"]
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>Index of /feeds/epf/v3/full</title>
|
|
5
|
+
</head>
|
|
6
|
+
<body>
|
|
7
|
+
<h1>Index of /feeds/epf/v3/full</h1>
|
|
8
|
+
<table><tr><th><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr><tr><th colspan="5"><hr></th></tr>
|
|
9
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20120111/">20120111/</a> </td><td align="right">26-Feb-2012 04:59 </td><td align="right"> - </td><td> </td></tr>
|
|
10
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20120118/">20120118/</a> </td><td align="right">05-Mar-2012 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
11
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20120215/">20120215/</a> </td><td align="right">02-Apr-2012 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
12
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20120314/">20120314/</a> </td><td align="right">29-Apr-2012 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
13
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20120321/">20120321/</a> </td><td align="right">07-May-2012 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
14
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20120328/">20120328/</a> </td><td align="right">13-May-2012 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
15
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20120404/">20120404/</a> </td><td align="right">20-May-2012 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
16
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20120509/">20120509/</a> </td><td align="right">24-Jun-2012 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
17
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20120523/">20120523/</a> </td><td align="right">08-Jul-2012 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
18
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20120606/">20120606/</a> </td><td align="right">22-Jul-2012 05:27 </td><td align="right"> - </td><td> </td></tr>
|
|
19
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20120620/">20120620/</a> </td><td align="right">05-Aug-2012 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
20
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20120718/">20120718/</a> </td><td align="right">02-Sep-2012 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
21
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20120725/">20120725/</a> </td><td align="right">09-Sep-2012 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
22
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20120801/">20120801/</a> </td><td align="right">16-Sep-2012 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
23
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20120808/">20120808/</a> </td><td align="right">23-Sep-2012 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
24
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20120829/">20120829/</a> </td><td align="right">14-Oct-2012 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
25
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20120919/">20120919/</a> </td><td align="right">04-Nov-2012 01:00 </td><td align="right"> - </td><td> </td></tr>
|
|
26
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20120926/">20120926/</a> </td><td align="right">11-Nov-2012 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
27
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20121003/">20121003/</a> </td><td align="right">18-Nov-2012 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
28
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20121017/">20121017/</a> </td><td align="right">02-Dec-2012 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
29
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20121114/">20121114/</a> </td><td align="right">30-Dec-2012 03:42 </td><td align="right"> - </td><td> </td></tr>
|
|
30
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20121121/">20121121/</a> </td><td align="right">06-Jan-2013 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
31
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20121128/">20121128/</a> </td><td align="right">13-Jan-2013 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
32
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20130109/">20130109/</a> </td><td align="right">25-Feb-2013 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
33
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20130123/">20130123/</a> </td><td align="right">11-Mar-2013 03:00 </td><td align="right"> - </td><td> </td></tr>
|
|
34
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20130130/">20130130/</a> </td><td align="right">18-Mar-2013 03:00 </td><td align="right"> - </td><td> </td></tr>
|
|
35
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20130213/">20130213/</a> </td><td align="right">01-Apr-2013 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
36
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20130227/">20130227/</a> </td><td align="right">15-Apr-2013 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
37
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20130320/">20130320/</a> </td><td align="right">06-May-2013 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
38
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20130327/">20130327/</a> </td><td align="right">13-May-2013 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
39
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20130522/">20130522/</a> </td><td align="right">09-Jul-2013 10:17 </td><td align="right"> - </td><td> </td></tr>
|
|
40
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20130529/">20130529/</a> </td><td align="right">15-Jul-2013 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
41
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20130724/">20130724/</a> </td><td align="right">09-Sep-2013 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
42
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20130821/">20130821/</a> </td><td align="right">07-Oct-2013 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
43
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20130925/">20130925/</a> </td><td align="right">17-Feb-2014 15:15 </td><td align="right"> - </td><td> </td></tr>
|
|
44
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20131002/">20131002/</a> </td><td align="right">25-Feb-2014 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
45
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20131009/">20131009/</a> </td><td align="right">04-Mar-2014 18:09 </td><td align="right"> - </td><td> </td></tr>
|
|
46
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20131016/">20131016/</a> </td><td align="right">02-Dec-2013 11:04 </td><td align="right"> - </td><td> </td></tr>
|
|
47
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20131023/">20131023/</a> </td><td align="right">17-Mar-2014 14:51 </td><td align="right"> - </td><td> </td></tr>
|
|
48
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20131030/">20131030/</a> </td><td align="right">24-Mar-2014 17:24 </td><td align="right"> - </td><td> </td></tr>
|
|
49
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20131106/">20131106/</a> </td><td align="right">23-Dec-2013 12:36 </td><td align="right"> - </td><td> </td></tr>
|
|
50
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20131113/">20131113/</a> </td><td align="right">31-Dec-2013 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
51
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20131120/">20131120/</a> </td><td align="right">07-Jan-2014 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
52
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20131127/">20131127/</a> </td><td align="right">13-Jan-2014 14:07 </td><td align="right"> - </td><td> </td></tr>
|
|
53
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20131204/">20131204/</a> </td><td align="right">20-Jan-2014 16:54 </td><td align="right"> - </td><td> </td></tr>
|
|
54
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20131211/">20131211/</a> </td><td align="right">28-Jan-2014 03:33 </td><td align="right"> - </td><td> </td></tr>
|
|
55
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20131218/">20131218/</a> </td><td align="right">04-Feb-2014 05:04 </td><td align="right"> - </td><td> </td></tr>
|
|
56
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20131225/">20131225/</a> </td><td align="right">10-Feb-2014 11:45 </td><td align="right"> - </td><td> </td></tr>
|
|
57
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20140101/">20140101/</a> </td><td align="right">18-Feb-2014 00:43 </td><td align="right"> - </td><td> </td></tr>
|
|
58
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20140108/">20140108/</a> </td><td align="right">25-Feb-2014 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
59
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20140115/">20140115/</a> </td><td align="right">04-Mar-2014 02:00 </td><td align="right"> - </td><td> </td></tr>
|
|
60
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20140122/">20140122/</a> </td><td align="right">11-Mar-2014 03:00 </td><td align="right"> - </td><td> </td></tr>
|
|
61
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20140129/">20140129/</a> </td><td align="right">17-Mar-2014 14:51 </td><td align="right"> - </td><td> </td></tr>
|
|
62
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20140213/">20140213/</a> </td><td align="right">18-Feb-2014 00:42 </td><td align="right"> - </td><td> </td></tr>
|
|
63
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20140219/">20140219/</a> </td><td align="right">22-Feb-2014 11:14 </td><td align="right"> - </td><td> </td></tr>
|
|
64
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20140226/">20140226/</a> </td><td align="right">01-Mar-2014 14:13 </td><td align="right"> - </td><td> </td></tr>
|
|
65
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20140305/">20140305/</a> </td><td align="right">08-Mar-2014 12:15 </td><td align="right"> - </td><td> </td></tr>
|
|
66
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20140312/">20140312/</a> </td><td align="right">15-Mar-2014 12:26 </td><td align="right"> - </td><td> </td></tr>
|
|
67
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="20140319/">20140319/</a> </td><td align="right">22-Mar-2014 14:20 </td><td align="right"> - </td><td> </td></tr>
|
|
68
|
+
<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="current/">current/</a> </td><td align="right">22-Mar-2014 14:20 </td><td align="right"> - </td><td> </td></tr>
|
|
69
|
+
<tr><th colspan="5"><hr></th></tr>
|
|
70
|
+
</table>
|
|
71
|
+
</body></html>
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: apple_epf
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.2.
|
|
4
|
+
version: 1.2.1
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2014-03-
|
|
12
|
+
date: 2014-03-28 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rspec
|
|
@@ -203,6 +203,8 @@ files:
|
|
|
203
203
|
- lib/apple_epf/downloader.rb
|
|
204
204
|
- lib/apple_epf/errors.rb
|
|
205
205
|
- lib/apple_epf/extractor.rb
|
|
206
|
+
- lib/apple_epf/finder.rb
|
|
207
|
+
- lib/apple_epf/finder.rb~
|
|
206
208
|
- lib/apple_epf/logging.rb
|
|
207
209
|
- lib/apple_epf/main.rb
|
|
208
210
|
- lib/apple_epf/parser.rb
|
|
@@ -217,6 +219,7 @@ files:
|
|
|
217
219
|
- spec/lib/apple_epf/download_processor/aria_download_processor_spec.rb
|
|
218
220
|
- spec/lib/apple_epf/downloader_spec.rb
|
|
219
221
|
- spec/lib/apple_epf/exctractor_spec.rb
|
|
222
|
+
- spec/lib/apple_epf/finder_spec.rb
|
|
220
223
|
- spec/lib/apple_epf/main_spec.rb
|
|
221
224
|
- spec/lib/apple_epf/parser_spec.rb
|
|
222
225
|
- spec/spec_helper.rb
|
|
@@ -230,6 +233,7 @@ files:
|
|
|
230
233
|
- spec/support/fixtures/itunes/epf/incremental/popularity20130111.tbz
|
|
231
234
|
- spec/support/fixtures/itunes/epf/incremental/popularity20130111/popularity1
|
|
232
235
|
- spec/support/fixtures/itunes/epf/incremental/popularity20130111/popularity2
|
|
236
|
+
- spec/support/fixtures/itunes/epf/index_of_folders.html
|
|
233
237
|
homepage:
|
|
234
238
|
licenses: []
|
|
235
239
|
post_install_message:
|
|
@@ -244,7 +248,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
244
248
|
version: '0'
|
|
245
249
|
segments:
|
|
246
250
|
- 0
|
|
247
|
-
hash:
|
|
251
|
+
hash: 2191365109496733098
|
|
248
252
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
249
253
|
none: false
|
|
250
254
|
requirements:
|
|
@@ -253,7 +257,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
253
257
|
version: '0'
|
|
254
258
|
segments:
|
|
255
259
|
- 0
|
|
256
|
-
hash:
|
|
260
|
+
hash: 2191365109496733098
|
|
257
261
|
requirements: []
|
|
258
262
|
rubyforge_project:
|
|
259
263
|
rubygems_version: 1.8.23
|
|
@@ -264,6 +268,7 @@ test_files:
|
|
|
264
268
|
- spec/lib/apple_epf/download_processor/aria_download_processor_spec.rb
|
|
265
269
|
- spec/lib/apple_epf/downloader_spec.rb
|
|
266
270
|
- spec/lib/apple_epf/exctractor_spec.rb
|
|
271
|
+
- spec/lib/apple_epf/finder_spec.rb
|
|
267
272
|
- spec/lib/apple_epf/main_spec.rb
|
|
268
273
|
- spec/lib/apple_epf/parser_spec.rb
|
|
269
274
|
- spec/spec_helper.rb
|
|
@@ -277,3 +282,4 @@ test_files:
|
|
|
277
282
|
- spec/support/fixtures/itunes/epf/incremental/popularity20130111.tbz
|
|
278
283
|
- spec/support/fixtures/itunes/epf/incremental/popularity20130111/popularity1
|
|
279
284
|
- spec/support/fixtures/itunes/epf/incremental/popularity20130111/popularity2
|
|
285
|
+
- spec/support/fixtures/itunes/epf/index_of_folders.html
|