iplayer-dl 0.1.17 → 0.1.18
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/bin/.iplayer-dl.swp +0 -0
- data/lib/iplayer/.browser.rb.swp +0 -0
- data/lib/iplayer/.downloader.rb.swp +0 -0
- data/lib/iplayer/.version.rb.swp +0 -0
- data/lib/iplayer/browser.rb +17 -2
- data/lib/iplayer/downloader.rb +17 -10
- data/lib/iplayer/translations.rb +3 -1
- data/lib/iplayer/version.rb +2 -2
- metadata +18 -14
data/bin/.iplayer-dl.swp
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/lib/iplayer/browser.rb
CHANGED
@@ -43,20 +43,35 @@ class Browser
|
|
43
43
|
@http_class = http_class
|
44
44
|
end
|
45
45
|
|
46
|
+
def post(location, data, headers={}, &blk)
|
47
|
+
request(:post, location, data, headers, &blk)
|
48
|
+
end
|
49
|
+
|
46
50
|
def get(location, headers={}, &blk)
|
51
|
+
request(:get, location, nil, headers, &blk)
|
52
|
+
end
|
53
|
+
|
54
|
+
def request(type, location, data, headers, &blk)
|
47
55
|
url = URI.parse(location)
|
48
56
|
http = @http_class.new(url.host, url.port)
|
49
57
|
path = url.path
|
50
58
|
if url.query
|
51
59
|
path << '?' << url.query
|
52
60
|
end
|
61
|
+
headers_to_send = DEFAULT_HEADERS.merge(headers)
|
53
62
|
if defined? DEBUG
|
54
63
|
puts path
|
55
|
-
|
64
|
+
headers_to_send.each do |k,v|
|
56
65
|
puts " -> #{k}: #{v}"
|
57
66
|
end
|
58
67
|
end
|
59
|
-
response =
|
68
|
+
response =
|
69
|
+
case type
|
70
|
+
when :get
|
71
|
+
http.request_get(path, headers_to_send, &blk)
|
72
|
+
when :post
|
73
|
+
http.request_post(path, data, headers_to_send, &blk)
|
74
|
+
end
|
60
75
|
if defined? DEBUG
|
61
76
|
response.each do |k,v|
|
62
77
|
puts "<- #{k}: #{v}"
|
data/lib/iplayer/downloader.rb
CHANGED
@@ -3,7 +3,6 @@ require 'cgi'
|
|
3
3
|
module IPlayer
|
4
4
|
class Downloader
|
5
5
|
|
6
|
-
IPHONE_URL = 'http://www.bbc.co.uk/mobile/iplayer/'
|
7
6
|
EPISODE_URL = 'http://www.bbc.co.uk/mobile/iplayer/episode/%s'
|
8
7
|
SELECTOR_URL = 'http://www.bbc.co.uk/mediaselector/3/auth/iplayer_streaming_http_mp4/%s?%s'
|
9
8
|
MAX_SEGMENT = 4 * 1024 * 1024
|
@@ -41,7 +40,17 @@ class Downloader
|
|
41
40
|
def get(url, user_agent, options={}, &blk)
|
42
41
|
options['User-Agent'] = user_agent
|
43
42
|
options['Cookie'] = cookies if cookies
|
44
|
-
browser.get(url, options, &blk)
|
43
|
+
response = browser.get(url, options, &blk)
|
44
|
+
self.cookies = response.cookies.join('; ')
|
45
|
+
response
|
46
|
+
end
|
47
|
+
|
48
|
+
def post(url, data, user_agent, options={}, &blk)
|
49
|
+
options['User-Agent'] = user_agent
|
50
|
+
options['Cookie'] = cookies if cookies
|
51
|
+
response = browser.post(url, data, options, &blk)
|
52
|
+
self.cookies = response.cookies.join('; ')
|
53
|
+
response
|
45
54
|
end
|
46
55
|
|
47
56
|
def available_versions
|
@@ -79,22 +88,20 @@ class Downloader
|
|
79
88
|
|
80
89
|
private
|
81
90
|
|
82
|
-
def request_iphone_page
|
83
|
-
response = get(IPHONE_URL, Browser::IPHONE_UA)
|
84
|
-
raise ProgrammeDoesNotExist unless response.is_a?(Net::HTTPSuccess)
|
85
|
-
self.cookies = response.cookies.join('; ')
|
86
|
-
end
|
87
|
-
|
88
91
|
def request_episode_page(pid)
|
89
92
|
response = get(EPISODE_URL % pid, Browser::IPHONE_UA)
|
90
93
|
raise ProgrammeDoesNotExist unless response.is_a?(Net::HTTPSuccess)
|
94
|
+
if response.body =~ /isOver\d+/
|
95
|
+
data = "form=guidanceprompt&#$&=1"
|
96
|
+
response = post(EPISODE_URL % pid, data, Browser::IPHONE_UA)
|
97
|
+
raise ProgrammeDoesNotExist unless response.is_a?(Net::HTTPSuccess)
|
98
|
+
end
|
91
99
|
response.body
|
92
100
|
end
|
93
101
|
|
94
102
|
def real_stream_location(pid)
|
95
|
-
request_iphone_page
|
96
103
|
html = request_episode_page(pid)
|
97
|
-
location = html[%r{http://
|
104
|
+
location = html[%r{<embed[^>]*?href="(http://[^"]+)}, 1]
|
98
105
|
|
99
106
|
unless location
|
100
107
|
raise FileUnavailable
|
data/lib/iplayer/translations.rb
CHANGED
@@ -6,9 +6,9 @@ module Translations
|
|
6
6
|
:download_button => "Download ...",
|
7
7
|
:about_button => "About ...",
|
8
8
|
:status_waiting => "Waiting",
|
9
|
+
:status_stopped => "Stopped",
|
9
10
|
:pid_tool_tip => "Use either the short alphanumeric programme identifier or "+
|
10
11
|
"the URL of the viewing page on the iPlayer website.",
|
11
|
-
:status_waiting => "Waiting",
|
12
12
|
:no_pid_given => "You must specify a programme ID before I can download it.",
|
13
13
|
:save_dialog_title => "Save As",
|
14
14
|
:file_types => "iPlayer programmes",
|
@@ -52,6 +52,8 @@ module Translations
|
|
52
52
|
[self.class.get_translation_namespace, key.to_s].flatten.compact.join(".").split(".").inject(STRINGS){ |hash, subkey|
|
53
53
|
hash[subkey.to_sym]
|
54
54
|
}.gsub(/\{\{([^\}]+)\}\}/){ methods[$1.to_sym] }
|
55
|
+
rescue
|
56
|
+
"MISSING TRANSLATION: #{key}"
|
55
57
|
end
|
56
58
|
|
57
59
|
def self.included(klass)
|
data/lib/iplayer/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iplayer-dl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Battley
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-12-
|
12
|
+
date: 2009-12-19 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -35,29 +35,33 @@ files:
|
|
35
35
|
- README
|
36
36
|
- setup.rb
|
37
37
|
- Rakefile
|
38
|
-
- lib/iplayer.rb
|
38
|
+
- lib/iplayer/.version.rb.swp
|
39
39
|
- lib/iplayer/version.rb
|
40
|
-
- lib/iplayer/
|
41
|
-
- lib/iplayer/
|
40
|
+
- lib/iplayer/browser.rb
|
41
|
+
- lib/iplayer/downloader.rb
|
42
42
|
- lib/iplayer/preferences.rb
|
43
|
-
- lib/iplayer/metadata.rb
|
44
|
-
- lib/iplayer/gui/main_frame.rb
|
45
43
|
- lib/iplayer/gui/frame.rb
|
46
44
|
- lib/iplayer/gui/app.rb
|
45
|
+
- lib/iplayer/gui/main_frame.rb
|
46
|
+
- lib/iplayer/subtitles.rb
|
47
47
|
- lib/iplayer/errors.rb
|
48
|
-
- lib/iplayer
|
48
|
+
- lib/iplayer/.browser.rb.swp
|
49
|
+
- lib/iplayer/.downloader.rb.swp
|
50
|
+
- lib/iplayer/translations.rb
|
51
|
+
- lib/iplayer/metadata.rb
|
49
52
|
- lib/iplayer/constants.rb
|
50
|
-
- lib/iplayer
|
51
|
-
- test/test_subtitles.rb
|
53
|
+
- lib/iplayer.rb
|
52
54
|
- test/test_preferences.rb
|
53
55
|
- test/test_metadata.rb
|
54
|
-
-
|
56
|
+
- test/test_subtitles.rb
|
55
57
|
- bin/iplayer-dl
|
56
|
-
-
|
58
|
+
- bin/iplayer-dl-gui
|
59
|
+
- bin/.iplayer-dl.swp
|
60
|
+
- share/pixmaps/iplayer-dl/icon128.png
|
57
61
|
- share/pixmaps/iplayer-dl/icon48.png
|
58
|
-
- share/pixmaps/iplayer-dl/icon32.png
|
59
62
|
- share/pixmaps/iplayer-dl/icon16.png
|
60
|
-
- share/pixmaps/iplayer-dl/
|
63
|
+
- share/pixmaps/iplayer-dl/icon32.png
|
64
|
+
- share/pixmaps/iplayer-dl/icon64.png
|
61
65
|
has_rdoc: true
|
62
66
|
homepage: http://po-ru.com/projects/iplayer-downloader
|
63
67
|
licenses: []
|