apple_epf 1.2.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|