picasa 0.5.4 → 0.6.0
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/.gitignore +2 -0
- data/.travis.yml +4 -9
- data/Gemfile +4 -4
- data/README.md +4 -12
- data/extra/Thorfile +0 -3
- data/lib/picasa.rb +1 -8
- data/lib/picasa/api/album.rb +11 -11
- data/lib/picasa/api/base.rb +0 -3
- data/lib/picasa/api/comment.rb +6 -8
- data/lib/picasa/api/photo.rb +9 -9
- data/lib/picasa/api/tag.rb +6 -8
- data/lib/picasa/client.rb +2 -2
- data/lib/picasa/connection.rb +14 -51
- data/lib/picasa/exceptions.rb +1 -0
- data/lib/picasa/file.rb +8 -0
- data/lib/picasa/http.rb +28 -0
- data/lib/picasa/presenter/album.rb +15 -15
- data/lib/picasa/presenter/album_list.rb +10 -10
- data/lib/picasa/presenter/comment.rb +6 -6
- data/lib/picasa/presenter/comment_list.rb +10 -10
- data/lib/picasa/presenter/media.rb +5 -5
- data/lib/picasa/presenter/photo.rb +15 -15
- data/lib/picasa/presenter/tag.rb +3 -3
- data/lib/picasa/presenter/tag_list.rb +10 -10
- data/lib/picasa/utils.rb +11 -13
- data/lib/picasa/version.rb +1 -1
- data/picasa.gemspec +2 -1
- data/test/api/album_test.rb +163 -20
- data/test/api/comment_test.rb +95 -10
- data/test/api/photo_test.rb +27 -11
- data/test/api/tag_test.rb +84 -13
- data/test/cassettes/album-404.yml +52 -0
- data/test/cassettes/album-create.yml +107 -0
- data/test/cassettes/album-destroy.yml +55 -0
- data/test/cassettes/album-list.yml +85 -0
- data/test/cassettes/album-show.yml +123 -0
- data/test/cassettes/auth-failed.yml +50 -0
- data/test/cassettes/auth-success.yml +64 -0
- data/test/cassettes/comment-400.yml +56 -0
- data/test/cassettes/comment-create.yml +88 -0
- data/test/cassettes/comment-destroy.yml +53 -0
- data/test/cassettes/comment-list.yml +87 -0
- data/test/cassettes/photo-412.yml +58 -0
- data/test/cassettes/photo-create.yml +1908 -0
- data/test/cassettes/photo-destroy.yml +55 -0
- data/test/cassettes/tag-create.yml +85 -0
- data/test/cassettes/tag-destroy.yml +53 -0
- data/test/cassettes/tag-list.yml +79 -0
- data/test/client_test.rb +10 -10
- data/test/connection_test.rb +0 -35
- data/test/helper.rb +21 -7
- data/test/utils_test.rb +0 -6
- metadata +37 -40
- data/test/fixtures/album/album-create.txt +0 -21
- data/test/fixtures/album/album-list-with-tag.txt +0 -105
- data/test/fixtures/album/album-list.txt +0 -105
- data/test/fixtures/album/album-show-with-max-results.txt +0 -131
- data/test/fixtures/album/album-show-with-tag-and-many-photos.txt +0 -156
- data/test/fixtures/album/album-show-with-tag-and-one-photo.txt +0 -105
- data/test/fixtures/album/album-show.txt +0 -169
- data/test/fixtures/auth/success.txt +0 -14
- data/test/fixtures/comment/comment-list.txt +0 -65
- data/test/fixtures/exceptions/forbidden.txt +0 -12
- data/test/fixtures/exceptions/not_found.txt +0 -14
- data/test/fixtures/exceptions/precondition_failed.txt +0 -14
- data/test/fixtures/json.txt +0 -435
- data/test/fixtures/photo/photo-created.txt +0 -21
- data/test/fixtures/photo/photo-list-all-with-q.txt +0 -556
- data/test/fixtures/photo/photo-list-all.txt +0 -623
- data/test/fixtures/photo/photo-list-user.txt +0 -388
- data/test/fixtures/presenters/album_list.xml +0 -88
- data/test/fixtures/presenters/album_show.xml +0 -152
- data/test/fixtures/presenters/album_show_with_one_photo.xml +0 -88
- data/test/fixtures/presenters/comment_list.xml +0 -48
- data/test/fixtures/presenters/tag_list.xml +0 -51
- data/test/fixtures/tag/tag-list.txt +0 -68
- data/test/presenter/album_list_test.rb +0 -67
- data/test/presenter/album_test.rb +0 -189
- data/test/presenter/author_test.rb +0 -17
- data/test/presenter/base_test.rb +0 -50
- data/test/presenter/comment_list_test.rb +0 -67
- data/test/presenter/comment_test.rb +0 -56
- data/test/presenter/content_test.rb +0 -18
- data/test/presenter/link_test.rb +0 -21
- data/test/presenter/media_test.rb +0 -29
- data/test/presenter/photo_test.rb +0 -90
- data/test/presenter/tag_list_test.rb +0 -67
- data/test/presenter/tag_test.rb +0 -48
- data/test/presenter/thumbnail_test.rb +0 -24
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -3,13 +3,8 @@ notifications:
|
|
3
3
|
rvm:
|
4
4
|
- 1.8.7
|
5
5
|
- 1.9.3
|
6
|
-
env:
|
7
|
-
- XML_PARSER=rexml
|
8
|
-
- XML_PARSER=nokogiri
|
9
|
-
- XML_PARSER=libxml
|
10
|
-
# does not work yet
|
11
|
-
# - XML_PARSER=ox
|
12
6
|
|
13
|
-
|
14
|
-
|
15
|
-
|
7
|
+
env:
|
8
|
+
- JSON_PARSER=oj
|
9
|
+
- JSON_PARSER=yajl
|
10
|
+
- JSON_PARSER=json_pure
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -37,7 +37,7 @@ client = Picasa::Client.new(user_id: "some.user@gmail.com", password: "secret")
|
|
37
37
|
Or by setting custom authorization header, i.e. taken from OAuth authentication:
|
38
38
|
|
39
39
|
```ruby
|
40
|
-
client = Picasa::Client.new(user_id: "some.user@gmail.com", authorization_header: "
|
40
|
+
client = Picasa::Client.new(user_id: "some.user@gmail.com", authorization_header: "Bearer access-token")
|
41
41
|
```
|
42
42
|
|
43
43
|
### Proxy
|
@@ -78,18 +78,9 @@ If you run out of quota and want to resize images to fit Picasa free storage lim
|
|
78
78
|
thor imagery:resize path-to-folder-with-photos
|
79
79
|
```
|
80
80
|
|
81
|
-
|
81
|
+
### Boost
|
82
82
|
|
83
|
-
|
84
|
-
|
85
|
-
Using `rexml` parser wont return `etag` attribute properly.
|
86
|
-
|
87
|
-
I recommend to use `libxml` or `nokogiri`.
|
88
|
-
You can set it by:
|
89
|
-
|
90
|
-
```ruby
|
91
|
-
MultiXml.parser = :libxml
|
92
|
-
```
|
83
|
+
Picasa uses gzipped requests to speedup fetching results. Benchmarks are available on [Vinicius Teles gist](https://gist.github.com/4012466)
|
93
84
|
|
94
85
|
## Continuous Integration
|
95
86
|
[](http://travis-ci.org/morgoth/picasa)
|
@@ -102,6 +93,7 @@ MultiXml.parser = :libxml
|
|
102
93
|
* [Javier Guerra](https://github.com/javierg)
|
103
94
|
* [Eiichi Takebuchi](https://github.com/GRGSIBERIA)
|
104
95
|
* [TADA Tadashi](https://github.com/tdtds)
|
96
|
+
* [Vinicius Teles](https://github.com/viniciusteles)
|
105
97
|
|
106
98
|
## Copyright
|
107
99
|
|
data/extra/Thorfile
CHANGED
data/lib/picasa.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
|
-
require "multi_xml"
|
2
|
-
|
3
1
|
require "picasa/version"
|
4
2
|
require "picasa/utils"
|
5
3
|
require "picasa/exceptions"
|
4
|
+
require "picasa/http"
|
6
5
|
require "picasa/connection"
|
7
6
|
require "picasa/client"
|
8
7
|
require "picasa/file"
|
@@ -25,9 +24,3 @@ require "picasa/presenter/photo"
|
|
25
24
|
require "picasa/presenter/tag"
|
26
25
|
require "picasa/presenter/tag_list"
|
27
26
|
require "picasa/presenter/thumbnail"
|
28
|
-
|
29
|
-
module Picasa
|
30
|
-
API_URL = "https://picasaweb.google.com"
|
31
|
-
API_AUTH_URL = "https://www.google.com"
|
32
|
-
API_VERSION = "2"
|
33
|
-
end
|
data/lib/picasa/api/album.rb
CHANGED
@@ -13,10 +13,10 @@ module Picasa
|
|
13
13
|
#
|
14
14
|
# @return [Presenter::AlbumList]
|
15
15
|
def list(options = {})
|
16
|
-
|
17
|
-
response = Connection.new.get(:path =>
|
16
|
+
path = "/data/feed/api/user/#{user_id}"
|
17
|
+
response = Connection.new.get(:path => path, :query => options, :headers => auth_header)
|
18
18
|
|
19
|
-
Presenter::AlbumList.new(
|
19
|
+
Presenter::AlbumList.new(response.parsed_response["feed"])
|
20
20
|
end
|
21
21
|
|
22
22
|
# Returns photo list for given album
|
@@ -30,10 +30,10 @@ module Picasa
|
|
30
30
|
# @return [Presenter::Album]
|
31
31
|
# @raise [NotFoundError] raised when album cannot be found
|
32
32
|
def show(album_id, options = {})
|
33
|
-
|
34
|
-
response = Connection.new.get(:path =>
|
33
|
+
path = "/data/feed/api/user/#{user_id}/albumid/#{album_id}"
|
34
|
+
response = Connection.new.get(:path => path, :query => options, :headers => auth_header)
|
35
35
|
|
36
|
-
Presenter::Album.new(
|
36
|
+
Presenter::Album.new(response.parsed_response["feed"])
|
37
37
|
end
|
38
38
|
|
39
39
|
# Creates album
|
@@ -52,10 +52,10 @@ module Picasa
|
|
52
52
|
params[:access] ||= "private"
|
53
53
|
|
54
54
|
template = Template.new(:new_album, params)
|
55
|
-
|
56
|
-
response = Connection.new.post(:path =>
|
55
|
+
path = "/data/feed/api/user/#{user_id}"
|
56
|
+
response = Connection.new.post(:path => path, :body => template.render, :headers => auth_header)
|
57
57
|
|
58
|
-
Presenter::Album.new(
|
58
|
+
Presenter::Album.new(response.parsed_response["entry"])
|
59
59
|
end
|
60
60
|
|
61
61
|
# Destroys given album
|
@@ -69,8 +69,8 @@ module Picasa
|
|
69
69
|
# @raise [PreconditionFailedError] raised when ETag does not match
|
70
70
|
def destroy(album_id, options = {})
|
71
71
|
headers = auth_header.merge({"If-Match" => options.fetch(:etag, "*")})
|
72
|
-
|
73
|
-
Connection.new.delete(:path =>
|
72
|
+
path = "/data/entry/api/user/#{user_id}/albumid/#{album_id}"
|
73
|
+
Connection.new.delete(:path => path, :headers => headers)
|
74
74
|
true
|
75
75
|
end
|
76
76
|
alias :delete :destroy
|
data/lib/picasa/api/base.rb
CHANGED
@@ -7,9 +7,6 @@ module Picasa
|
|
7
7
|
# @option credentials [String] :user_id google username/email
|
8
8
|
# @option credentials [String] :authorization_header header for authenticating requests
|
9
9
|
def initialize(credentials = {})
|
10
|
-
if MultiXml.parser.to_s == "MultiXml::Parsers::Ox"
|
11
|
-
raise StandardError, "MultiXml parser is set to :ox - picasa gem will not work with it currently, use one of: :libxml, :nokogiri, :rexml"
|
12
|
-
end
|
13
10
|
@user_id = credentials.fetch(:user_id)
|
14
11
|
@authorization_header = credentials[:authorization_header]
|
15
12
|
end
|
data/lib/picasa/api/comment.rb
CHANGED
@@ -19,10 +19,9 @@ module Picasa
|
|
19
19
|
path << "/albumid/#{album_id}" if album_id
|
20
20
|
path << "/photoid/#{photo_id}" if photo_id
|
21
21
|
|
22
|
-
|
23
|
-
response = Connection.new.get(:path => uri.path, :query => options.merge(:kind => "comment"), :headers => auth_header)
|
22
|
+
response = Connection.new.get(:path => path, :query => options.merge(:kind => "comment"), :headers => auth_header)
|
24
23
|
|
25
|
-
Presenter::CommentList.new(
|
24
|
+
Presenter::CommentList.new(response.parsed_response["feed"])
|
26
25
|
end
|
27
26
|
|
28
27
|
# Creates a comment for a photo.
|
@@ -42,10 +41,9 @@ module Picasa
|
|
42
41
|
|
43
42
|
template = Template.new("new_comment", params)
|
44
43
|
|
45
|
-
|
46
|
-
response = Connection.new.post(:path => uri.path, :body => template.render, :headers => auth_header)
|
44
|
+
response = Connection.new.post(:path => path, :body => template.render, :headers => auth_header)
|
47
45
|
|
48
|
-
Presenter::Comment.new(
|
46
|
+
Presenter::Comment.new(response.parsed_response["entry"])
|
49
47
|
end
|
50
48
|
|
51
49
|
# Removes a comment from given photo.
|
@@ -60,8 +58,8 @@ module Picasa
|
|
60
58
|
album_id = params.delete(:album_id) || raise(ArgumentError, "You must specify album_id")
|
61
59
|
photo_id = params.delete(:photo_id) || raise(ArgumentError, "You must specify photo_id")
|
62
60
|
|
63
|
-
|
64
|
-
Connection.new.delete(:path =>
|
61
|
+
path = "/data/entry/api/user/#{user_id}/albumid/#{album_id}/photoid/#{photo_id}/commentid/#{comment_id}"
|
62
|
+
Connection.new.delete(:path => path, :headers => auth_header)
|
65
63
|
true
|
66
64
|
end
|
67
65
|
alias :delete :destroy
|
data/lib/picasa/api/photo.rb
CHANGED
@@ -13,19 +13,19 @@ module Picasa
|
|
13
13
|
# @option options [String] :binary binary data (i.e. File.open("my-photo.png", "rb").read)
|
14
14
|
# @option options [String] :content_type ["image/jpeg", "image/png", "image/bmp", "image/gif"] content type of given image
|
15
15
|
def create(album_id, params = {})
|
16
|
-
file = params[:file_path] ? File.new(params.delete(:file_path)) :
|
16
|
+
file = params[:file_path] ? File.new(params.delete(:file_path)) : File::Null.new
|
17
17
|
params[:boundary] ||= "===============PicasaRubyGem=="
|
18
|
-
params[:title] ||=
|
19
|
-
params[:binary] ||=
|
20
|
-
params[:content_type] ||=
|
18
|
+
params[:title] ||= file.name || raise(ArgumentError.new("title must be specified"))
|
19
|
+
params[:binary] ||= file.binary || raise(ArgumentError.new("binary must be specified"))
|
20
|
+
params[:content_type] ||= file.content_type || raise(ArgumentError.new("content_type must be specified"))
|
21
21
|
|
22
22
|
template = Template.new(:new_photo, params)
|
23
23
|
headers = auth_header.merge({"Content-Type" => "multipart/related; boundary=\"#{params[:boundary]}\""})
|
24
24
|
|
25
|
-
|
26
|
-
response = Connection.new.post(:path =>
|
25
|
+
path = "/data/feed/api/user/#{user_id}/albumid/#{album_id}"
|
26
|
+
response = Connection.new.post(:path => path, :body => template.render, :headers => headers)
|
27
27
|
|
28
|
-
Presenter::Photo.new(
|
28
|
+
Presenter::Photo.new(response.parsed_response["entry"])
|
29
29
|
end
|
30
30
|
|
31
31
|
# Destroys given photo
|
@@ -40,8 +40,8 @@ module Picasa
|
|
40
40
|
# @raise [PreconditionFailedError] raised when ETag does not match
|
41
41
|
def destroy(album_id, photo_id, options = {})
|
42
42
|
headers = auth_header.merge({"If-Match" => options.fetch(:etag, "*")})
|
43
|
-
|
44
|
-
Connection.new.delete(:path =>
|
43
|
+
path = "/data/entry/api/user/#{user_id}/albumid/#{album_id}/photoid/#{photo_id}"
|
44
|
+
Connection.new.delete(:path => path, :headers => headers)
|
45
45
|
true
|
46
46
|
end
|
47
47
|
alias :delete :destroy
|
data/lib/picasa/api/tag.rb
CHANGED
@@ -19,10 +19,9 @@ module Picasa
|
|
19
19
|
path << "/albumid/#{album_id}" if album_id
|
20
20
|
path << "/photoid/#{photo_id}" if photo_id
|
21
21
|
|
22
|
-
|
23
|
-
response = Connection.new.get(:path => uri.path, :query => options.merge(:kind => "tag"), :headers => auth_header)
|
22
|
+
response = Connection.new.get(:path => path, :query => options.merge(:kind => "tag"), :headers => auth_header)
|
24
23
|
|
25
|
-
Presenter::TagList.new(
|
24
|
+
Presenter::TagList.new(response.parsed_response["feed"])
|
26
25
|
end
|
27
26
|
|
28
27
|
# Creates a tag for a photo.
|
@@ -42,10 +41,9 @@ module Picasa
|
|
42
41
|
|
43
42
|
template = Template.new("new_tag", params)
|
44
43
|
|
45
|
-
|
46
|
-
response = Connection.new.post(:path => uri.path, :body => template.render, :headers => auth_header)
|
44
|
+
response = Connection.new.post(:path => path, :body => template.render, :headers => auth_header)
|
47
45
|
|
48
|
-
Presenter::Tag.new(
|
46
|
+
Presenter::Tag.new(response.parsed_response["entry"])
|
49
47
|
end
|
50
48
|
|
51
49
|
# Removes a tag from given photo.
|
@@ -60,8 +58,8 @@ module Picasa
|
|
60
58
|
album_id = params.delete(:album_id) || raise(ArgumentError, "You must specify album_id")
|
61
59
|
photo_id = params.delete(:photo_id) || raise(ArgumentError, "You must specify photo_id")
|
62
60
|
|
63
|
-
|
64
|
-
Connection.new.delete(:path =>
|
61
|
+
path = "/data/entry/api/user/#{user_id}/albumid/#{album_id}/photoid/#{photo_id}/tag/#{tag_id}"
|
62
|
+
Connection.new.delete(:path => path, :headers => auth_header)
|
65
63
|
true
|
66
64
|
end
|
67
65
|
alias :delete :destroy
|
data/lib/picasa/client.rb
CHANGED
@@ -63,7 +63,7 @@ module Picasa
|
|
63
63
|
# @return [String]
|
64
64
|
def authenticate
|
65
65
|
response = Connection.new.post(
|
66
|
-
:host => API_AUTH_URL,
|
66
|
+
:host => HTTP::API_AUTH_URL,
|
67
67
|
:headers => {"Content-Type" => "application/x-www-form-urlencoded"},
|
68
68
|
:path => "/accounts/ClientLogin",
|
69
69
|
:body => Utils.inline_query(
|
@@ -71,7 +71,7 @@ module Picasa
|
|
71
71
|
"Email" => user_id,
|
72
72
|
"Passwd" => password,
|
73
73
|
"service" => "lh2",
|
74
|
-
"source" => "ruby-gem-v#{VERSION}"
|
74
|
+
"source" => "ruby-gem-picasa-v#{VERSION}"
|
75
75
|
)
|
76
76
|
)
|
77
77
|
|
data/lib/picasa/connection.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
require "net/https"
|
2
|
-
require "uri"
|
3
|
-
|
4
1
|
module Picasa
|
5
2
|
class Connection
|
6
3
|
# @param [Hash] params request arguments
|
@@ -9,13 +6,9 @@ module Picasa
|
|
9
6
|
# @option params [String] :query request url query
|
10
7
|
# @option params [String] :headers request headers
|
11
8
|
def get(params = {})
|
12
|
-
|
13
|
-
params[:headers]
|
14
|
-
params
|
15
|
-
|
16
|
-
path = path_with_query(params[:path], params[:query])
|
17
|
-
request = Net::HTTP::Get.new(path, headers.merge(params[:headers]))
|
18
|
-
handle_response(http(params[:host]).request(request))
|
9
|
+
# FIXME: how to add headers to default ones instead of replacing?
|
10
|
+
params[:headers] = Picasa::HTTP.headers.merge(params[:headers]) if params.has_key?(:headers)
|
11
|
+
exec_request(params) { |uri, options| HTTP.get(uri, options) }
|
19
12
|
end
|
20
13
|
|
21
14
|
# @param [Hash] params request arguments
|
@@ -25,12 +18,10 @@ module Picasa
|
|
25
18
|
# @option params [String] :query request url query
|
26
19
|
# @option params [String] :headers request headers
|
27
20
|
def post(params = {})
|
28
|
-
params[:host] ||= API_URL
|
29
21
|
params[:headers] ||= {}
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
handle_response(http(params[:host]).request(request))
|
22
|
+
params[:headers]["Content-Type"] ||= "application/atom+xml"
|
23
|
+
params[:headers] = Picasa::HTTP.headers.merge(params[:headers])
|
24
|
+
exec_request(params) { |uri, options| HTTP.post(uri, options) }
|
34
25
|
end
|
35
26
|
|
36
27
|
# @param [Hash] params request arguments
|
@@ -39,36 +30,24 @@ module Picasa
|
|
39
30
|
# @option params [String] :query request url query
|
40
31
|
# @option params [String] :headers request headers
|
41
32
|
def delete(params = {})
|
42
|
-
params[:
|
43
|
-
params
|
44
|
-
|
45
|
-
request = Net::HTTP::Delete.new(params[:path], headers.merge(params[:headers]))
|
46
|
-
handle_response(http(params[:host]).request(request))
|
47
|
-
end
|
48
|
-
|
49
|
-
def path_with_query(path, query = {})
|
50
|
-
path = path + "?" + Utils.inline_query(query) unless query.empty?
|
51
|
-
URI.parse(path).to_s
|
33
|
+
params[:headers] = Picasa::HTTP.headers.merge(params[:headers]) if params.has_key?(:headers)
|
34
|
+
exec_request(params) { |uri, options| HTTP.delete(uri, options) }
|
52
35
|
end
|
53
36
|
|
54
37
|
private
|
55
38
|
|
56
|
-
def
|
57
|
-
uri =
|
58
|
-
|
59
|
-
|
60
|
-
http = Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port, proxy_uri.user, proxy_uri.password).new(uri.host, uri.port)
|
61
|
-
else
|
62
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
63
|
-
end
|
64
|
-
http.use_ssl = true
|
65
|
-
http
|
39
|
+
def exec_request(params, &block)
|
40
|
+
uri = "#{params.delete(:host)}#{params.delete(:path)}"
|
41
|
+
params.delete_if { |key, value| value.nil? || value.empty? }
|
42
|
+
handle_response(yield(uri, params))
|
66
43
|
end
|
67
44
|
|
68
45
|
def handle_response(response)
|
69
46
|
case response.code.to_i
|
70
47
|
when 200...300
|
71
48
|
response
|
49
|
+
when 400
|
50
|
+
raise BadRequestError.new(response.body, response)
|
72
51
|
when 403
|
73
52
|
raise ForbiddenError.new(response.body, response)
|
74
53
|
when 404
|
@@ -79,21 +58,5 @@ module Picasa
|
|
79
58
|
raise ResponseError.new(response.body, response)
|
80
59
|
end
|
81
60
|
end
|
82
|
-
|
83
|
-
def headers
|
84
|
-
{
|
85
|
-
"User-Agent" => "ruby-gem-v#{VERSION}",
|
86
|
-
"GData-Version" => API_VERSION,
|
87
|
-
"Content-Type" => "application/atom+xml"
|
88
|
-
}
|
89
|
-
end
|
90
|
-
|
91
|
-
def proxy_uri
|
92
|
-
@proxy_uri ||= URI.parse(ENV["https_proxy"] || ENV["HTTPS_PROXY"])
|
93
|
-
end
|
94
|
-
|
95
|
-
def proxy?
|
96
|
-
ENV.has_key?("https_proxy") || ENV.has_key?("HTTPS_PROXY")
|
97
|
-
end
|
98
61
|
end
|
99
62
|
end
|
data/lib/picasa/exceptions.rb
CHANGED
data/lib/picasa/file.rb
CHANGED
data/lib/picasa/http.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require "httparty"
|
2
|
+
require "uri"
|
3
|
+
|
4
|
+
module Picasa
|
5
|
+
class HTTP
|
6
|
+
include HTTParty
|
7
|
+
|
8
|
+
API_URL = "https://picasaweb.google.com"
|
9
|
+
API_AUTH_URL = "https://www.google.com"
|
10
|
+
API_VERSION = "2"
|
11
|
+
|
12
|
+
def self.proxy
|
13
|
+
proxy_uri = URI.parse(ENV["https_proxy"] || ENV["HTTPS_PROXY"] || "")
|
14
|
+
[proxy_uri.host, proxy_uri.port, proxy_uri.user, proxy_uri.password]
|
15
|
+
end
|
16
|
+
|
17
|
+
format :json
|
18
|
+
default_params :alt => :json
|
19
|
+
|
20
|
+
headers "User-Agent" => "ruby-gem-picasa-v#{VERSION} (gzip)",
|
21
|
+
"GData-Version" => API_VERSION,
|
22
|
+
"Accept-Encoding" => "gzip, deflate"
|
23
|
+
|
24
|
+
base_uri API_URL
|
25
|
+
|
26
|
+
http_proxy *proxy
|
27
|
+
end
|
28
|
+
end
|