ex_ua 0.1.1 → 0.1.2
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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/ex_ua.gemspec +3 -5
- data/lib/ex_ua/category.rb +3 -1
- data/lib/ex_ua/client.rb +15 -8
- data/lib/ex_ua/item.rb +20 -4
- data/lib/ex_ua/version.rb +1 -1
- data/spec/category_spec.rb +22 -11
- data/spec/item_spec.rb +36 -0
- metadata +6 -34
- data/fixtures/vcr_cassettes/ExUA_Category.yml +0 -151
- data/fixtures/vcr_cassettes/ExUA_Client.yml +0 -194
- data/spec/cassettes/ExUA_Category/general_1_page_category/_categories/has_current_category_as_a_parent_category_for_all_childs.yml +0 -366
- data/spec/cassettes/ExUA_Category/general_1_page_category/_categories/returns_list_of_child_categories.yml +0 -366
- data/spec/cassettes/ExUA_Category/general_1_page_category/canonical_url/.yml +0 -366
- data/spec/cassettes/ExUA_Category/general_1_page_category/description/.yml +0 -366
- data/spec/cassettes/ExUA_Category/general_1_page_category/items/.yml +0 -366
- data/spec/cassettes/ExUA_Category/general_1_page_category/name/.yml +0 -366
- data/spec/cassettes/ExUA_Category/general_1_page_category/next_/.yml +0 -366
- data/spec/cassettes/ExUA_Category/general_1_page_category/prev_/.yml +0 -366
- data/spec/cassettes/ExUA_Category/general_few_pages_category/_next/returns_a_category_with_same_url_but_different_page_number.yml +0 -555
- data/spec/cassettes/ExUA_Category/general_few_pages_category/_prev/raises_error_when_no_prev_url_found.yml +0 -555
- data/spec/cassettes/ExUA_Category/item_category/picture/.yml +0 -555
- data/spec/cassettes/ExUA_Client/_available_languages/returns_list_of_available_languages.yml +0 -194
- data/spec/cassettes/ExUA_Client/_search/returns_20_results_by_default.yml +0 -620
- data/spec/cassettes/ExUA_Client/_search/returns_list_of_categories.yml +0 -1233
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: acb906012343c1b591485c34e4f16c8d4d505038
|
4
|
+
data.tar.gz: 2d3d0f7f0068061c4c7a65690d5c5955ac6c55bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2ee3595dcf7d471b62ca53393dcb68da42b95c757a701b1312895d25857722cc0ae9c8e66a328ba128ad0ab2b07db6b2c017270c3e50feb68396dacd393258f
|
7
|
+
data.tar.gz: 6a191afbf4418a3edd3239a4ecf437c21b477449c25db68d82127402133360777858bf4db1e2b7a8e5bc3599aa1730cea56dc8ebe4b1a2d5736c12ac86a86fdc
|
data/README.md
CHANGED
@@ -20,7 +20,7 @@ Example usage
|
|
20
20
|
category = base_categories.first # Select first category (usually video)
|
21
21
|
sub_categories = category.categories # Select sub-categories of a category
|
22
22
|
example_video_category = sub_categories.first.categories.first
|
23
|
-
download_items = example_video_category.items # Here you'll have an array of download items in a given category with #
|
23
|
+
download_items = example_video_category.items # Here you'll have an array of download items in a given category with #load_uri
|
24
24
|
|
25
25
|
|
26
26
|
Search
|
data/ex_ua.gemspec
CHANGED
@@ -7,14 +7,12 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = ExUa::VERSION
|
8
8
|
s.authors = ["Andriy Dmytrenko"]
|
9
9
|
s.email = ["refresh.xss@gmail.com"]
|
10
|
-
s.homepage = ""
|
10
|
+
s.homepage = "https://github.com/Antti/ex_ua"
|
11
11
|
s.summary = %q{An http://ex.ua/ API}
|
12
12
|
s.description = %q{Ruby API for ex.ua}
|
13
13
|
|
14
|
-
s.
|
15
|
-
|
16
|
-
s.files = `git ls-files`.split("\n")
|
17
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
+
s.files = `git ls-files | grep -v spec/cassettes`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/* | grep -v spec/cassettes`.split("\n")
|
18
16
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
17
|
s.require_paths = ["lib"]
|
20
18
|
s.license = 'MIT'
|
data/lib/ex_ua/category.rb
CHANGED
@@ -93,6 +93,8 @@ module ExUA
|
|
93
93
|
uri.query_values["p"].to_i
|
94
94
|
end
|
95
95
|
|
96
|
+
# Category's path
|
97
|
+
# @return [String]
|
96
98
|
def path
|
97
99
|
uri.path
|
98
100
|
end
|
@@ -104,7 +106,7 @@ module ExUA
|
|
104
106
|
table_rows.map do |tr|
|
105
107
|
tr.search("a[title!='']")
|
106
108
|
end.reject(&:empty?).map do |links|
|
107
|
-
Item.
|
109
|
+
Item.parse(links)
|
108
110
|
end
|
109
111
|
end
|
110
112
|
|
data/lib/ex_ua/client.rb
CHANGED
@@ -4,20 +4,21 @@ require 'singleton'
|
|
4
4
|
require 'addressable/uri'
|
5
5
|
|
6
6
|
module ExUA
|
7
|
-
# Client for ExUA
|
8
|
-
# @example Usage
|
9
|
-
# client = ExUA::Client.new
|
10
|
-
# categories = client.base_categories('ru')
|
11
|
-
#
|
12
7
|
class ExUAFetcher
|
13
8
|
include HTTParty
|
14
9
|
no_follow true
|
10
|
+
# Returns the redirect target for a given uri
|
15
11
|
def self.get_redirect(uri)
|
16
12
|
get Addressable::URI.parse(uri).normalize.to_s
|
17
13
|
rescue HTTParty::RedirectionTooDeep => e
|
18
14
|
e.response["location"]
|
19
15
|
end
|
20
16
|
end
|
17
|
+
# Client for ExUA
|
18
|
+
# @example Usage
|
19
|
+
# client = ExUA::Client.new
|
20
|
+
# categories = client.base_categories('ru')
|
21
|
+
#
|
21
22
|
class Client
|
22
23
|
include Singleton
|
23
24
|
KNOWN_BASE_CATEGORIES = %w[video audio images texts games software]
|
@@ -40,9 +41,15 @@ module ExUA
|
|
40
41
|
# client.base_categories('ru')
|
41
42
|
# @return [Array<ExUA::Category>]
|
42
43
|
def base_categories(lang)
|
43
|
-
|
44
|
+
base_categories_names.map{|cat| Category.new(url: "/#{lang}/#{cat}")}
|
44
45
|
end
|
45
46
|
|
47
|
+
# Search for a given @text
|
48
|
+
# @param[String] text A term to search for
|
49
|
+
# @param[Integer] page Page number, starting from 0
|
50
|
+
# @param[Integer] per Items per page. Defaults to 20
|
51
|
+
# @return[Array<ExUA::Category>] list of categories
|
52
|
+
|
46
53
|
def search(text, page=0, per=20)
|
47
54
|
uri = Addressable::URI.parse("/search?#{Addressable::URI.form_encode(s: text, p: page, per: per)}")
|
48
55
|
page = get(uri)
|
@@ -53,8 +60,8 @@ module ExUA
|
|
53
60
|
end
|
54
61
|
end
|
55
62
|
|
56
|
-
def get(
|
57
|
-
Nokogiri.parse(HTTParty.get(Addressable::URI.join(ExUA::BASE_URL,
|
63
|
+
def get(path)
|
64
|
+
Nokogiri.parse(HTTParty.get(Addressable::URI.join(ExUA::BASE_URL,path).to_s).body)
|
58
65
|
end
|
59
66
|
|
60
67
|
private
|
data/lib/ex_ua/item.rb
CHANGED
@@ -3,7 +3,7 @@ require 'addressable/uri'
|
|
3
3
|
module ExUA
|
4
4
|
# Download item
|
5
5
|
class Item < Struct.new(:id, :title, :additional_servers)
|
6
|
-
def self.
|
6
|
+
def self.parse(links)
|
7
7
|
self.new.tap do |item|
|
8
8
|
links.each { |link|
|
9
9
|
case link.attributes["href"].value
|
@@ -19,14 +19,29 @@ module ExUA
|
|
19
19
|
end
|
20
20
|
|
21
21
|
# Queries ex.ua to get a real url to fetch data from (follows redirect)
|
22
|
+
# URI with content-disposition: attachment
|
22
23
|
def retrieve_real_load_url
|
23
|
-
retrieve_real_url(
|
24
|
+
retrieve_real_url(load_uri)
|
24
25
|
end
|
25
26
|
|
26
27
|
def retrieve_real_get_url
|
27
28
|
retrieve_real_url(get_uri)
|
28
29
|
end
|
29
30
|
|
31
|
+
# @params[String, File] save_to Optional. File location to save content to
|
32
|
+
# @return[HTTParty::Response] Response
|
33
|
+
def download(save_to=nil)
|
34
|
+
response = HTTParty.get(retrieve_real_get_url)
|
35
|
+
File.write(save_to, response.body) if save_to
|
36
|
+
response
|
37
|
+
end
|
38
|
+
|
39
|
+
# Returns response with headers(includes content-type, content-lenght)
|
40
|
+
# @return[HTTParty::Response]
|
41
|
+
def head
|
42
|
+
@head ||= HTTParty.head(retrieve_real_get_url)
|
43
|
+
end
|
44
|
+
|
30
45
|
# Actual download url with ex.ua included
|
31
46
|
# You can add ?fs_id=server_id param to download form #additional_servers
|
32
47
|
# @return[Addressable::URI]
|
@@ -35,8 +50,9 @@ module ExUA
|
|
35
50
|
@get_url ||= Addressable::URI.join(ExUA::BASE_URL,"/get/#{self.id}")
|
36
51
|
end
|
37
52
|
|
38
|
-
|
39
|
-
|
53
|
+
# URI with content-disposition: attachment
|
54
|
+
def load_uri
|
55
|
+
@load_url ||= Addressable::URI.join(ExUA::BASE_URL, "/load/#{self.id}")
|
40
56
|
end
|
41
57
|
|
42
58
|
private
|
data/lib/ex_ua/version.rb
CHANGED
data/spec/category_spec.rb
CHANGED
@@ -19,24 +19,35 @@ describe ExUA::Category, :vcr => true do
|
|
19
19
|
its(:uri){should eq(Addressable::URI.parse('http://www.ex.ua/ru/video'))}
|
20
20
|
end
|
21
21
|
context "general few pages category" do
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
context "on third page" do
|
23
|
+
subject{ExUA::Category.new(url: '/ru/video/foreign?p=2')}
|
24
|
+
describe '#prev' do
|
25
|
+
it 'returns a category with same url, but previous page number' do
|
26
|
+
expect(subject.prev.uri.request_uri).to eq('/ru/video/foreign?p=1')
|
27
|
+
end
|
26
28
|
end
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
expect(subject.prev.uri).to eq('')
|
29
|
+
describe '#next' do
|
30
|
+
it 'returns a category with same url, but different page number' do
|
31
|
+
subject.next.uri.request_uri.should eq('/ru/video/foreign?p=3')
|
32
|
+
end
|
32
33
|
end
|
33
|
-
|
34
|
-
|
34
|
+
end
|
35
|
+
context "on a first page" do
|
36
|
+
subject{ExUA::Category.new(url: '/ru/video/foreign')}
|
37
|
+
describe '#prev' do
|
38
|
+
it 'raises error when no prev url found' do
|
39
|
+
expect{subject.prev}.to raise_error(ExUA::Category::NotFound)
|
40
|
+
end
|
35
41
|
end
|
36
42
|
end
|
37
43
|
end
|
38
44
|
context "item category" do
|
39
45
|
subject{ExUA::Category.new(url: '/71902463')}
|
40
46
|
its(:picture){should_not be_nil}
|
47
|
+
describe '#items' do
|
48
|
+
it 'has an array of items' do
|
49
|
+
subject.items.size.should_not eq(0)
|
50
|
+
end
|
51
|
+
end
|
41
52
|
end
|
42
53
|
end
|
data/spec/item_spec.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'tempfile'
|
3
|
+
|
4
|
+
describe ExUA::Item, vcr: true do
|
5
|
+
let(:id) {68579769}
|
6
|
+
subject{ExUA::Item.new(id)}
|
7
|
+
describe '#download' do
|
8
|
+
let(:tmp_file) { Tempfile.new('foo')}
|
9
|
+
let(:png_header) {[137, 80, 78, 71, 13, 10, 26, 10] }
|
10
|
+
after(:each) do
|
11
|
+
tmp_file.unlink
|
12
|
+
end
|
13
|
+
it 'returns response with content-type' do
|
14
|
+
subject.download.content_type.should eq('image/png')
|
15
|
+
end
|
16
|
+
it 'returns response with content of a file' do
|
17
|
+
subject.download.body[0..7].bytes.to_a.should eq png_header
|
18
|
+
end
|
19
|
+
it 'saves content to a file' do
|
20
|
+
subject.download(tmp_file)
|
21
|
+
tmp_file.read[0..7].bytes.to_a.should eq png_header
|
22
|
+
end
|
23
|
+
end
|
24
|
+
describe '#head' do
|
25
|
+
it 'has content-type' do
|
26
|
+
subject.head.content_type.should eq('image/png')
|
27
|
+
end
|
28
|
+
it 'has content-length' do
|
29
|
+
subject.head.content_length.should_not be_nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
its(:get_uri){should eq Addressable::URI.parse("http://www.ex.ua/get/#{id}")}
|
33
|
+
its(:load_uri){should eq Addressable::URI.parse("http://www.ex.ua/load/#{id}")}
|
34
|
+
describe '#retrieve_real_load_url'
|
35
|
+
describe '#retrieve_real_get_url'
|
36
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ex_ua
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andriy Dmytrenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-08-
|
11
|
+
date: 2013-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -121,31 +121,16 @@ files:
|
|
121
121
|
- README.md
|
122
122
|
- Rakefile
|
123
123
|
- ex_ua.gemspec
|
124
|
-
- fixtures/vcr_cassettes/ExUA_Category.yml
|
125
|
-
- fixtures/vcr_cassettes/ExUA_Client.yml
|
126
124
|
- lib/ex_ua.rb
|
127
125
|
- lib/ex_ua/category.rb
|
128
126
|
- lib/ex_ua/client.rb
|
129
127
|
- lib/ex_ua/item.rb
|
130
128
|
- lib/ex_ua/version.rb
|
131
|
-
- spec/cassettes/ExUA_Category/general_1_page_category/_categories/has_current_category_as_a_parent_category_for_all_childs.yml
|
132
|
-
- spec/cassettes/ExUA_Category/general_1_page_category/_categories/returns_list_of_child_categories.yml
|
133
|
-
- spec/cassettes/ExUA_Category/general_1_page_category/canonical_url/.yml
|
134
|
-
- spec/cassettes/ExUA_Category/general_1_page_category/description/.yml
|
135
|
-
- spec/cassettes/ExUA_Category/general_1_page_category/items/.yml
|
136
|
-
- spec/cassettes/ExUA_Category/general_1_page_category/name/.yml
|
137
|
-
- spec/cassettes/ExUA_Category/general_1_page_category/next_/.yml
|
138
|
-
- spec/cassettes/ExUA_Category/general_1_page_category/prev_/.yml
|
139
|
-
- spec/cassettes/ExUA_Category/general_few_pages_category/_next/returns_a_category_with_same_url_but_different_page_number.yml
|
140
|
-
- spec/cassettes/ExUA_Category/general_few_pages_category/_prev/raises_error_when_no_prev_url_found.yml
|
141
|
-
- spec/cassettes/ExUA_Category/item_category/picture/.yml
|
142
|
-
- spec/cassettes/ExUA_Client/_available_languages/returns_list_of_available_languages.yml
|
143
|
-
- spec/cassettes/ExUA_Client/_search/returns_20_results_by_default.yml
|
144
|
-
- spec/cassettes/ExUA_Client/_search/returns_list_of_categories.yml
|
145
129
|
- spec/category_spec.rb
|
146
130
|
- spec/client_spec.rb
|
131
|
+
- spec/item_spec.rb
|
147
132
|
- spec/spec_helper.rb
|
148
|
-
homepage:
|
133
|
+
homepage: https://github.com/Antti/ex_ua
|
149
134
|
licenses:
|
150
135
|
- MIT
|
151
136
|
metadata: {}
|
@@ -164,26 +149,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
164
149
|
- !ruby/object:Gem::Version
|
165
150
|
version: '0'
|
166
151
|
requirements: []
|
167
|
-
rubyforge_project:
|
152
|
+
rubyforge_project:
|
168
153
|
rubygems_version: 2.0.3
|
169
154
|
signing_key:
|
170
155
|
specification_version: 4
|
171
156
|
summary: An http://ex.ua/ API
|
172
157
|
test_files:
|
173
|
-
- spec/cassettes/ExUA_Category/general_1_page_category/_categories/has_current_category_as_a_parent_category_for_all_childs.yml
|
174
|
-
- spec/cassettes/ExUA_Category/general_1_page_category/_categories/returns_list_of_child_categories.yml
|
175
|
-
- spec/cassettes/ExUA_Category/general_1_page_category/canonical_url/.yml
|
176
|
-
- spec/cassettes/ExUA_Category/general_1_page_category/description/.yml
|
177
|
-
- spec/cassettes/ExUA_Category/general_1_page_category/items/.yml
|
178
|
-
- spec/cassettes/ExUA_Category/general_1_page_category/name/.yml
|
179
|
-
- spec/cassettes/ExUA_Category/general_1_page_category/next_/.yml
|
180
|
-
- spec/cassettes/ExUA_Category/general_1_page_category/prev_/.yml
|
181
|
-
- spec/cassettes/ExUA_Category/general_few_pages_category/_next/returns_a_category_with_same_url_but_different_page_number.yml
|
182
|
-
- spec/cassettes/ExUA_Category/general_few_pages_category/_prev/raises_error_when_no_prev_url_found.yml
|
183
|
-
- spec/cassettes/ExUA_Category/item_category/picture/.yml
|
184
|
-
- spec/cassettes/ExUA_Client/_available_languages/returns_list_of_available_languages.yml
|
185
|
-
- spec/cassettes/ExUA_Client/_search/returns_20_results_by_default.yml
|
186
|
-
- spec/cassettes/ExUA_Client/_search/returns_list_of_categories.yml
|
187
158
|
- spec/category_spec.rb
|
188
159
|
- spec/client_spec.rb
|
160
|
+
- spec/item_spec.rb
|
189
161
|
- spec/spec_helper.rb
|
@@ -1,151 +0,0 @@
|
|
1
|
-
---
|
2
|
-
http_interactions:
|
3
|
-
- request:
|
4
|
-
method: get
|
5
|
-
uri: http://www.ex.ua/ru_video.html
|
6
|
-
body:
|
7
|
-
encoding: US-ASCII
|
8
|
-
string: ''
|
9
|
-
headers: {}
|
10
|
-
response:
|
11
|
-
status:
|
12
|
-
code: 404
|
13
|
-
message: Not Found
|
14
|
-
headers:
|
15
|
-
Server:
|
16
|
-
- nginx/1.4.2
|
17
|
-
Date:
|
18
|
-
- Fri, 16 Aug 2013 09:24:25 GMT
|
19
|
-
Content-Type:
|
20
|
-
- text/html; charset=utf-8
|
21
|
-
Content-Length:
|
22
|
-
- '5010'
|
23
|
-
Connection:
|
24
|
-
- keep-alive
|
25
|
-
Set-Cookie:
|
26
|
-
- ccid=5912645536229401831; domain=www.ex.ua; path=/; expires=Mon, 14-Aug-2023
|
27
|
-
09:24:25 GMT
|
28
|
-
Cache-Control:
|
29
|
-
- no-cache, no-store, must-revalidate
|
30
|
-
Expires:
|
31
|
-
- '0'
|
32
|
-
Pragma:
|
33
|
-
- no-cache
|
34
|
-
body:
|
35
|
-
encoding: ASCII-8BIT
|
36
|
-
string: !binary |-
|
37
|
-
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEv
|
38
|
-
L0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCI+
|
39
|
-
DQogDQo8aHRtbD4NCg0KPGhlYWQ+DQo8dGl0bGU+RVguVUE8L3RpdGxlPg0K
|
40
|
-
PGxpbmsgaHJlZj0iL2luZGV4LmNzcz8wLjA0IiB0eXBlPSJ0ZXh0L2NzcyIg
|
41
|
-
cmVsPSJzdHlsZXNoZWV0Ij4NCjxsaW5rIGhyZWY9Ii9mYXZpY29uLmljbyIg
|
42
|
-
cmVsPSJzaG9ydGN1dCBpY29uIj4NCjxtZXRhIG5hbWU9InJvYm90cyIgY29u
|
43
|
-
dGVudD0ibm9hcmNoaXZlIj4NCjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQt
|
44
|
-
dHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxt
|
45
|
-
ZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtbGFuZ3VhZ2UiIGNvbnRlbnQ9InJ1
|
46
|
-
Ij4NCjxzY3JpcHQgc3JjPScvanMvbWFpbi5qcycgY2hhcnNldD0ndXRmLTgn
|
47
|
-
IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+PC9zY3JpcHQ+DQo8c2NyaXB0IHNy
|
48
|
-
Yz0nL2pzL3JlcXVlc3QuanMnIGNoYXJzZXQ9J3V0Zi04JyB0eXBlPSd0ZXh0
|
49
|
-
L2phdmFzY3JpcHQnPjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSd0ZXh0L2ph
|
50
|
-
dmFzY3JpcHQnPg0KaWYgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSBkb2N1
|
51
|
-
bWVudC5jb29raWUgPSAndWRwcj0nICsgd2luZG93LmRldmljZVBpeGVsUmF0
|
52
|
-
aW8gKyAnO3BhdGg9Lyc7DQppZiAod2luZG93LnRvcCAhPSB3aW5kb3cuc2Vs
|
53
|
-
Zikgd2luZG93LnRvcC5sb2NhdGlvbiA9IHdpbmRvdy5zZWxmLmxvY2F0aW9u
|
54
|
-
Ow0KPC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
|
55
|
-
c3JjPSJodHRwczovL2FwaXMuZ29vZ2xlLmNvbS9qcy9wbHVzb25lLmpzIj4N
|
56
|
-
CnsgbGFuZzogJ3J1JyB9DQo8L3NjcmlwdD4NCjwvaGVhZD4NCg0KPGJvZHkg
|
57
|
-
b25sb2FkPSdpbml0Qm9keSgpJz4NCg0KPHRhYmxlIHdpZHRoPScxMDAlJyBo
|
58
|
-
ZWlnaHQ9JzEwMCUnIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRp
|
59
|
-
bmc9MD4NCjx0cj48dGQgdmFsaWduPXRvcCBzdHlsZT0naGVpZ2h0OiA2MHB4
|
60
|
-
Oyc+DQo8ZGl2IHN0eWxlPSd3aWR0aDogMTAwJTsgaGVpZ2h0OiAzMHB4OyBv
|
61
|
-
dmVyZmxvdzogaGlkZGVuOyBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2Nj
|
62
|
-
YzsgcGFkZGluZzogMDsnIGlkPSdhbm5vdW5jZSc+PGlmcmFtZSB3aWR0aD0n
|
63
|
-
MTAwJScgaGVpZ2h0PSczMCcgZnJhbWVib3JkZXI9JzAnIG1hcmdpbmhlaWdo
|
64
|
-
dD0nMCcgbWFyZ2lud2lkdGg9JzAnIHNjcm9sbGluZz0nbm8nIHNyYz0nL2Fk
|
65
|
-
X2Fubm91bmNlLmh0bWwnPjwvaWZyYW1lPjwvZGl2Pg0KDQo8dGFibGUgd2lk
|
66
|
-
dGg9JzEwMCUnIGJvcmRlcj0wIGNsYXNzPW1lbnUgaWQ9bWVudT4NCjx0cj48
|
67
|
-
dGQgY2xhc3M9bWVudV90ZXh0PiZuYnNwOw0KPGEgaHJlZj0nLyc+PGltZyBz
|
68
|
-
cmM9Jy9pL2V4LXNtYWxsLnBuZycgd2lkdGg9MjYgaGVpZ2h0PTEyIGJvcmRl
|
69
|
-
cj0wIGFsdD0nRVgnPi3QpNCw0LnQu9GLPC9hPiZuYnNwO3wNCjxhIGhyZWY9
|
70
|
-
Jy9ydS92aWRlbyc+0JLQuNC00LXQvjwvYT4mbmJzcDt8DQo8YSBocmVmPScv
|
71
|
-
cnUvYXVkaW8nPtCQ0YPQtNC40L48L2E+Jm5ic3A7fA0KPGEgaHJlZj0nL3J1
|
72
|
-
L2ltYWdlcyc+0JjQt9C+0LHRgNCw0LbQtdC90LjRjzwvYT4mbmJzcDt8DQo8
|
73
|
-
YSBocmVmPScvcnUvdGV4dHMnPtCi0LXQutGB0YLRizwvYT4mbmJzcDt8DQo8
|
74
|
-
YSBocmVmPScvcnUvZ2FtZXMnPtCY0LPRgNGLPC9hPiZuYnNwO3wNCjxhIGhy
|
75
|
-
ZWY9Jy9ydS9zb2Z0d2FyZSc+0J/RgNC+0LPRgNCw0LzQvNGLPC9hPiZuYnNw
|
76
|
-
O3wNCjxhIGhyZWY9Jy9ydS9hYm91dCc+0J4g0YHQtdGA0LLQuNGB0LU8L2E+
|
77
|
-
Jm5ic3A7fA0KPGEgaHJlZj0nL3NlYXJjaCc+0J/QvtC40YHQujwvYT4NCiZu
|
78
|
-
YnNwOzwvdGQ+PHRkIGFsaWduPXJpZ2h0IHZhbGlnbj1jZW50ZXIgY2xhc3M9
|
79
|
-
bWVudV90ZXh0PiZuYnNwOw0KPGZvcm0gc3R5bGU9J2Rpc3BsYXk6IGlubGlu
|
80
|
-
ZTsnIGFjdGlvbj0nL2xhbmd1YWdlJz48c2VsZWN0IG5hbWU9bGFuZyBvbmNo
|
81
|
-
YW5nZT0naWYgKHRoaXMuZm9ybSkgdGhpcy5mb3JtLnN1Ym1pdCgpOyc+PG9w
|
82
|
-
dGlvbiB2YWx1ZT1ydSBzZWxlY3RlZD7RgNGD0YHRgdC60LjQuTxvcHRpb24g
|
83
|
-
dmFsdWU9dWs+0YPQutGA0LDRl9C90YHRjNC60LA8b3B0aW9uIHZhbHVlPWVu
|
84
|
-
PmVuZ2xpc2g8b3B0aW9uIHZhbHVlPWVzPmVzcGFub2w8b3B0aW9uIHZhbHVl
|
85
|
-
PWRlPmRldXRzY2g8b3B0aW9uIHZhbHVlPWZyPmZyYW7Dp2FpczxvcHRpb24g
|
86
|
-
dmFsdWU9cGw+cG9sc2tpPG9wdGlvbiB2YWx1ZT1qYT7ml6XmnKzoqp48b3B0
|
87
|
-
aW9uIHZhbHVlPWtrPtKb0LDQt9Cw0ps8L3NlbGVjdD48L2Zvcm0+Jm5ic3A7
|
88
|
-
fA0KPGEgaHJlZj0nL2xvZ2luJz7QktGF0L7QtDwvYT4NCiZuYnNwOw0KPC90
|
89
|
-
ZD48L3RyPg0KPC90YWJsZT4NCjwvdGQ+PC90cj4NCjx0cj48dGQgdmFsaWdu
|
90
|
-
PXRvcCBzdHlsZT0ncGFkZGluZzogMTZweDsnIGlkPSdib2R5X2VsZW1lbnQn
|
91
|
-
Pg0KPHA+PGltZyBzcmM9Jy9pL2lfZXJyb3IucG5nJyB3aWR0aD0zMiBoZWln
|
92
|
-
aHQ9MzIgdnNwYWNlPTEgYWxpZ249YWJzbWlkZGxlPiZuYnNwOzxiaWcgaWQ9
|
93
|
-
J21lc3NhZ2UnPtCh0YLRgNCw0L3QuNGG0LAg0L3QtSDQvdCw0LnQtNC10L3Q
|
94
|
-
sC48L2JpZz4NCjxwPg0KJm5ic3A7DQo8cD4NCjxzcGFuIGNsYXNzPXJfYnV0
|
95
|
-
dG9uPjxhIGhyZWY9Jy8nPtC90LAg0YLQuNGC0YPQuzwvYT48L3NwYW4+DQoN
|
96
|
-
CjwvdGQ+PC90cj4NCjx0cj48dGQgdmFsaWduPWJvdHRvbSBzdHlsZT0naGVp
|
97
|
-
Z2h0OiAzMnB4Oyc+DQo8dGFibGUgd2lkdGg9JzEwMCUnIGJvcmRlcj0wIGNs
|
98
|
-
YXNzPWNvcHlyaWdodD48dHI+PHRkPg0KDQo8IS0tIGhpdC51YSAtLT4NCjxz
|
99
|
-
Y3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz48IS0tDQoNCmZ1bmN0aW9u
|
100
|
-
IGxvYWRKcyhzcmMpDQp7DQoJdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVt
|
101
|
-
ZW50KCdzY3JpcHQnKTsNCglhLnNldEF0dHJpYnV0ZSgnc3JjJywgc3JjKTsN
|
102
|
-
CglhLmFzeW5jID0gJ3RydWUnOw0KCXZhciBiID0gZG9jdW1lbnQuZ2V0RWxl
|
103
|
-
bWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdOw0KCWIucGFyZW50Tm9kZS5p
|
104
|
-
bnNlcnRCZWZvcmUoYSwgYik7DQp9DQoNCmlmICghZG9jdW1lbnQuY29va2ll
|
105
|
-
KSBkb2N1bWVudC5jb29raWUgPSAiYj1iIjsNCg0KbG9hZEpzKCdodHRwOi8v
|
106
|
-
Yy5oaXQudWEvaGl0P2k9MTM1MDEnICsNCgknJmc9MCZ4PTMmcz0xJyArDQoJ
|
107
|
-
JyZ0PScgKyAobmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKSArDQoJ
|
108
|
-
KGRvY3VtZW50LmNvb2tpZSA/ICcmYz0xJyA6ICcnKSArDQoJKHNlbGYgIT0g
|
109
|
-
dG9wID8gJyZmPTEnIDogJycpICsNCgkobmF2aWdhdG9yLmphdmFFbmFibGVk
|
110
|
-
KCkgPyAnJmo9MScgOiAnJykgKw0KCSh0eXBlb2Yoc2NyZWVuKSAhPSAndW5k
|
111
|
-
ZWZpbmVkJyA/ICcmdz0nICsgc2NyZWVuLndpZHRoICsgJyZoPScgKyBzY3Jl
|
112
|
-
ZW4uaGVpZ2h0ICsgJyZkPScgKyAoc2NyZWVuLmNvbG9yRGVwdGggPyBzY3Jl
|
113
|
-
ZW4uY29sb3JEZXB0aCA6IHNjcmVlbi5waXhlbERlcHRoKSA6ICcnKSArDQoJ
|
114
|
-
JyZyPScgKyBlc2NhcGUoZG9jdW1lbnQucmVmZXJyZXIpICsNCgknJnU9JyAr
|
115
|
-
IGVzY2FwZSh3aW5kb3cubG9jYXRpb24uaHJlZikgKw0KCScmJyArIE1hdGgu
|
116
|
-
cmFuZG9tKCkNCik7DQppZiAoZG9jdW1lbnQuY29va2llKSBsb2FkSnMoJ2h0
|
117
|
-
dHA6Ly9jLmhpdC51YS9wb2xsP2k9MTM1MDEmYz0xJicgKyBNYXRoLnJhbmRv
|
118
|
-
bSgpKTsNCg0KLy8tLT48L3NjcmlwdD4NCg0KPG5vc2NyaXB0Pg0KPGltZyBz
|
119
|
-
cmM9J2h0dHA6Ly9jLmhpdC51YS9oaXQ/aT0xMzUwMSZhbXA7Zz0wJmFtcDt4
|
120
|
-
PTInIGJvcmRlcj0nMCcgd2lkdGg9JzEnIGhlaWdodD0nMScvPg0KPC9ub3Nj
|
121
|
-
cmlwdD4NCjwhLS0gLyBoaXQudWEgLS0+DQoNCjwvdGQ+PHRkIGFsaWduPWNl
|
122
|
-
bnRlcj4NCg0KPG5vc2NyaXB0Pg0KPGltZyBzcmM9Imh0dHA6Ly9qdWtlLm1t
|
123
|
-
aS5iZW1vYmlsZS51YS9idWcvcGljLmdpZj9zaXRlaWQ9ZXgudWEiPg0KPC9u
|
124
|
-
b3NjcmlwdD4NCjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPg0KdmFy
|
125
|
-
IHRuc19hbHJlYWR5OyBpZiAoInVuZGVmaW5lZCI9PXR5cGVvZih0bnNfYWxy
|
126
|
-
ZWFkeSkgfHwgbnVsbD09dG5zX2FscmVhZHkgfHwgMD09dG5zX2FscmVhZHkp
|
127
|
-
IHsgdG5zX2FscmVhZHk9MTsgdmFyIGk9bmV3IEltYWdlKCk7IGkuc3JjPSJo
|
128
|
-
dHRwOi8vanVrZS5tbWkuYmVtb2JpbGUudWEvYnVnL3BpYy5naWY/c2l0ZWlk
|
129
|
-
PWV4LnVhJmo9MSYiK01hdGgucmFuZG9tKCk7IChmdW5jdGlvbigpeyB2YXIg
|
130
|
-
cD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdOyB2
|
131
|
-
YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsgcy50eXBl
|
132
|
-
PSJ0ZXh0L2phdmFzY3JpcHQiOyBzLnNyYz0iaHR0cDovL3NvdXJjZS5tbWku
|
133
|
-
YmVtb2JpbGUudWEvY20vY20uanMiOyBzLmFzeW5jID0gdHJ1ZTsgcC5hcHBl
|
134
|
-
bmRDaGlsZChzKTsgfSkoKTsgfTsNCjwvc2NyaXB0Pg0KDQo8L3RkPjx0ZCBh
|
135
|
-
bGlnbj1yaWdodD4NCjxzcGFuIGNsYXNzPXNtYWxsIHRpdGxlPSdjb3B5cmln
|
136
|
-
aHQnPiZjb3B5Ozwvc3Bhbj4mbmJzcDs8c3BhbiBjbGFzcz1zbWFsbD5leC51
|
137
|
-
YSZuYnNwO3wmbmJzcDs8YSBocmVmPScvY29udGFjdCc+0LrQvtC90YLQsNC6
|
138
|
-
0YLQvdCw0Y8g0LjQvdGE0L7RgNC80LDRhtC40Y88L2E+Jm5ic3A7fCZuYnNw
|
139
|
-
OzxhIGhyZWY9Jy9jb3B5cmlnaHQnPtC00LvRjyDQv9GA0LDQstC+0L7QsdC7
|
140
|
-
0LDQtNCw0YLQtdC70LXQuTwvYT48L3NwYW4+DQo8L3RkPjwvdHI+PC90YWJs
|
141
|
-
ZT4NCg0KPC90ZD48L3RyPg0KPC90YWJsZT4NCg0KPHNjcmlwdCB0eXBlPSd0
|
142
|
-
ZXh0L2phdmFzY3JpcHQnPg0Kc2V0VGltZW91dChmdW5jdGlvbigpIHsgdmFy
|
143
|
-
IGUsIGlkID0gMDsgd2hpbGUoZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
|
144
|
-
KCdhZF9ibG9ja18nICsgKytpZCkpIGlmIChlLnN0eWxlLmRpc3BsYXkgPT0g
|
145
|
-
J25vbmUnKSBlLnN0eWxlLmRpc3BsYXkgPSAoZS50YWdOYW1lID09ICdUQUJM
|
146
|
-
RScgPyAndGFibGUnIDogKGUudGFnTmFtZSA9PSAnVFInID8gJ3RhYmxlLXJv
|
147
|
-
dycgOiAnYmxvY2snKSk7IH0sIDI1MDApOw0KPC9zY3JpcHQ+DQoNCjwvYm9k
|
148
|
-
eT4NCg0KPC9odG1sPg0K
|
149
|
-
http_version:
|
150
|
-
recorded_at: Fri, 16 Aug 2013 09:24:25 GMT
|
151
|
-
recorded_with: VCR 2.5.0
|