picasa 0.3.3 → 0.4.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 +1 -0
- data/.travis.yml +6 -1
- data/Gemfile +6 -0
- data/README.md +16 -24
- data/Rakefile +1 -1
- data/lib/picasa.rb +18 -12
- data/lib/picasa/api/album.rb +45 -0
- data/lib/picasa/client.rb +14 -0
- data/lib/picasa/connection.rb +86 -0
- data/lib/picasa/exceptions.rb +17 -0
- data/lib/picasa/presenter/album.rb +76 -0
- data/lib/picasa/presenter/album_list.rb +60 -0
- data/lib/picasa/presenter/author.rb +15 -0
- data/lib/picasa/presenter/base.rb +29 -0
- data/lib/picasa/presenter/link.rb +19 -0
- data/lib/picasa/presenter/media.rb +27 -0
- data/lib/picasa/presenter/photo.rb +79 -0
- data/lib/picasa/presenter/thumbnail.rb +19 -0
- data/lib/picasa/utils.rb +44 -0
- data/lib/picasa/version.rb +1 -1
- data/picasa.gemspec +4 -15
- data/test/api/album_test.rb +24 -0
- data/test/client_test.rb +14 -0
- data/test/connection_test.rb +71 -0
- data/test/fixtures/album/album-list-with-tag.txt +105 -0
- data/test/fixtures/album/album-list.txt +105 -0
- data/test/fixtures/album/album-show-with-max-results.txt +131 -0
- data/test/fixtures/album/album-show-with-tag-and-many-photos.txt +156 -0
- data/test/fixtures/album/album-show-with-tag-and-one-photo.txt +105 -0
- data/test/fixtures/album/album-show.txt +169 -0
- data/test/fixtures/auth/failure.txt +12 -0
- data/test/fixtures/auth/success.txt +14 -0
- data/test/fixtures/json.txt +435 -0
- data/test/fixtures/photo/photo-list-all-with-q.txt +556 -0
- data/test/fixtures/photo/photo-list-all.txt +623 -0
- data/test/fixtures/photo/photo-list-user.txt +388 -0
- data/test/fixtures/presenters/album_list.xml +88 -0
- data/test/fixtures/presenters/album_show.xml +152 -0
- data/test/fixtures/presenters/album_show_with_one_photo.xml +88 -0
- data/test/fixtures/tag/tag-list-album.txt +77 -0
- data/test/fixtures/tag/tag-list-photo.txt +72 -0
- data/test/fixtures/tag/tag-list.txt +68 -0
- data/test/helper.rb +12 -6
- data/test/presenter/album_list_test.rb +67 -0
- data/test/presenter/album_test.rb +173 -0
- data/test/presenter/author_test.rb +17 -0
- data/test/presenter/base_test.rb +27 -0
- data/test/presenter/link_test.rb +21 -0
- data/test/presenter/media_test.rb +29 -0
- data/test/presenter/photo_test.rb +81 -0
- data/test/presenter/thumbnail_test.rb +24 -0
- data/test/utils_test.rb +84 -0
- metadata +66 -31
- data/lib/picasa/config.rb +0 -15
- data/lib/picasa/web_albums.rb +0 -56
- data/test/fixtures/albums +0 -15
- data/test/fixtures/photos +0 -15
- data/test/test_config.rb +0 -12
- data/test/test_web_albums.rb +0 -44
@@ -0,0 +1,29 @@
|
|
1
|
+
module Picasa
|
2
|
+
module Presenter
|
3
|
+
class Base
|
4
|
+
include Utils
|
5
|
+
|
6
|
+
attr_reader :parsed_body
|
7
|
+
|
8
|
+
def initialize(parsed_body)
|
9
|
+
@parsed_body = parsed_body
|
10
|
+
end
|
11
|
+
|
12
|
+
def inspect
|
13
|
+
inspection = methods_to_inspect.map do |method|
|
14
|
+
value = send(method)
|
15
|
+
value = value.nil? ? "nil" : value.inspect
|
16
|
+
"#{method}: #{value}"
|
17
|
+
end.join(", ")
|
18
|
+
"#<#{self.class} #{inspection}>"
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def methods_to_inspect
|
24
|
+
# Ruby 1.8.7 workaround
|
25
|
+
(public_methods - Object.methods).map { |m| m.to_sym } - [:parsed_body]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "picasa/presenter/base"
|
2
|
+
|
3
|
+
module Picasa
|
4
|
+
module Presenter
|
5
|
+
class Link < Base
|
6
|
+
def rel
|
7
|
+
@rel ||= safe_retrieve(parsed_body, "rel")
|
8
|
+
end
|
9
|
+
|
10
|
+
def type
|
11
|
+
@type ||= safe_retrieve(parsed_body, "type")
|
12
|
+
end
|
13
|
+
|
14
|
+
def href
|
15
|
+
@href ||= safe_retrieve(parsed_body, "href")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "picasa/presenter/base"
|
2
|
+
|
3
|
+
module Picasa
|
4
|
+
module Presenter
|
5
|
+
class Media < Base
|
6
|
+
def thumbnails
|
7
|
+
@thumbnails ||= array_wrap(safe_retrieve(parsed_body, "thumbnail")).map { |thumbnail| Thumbnail.new(thumbnail) }
|
8
|
+
end
|
9
|
+
|
10
|
+
def credit
|
11
|
+
@credit ||= safe_retrieve(parsed_body, "credit")
|
12
|
+
end
|
13
|
+
|
14
|
+
def description
|
15
|
+
@description ||= safe_retrieve(parsed_body, "description")
|
16
|
+
end
|
17
|
+
|
18
|
+
def keywords
|
19
|
+
@keywords ||= safe_retrieve(parsed_body, "keywords")
|
20
|
+
end
|
21
|
+
|
22
|
+
def title
|
23
|
+
@title ||= safe_retrieve(parsed_body, "title", "__content__")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require "picasa/presenter/base"
|
2
|
+
|
3
|
+
module Picasa
|
4
|
+
module Presenter
|
5
|
+
class Photo < Base
|
6
|
+
def links
|
7
|
+
@links ||= safe_retrieve(parsed_body, "link").map { |link| Link.new(link) }
|
8
|
+
end
|
9
|
+
|
10
|
+
def media
|
11
|
+
@media ||= Media.new(safe_retrieve(parsed_body, "group"))
|
12
|
+
end
|
13
|
+
|
14
|
+
def id
|
15
|
+
@id ||= array_wrap(safe_retrieve(parsed_body, "id"))[1]
|
16
|
+
end
|
17
|
+
|
18
|
+
def published
|
19
|
+
@published ||= map_to_date(safe_retrieve(parsed_body, "published"))
|
20
|
+
end
|
21
|
+
|
22
|
+
def updated
|
23
|
+
@updated ||= map_to_date(safe_retrieve(parsed_body, "updated"))
|
24
|
+
end
|
25
|
+
|
26
|
+
def title
|
27
|
+
@title ||= safe_retrieve(parsed_body, "title")
|
28
|
+
end
|
29
|
+
|
30
|
+
def summary
|
31
|
+
@summary ||= safe_retrieve(parsed_body, "summary")
|
32
|
+
end
|
33
|
+
|
34
|
+
def album_id
|
35
|
+
@album_id ||= safe_retrieve(parsed_body, "albumid")
|
36
|
+
end
|
37
|
+
|
38
|
+
def access
|
39
|
+
@access ||= safe_retrieve(parsed_body, "access")
|
40
|
+
end
|
41
|
+
|
42
|
+
def width
|
43
|
+
@width ||= map_to_integer(safe_retrieve(parsed_body, "width"))
|
44
|
+
end
|
45
|
+
|
46
|
+
def height
|
47
|
+
@height ||= map_to_integer(safe_retrieve(parsed_body, "height"))
|
48
|
+
end
|
49
|
+
|
50
|
+
def size
|
51
|
+
@size ||= map_to_integer(safe_retrieve(parsed_body, "size"))
|
52
|
+
end
|
53
|
+
|
54
|
+
def checksum
|
55
|
+
@checksum ||= safe_retrieve(parsed_body, "checksum")
|
56
|
+
end
|
57
|
+
|
58
|
+
def timestamp
|
59
|
+
@timestamp ||= safe_retrieve(parsed_body, "timestamp")
|
60
|
+
end
|
61
|
+
|
62
|
+
def image_version
|
63
|
+
@image_version ||= map_to_integer(safe_retrieve(parsed_body, "imageVersion"))
|
64
|
+
end
|
65
|
+
|
66
|
+
def commenting_enabled
|
67
|
+
@commenting_enabled ||= map_to_boolean(safe_retrieve(parsed_body, "commentingEnabled"))
|
68
|
+
end
|
69
|
+
|
70
|
+
def comment_count
|
71
|
+
@comment_count ||= map_to_integer(safe_retrieve(parsed_body, "commentCount"))
|
72
|
+
end
|
73
|
+
|
74
|
+
def license
|
75
|
+
@license ||= safe_retrieve(parsed_body, "license", "__content__")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "picasa/presenter/base"
|
2
|
+
|
3
|
+
module Picasa
|
4
|
+
module Presenter
|
5
|
+
class Thumbnail < Base
|
6
|
+
def url
|
7
|
+
@url ||= safe_retrieve(parsed_body, "url")
|
8
|
+
end
|
9
|
+
|
10
|
+
def width
|
11
|
+
@width ||= map_to_integer(safe_retrieve(parsed_body, "width"))
|
12
|
+
end
|
13
|
+
|
14
|
+
def height
|
15
|
+
@height ||= map_to_integer(safe_retrieve(parsed_body, "height"))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/picasa/utils.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require "date"
|
2
|
+
|
3
|
+
module Picasa
|
4
|
+
module Utils
|
5
|
+
def safe_retrieve(hash, *keys)
|
6
|
+
return if !hash.kind_of?(Hash) || !hash.has_key?(keys.first)
|
7
|
+
|
8
|
+
if keys.size == 1
|
9
|
+
hash[keys.first]
|
10
|
+
elsif keys.size > 1
|
11
|
+
Utils.safe_retrieve(hash[keys.first], *keys[1..-1])
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Ported from ActiveSupport
|
16
|
+
def array_wrap(object)
|
17
|
+
if object.nil?
|
18
|
+
[]
|
19
|
+
elsif object.respond_to?(:to_ary)
|
20
|
+
object.to_ary || [object]
|
21
|
+
else
|
22
|
+
[object]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def map_to_integer(value)
|
27
|
+
value && value.to_i
|
28
|
+
end
|
29
|
+
|
30
|
+
def map_to_date(value)
|
31
|
+
value && DateTime.parse(value)
|
32
|
+
end
|
33
|
+
|
34
|
+
def map_to_boolean(value)
|
35
|
+
return unless value
|
36
|
+
case value
|
37
|
+
when "true" then true
|
38
|
+
when "false" then false
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
module_function :safe_retrieve, :array_wrap, :map_to_integer, :map_to_boolean, :map_to_date
|
43
|
+
end
|
44
|
+
end
|
data/lib/picasa/version.rb
CHANGED
data/picasa.gemspec
CHANGED
@@ -12,22 +12,11 @@ Gem::Specification.new do |gem|
|
|
12
12
|
gem.files = `git ls-files`.split("\n")
|
13
13
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
14
|
gem.name = "picasa"
|
15
|
-
gem.require_paths = [
|
15
|
+
gem.require_paths = ["lib"]
|
16
16
|
gem.version = Picasa::VERSION
|
17
17
|
|
18
|
-
gem.add_dependency "
|
19
|
-
gem.add_development_dependency "fakeweb"
|
18
|
+
gem.add_dependency "multi_xml"
|
20
19
|
|
21
|
-
gem.
|
22
|
-
|
23
|
-
|
24
|
-
Version 0.4 of this gem will be totaly rewritten.
|
25
|
-
Gem syntax will change with backwards incompatibilities.
|
26
|
-
If you don't want to update your code, please specify in your Gemfile:
|
27
|
-
gem "picasa", "~> 0.3.0"
|
28
|
-
|
29
|
-
Follow https://github.com/morgoth/picasa for updates.
|
30
|
-
|
31
|
-
*************************************************************************
|
32
|
-
}
|
20
|
+
gem.add_development_dependency "webmock"
|
21
|
+
gem.add_development_dependency "mocha"
|
33
22
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require "helper"
|
3
|
+
|
4
|
+
describe Picasa::API::Album do
|
5
|
+
describe "#list" do
|
6
|
+
it "gives correct parsed body fragment" do
|
7
|
+
stub_request(:get, "https://picasaweb.google.com/data/feed/api/user/w.wnetrzak").to_return(fixture("album/album-list.txt"))
|
8
|
+
|
9
|
+
album_list = Picasa::API::Album.new(:user_id => "w.wnetrzak").list
|
10
|
+
|
11
|
+
assert_equal 2, album_list.total_results
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#show" do
|
16
|
+
it "gives correct parsed body fragment" do
|
17
|
+
stub_request(:get, "https://picasaweb.google.com/data/feed/api/user/w.wnetrzak/albumid/5243667126168669553").to_return(fixture("album/album-show.txt"))
|
18
|
+
|
19
|
+
album_show = Picasa::API::Album.new(:user_id => "w.wnetrzak").show("5243667126168669553")
|
20
|
+
|
21
|
+
assert_equal "Wojciech Wnętrzak", album_show.author.name
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/test/client_test.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
describe Picasa::Client do
|
4
|
+
it "has credentials" do
|
5
|
+
client = Picasa::Client.new(:user_id => "john.doe")
|
6
|
+
assert_equal({:user_id => "john.doe"}, client.credentials)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "raises ArgumentError when user_id is missing" do
|
10
|
+
assert_raises(Picasa::ArgumentError, /user_id/) do
|
11
|
+
Picasa::Client.new
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require "helper"
|
3
|
+
|
4
|
+
describe Picasa::Connection do
|
5
|
+
before do
|
6
|
+
@connection = Picasa::Connection.new(:user_id => "joe.doe")
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#inline_params" do
|
10
|
+
it "converts params to inline style" do
|
11
|
+
params = @connection.inline_params({:alt => "json", :kind => "photo"})
|
12
|
+
# make ruby 1.8 tests pass
|
13
|
+
assert_equal "alt=json", params.split("&").sort[0]
|
14
|
+
assert_equal "kind=photo", params.split("&").sort[1]
|
15
|
+
end
|
16
|
+
|
17
|
+
it "changes param keys underscore to dash" do
|
18
|
+
params = @connection.inline_params({:max_results => 10})
|
19
|
+
assert_equal "max-results=10", params
|
20
|
+
end
|
21
|
+
|
22
|
+
it "escapes values" do
|
23
|
+
params = @connection.inline_params({:kind => "żółć"})
|
24
|
+
assert_equal "kind=%C5%BC%C3%B3%C5%82%C4%87", params
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "#path_with_params" do
|
29
|
+
it "returns path when no params provided" do
|
30
|
+
path = @connection.path_with_params("/data/feed/api")
|
31
|
+
assert_equal "/data/feed/api", path
|
32
|
+
end
|
33
|
+
|
34
|
+
it "adds params to path" do
|
35
|
+
path = @connection.path_with_params("/data/feed/api", {:q => "bomb"})
|
36
|
+
assert_equal "/data/feed/api?q=bomb", path
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "authentication" do
|
41
|
+
it "successfully authenticates" do
|
42
|
+
connection = Picasa::Connection.new(:user_id => "john.doe@domain.com", :password => "secret")
|
43
|
+
uri = URI.parse("/data/feed/api/user/#{connection.user_id}")
|
44
|
+
|
45
|
+
stub_request(:post, "https://www.google.com/accounts/ClientLogin").to_return(fixture("auth/success.txt"))
|
46
|
+
stub_request(:get, "https://picasaweb.google.com/data/feed/api/user/john.doe@domain.com").to_return(fixture("album/album-list.txt"))
|
47
|
+
|
48
|
+
connection.expects(:authenticate).returns(:result)
|
49
|
+
refute_nil connection.get(uri.path)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "raises ArgumentError when invalid email given" do
|
53
|
+
connection = Picasa::Connection.new(:user_id => "john.doe", :password => "secret")
|
54
|
+
|
55
|
+
assert_raises(Picasa::ArgumentError) do
|
56
|
+
connection.get("/")
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
it "raises an ResponseError when authentication failed" do
|
61
|
+
connection = Picasa::Connection.new(:user_id => "john.doe@domain.com", :password => "secret")
|
62
|
+
uri = URI.parse("/data/feed/api/user/#{connection.user_id}")
|
63
|
+
|
64
|
+
stub_request(:post, "https://www.google.com/accounts/ClientLogin").to_return(fixture("auth/failure.txt"))
|
65
|
+
|
66
|
+
assert_raises(Picasa::ResponseError) do
|
67
|
+
connection.get(uri.path)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
HTTP/1.1 200 OK
|
2
|
+
Expires: Mon, 05 Dec 2011 19:18:21 GMT
|
3
|
+
Date: Mon, 05 Dec 2011 19:18:21 GMT
|
4
|
+
Cache-Control: private, max-age=0, must-revalidate, no-transform
|
5
|
+
Set-Cookie: _rtok=JfOWbv9ilfmB; Path=/; Secure; HttpOnly
|
6
|
+
Set-Cookie: S=photos_html=gA8kpkA3OJJn4_tnnq1H7w; Domain=.google.com; Path=/; Secure; HttpOnly
|
7
|
+
Content-Type: application/atom+xml; charset=UTF-8; type=feed
|
8
|
+
Vary: Accept, X-GData-Authorization, GData-Version, Cookie
|
9
|
+
GData-Version: 2.0
|
10
|
+
ETag: W/"CEIFQngzeSp7ImA9WhRQEUw."
|
11
|
+
Last-Modified: Mon, 05 Dec 2011 19:15:13 GMT
|
12
|
+
X-Content-Type-Options: nosniff
|
13
|
+
X-Frame-Options: SAMEORIGIN
|
14
|
+
X-XSS-Protection: 1; mode=block
|
15
|
+
Server: GSE
|
16
|
+
Transfer-Encoding: chunked
|
17
|
+
|
18
|
+
<?xml version='1.0' encoding='UTF-8'?>
|
19
|
+
<feed xmlns='http://www.w3.org/2005/Atom' xmlns:gphoto='http://schemas.google.com/photos/2007' xmlns:media='http://search.yahoo.com/mrss/' xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/' xmlns:gd='http://schemas.google.com/g/2005' gd:etag='W/"CEIFQngzeSp7ImA9WhRQEUw."'>
|
20
|
+
<id>https://picasaweb.google.com/data/feed/user/106136347770555028022</id>
|
21
|
+
<updated>2011-12-05T19:15:13.681Z</updated>
|
22
|
+
<category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#user'/>
|
23
|
+
<title>106136347770555028022</title>
|
24
|
+
<subtitle/>
|
25
|
+
<icon>https://lh3.googleusercontent.com/-6ezHc54U8x0/AAAAAAAAAAI/AAAAAAAAAAA/PBuxm7Ehn6E/s64-c/106136347770555028022.jpg</icon>
|
26
|
+
<link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://picasaweb.google.com/data/feed/api/user/106136347770555028022'/>
|
27
|
+
<link rel='alternate' type='text/html' href='https://picasaweb.google.com/106136347770555028022'/>
|
28
|
+
<link rel='http://schemas.google.com/photos/2007#slideshow' type='application/x-shockwave-flash' href='https://picasaweb.google.com/s/c/bin/slideshow.swf?host=picasaweb.google.com&RGB=0x000000&feed=https%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2F106136347770555028022%3Falt%3Drss'/>
|
29
|
+
<link rel='self' type='application/atom+xml' href='https://picasaweb.google.com/data/feed/api/user/106136347770555028022?start-index=1&max-results=1000&tag=ziemniaki'/>
|
30
|
+
<author>
|
31
|
+
<name>Wojciech Wnętrzak</name>
|
32
|
+
<uri>https://picasaweb.google.com/106136347770555028022</uri>
|
33
|
+
</author>
|
34
|
+
<generator version='1.00' uri='http://picasaweb.google.com/'>Picasaweb</generator>
|
35
|
+
<openSearch:totalResults>2</openSearch:totalResults>
|
36
|
+
<openSearch:startIndex>1</openSearch:startIndex>
|
37
|
+
<openSearch:itemsPerPage>1000</openSearch:itemsPerPage>
|
38
|
+
<gphoto:user>106136347770555028022</gphoto:user>
|
39
|
+
<gphoto:nickname>Wojciech Wnętrzak</gphoto:nickname>
|
40
|
+
<gphoto:thumbnail>https://lh3.googleusercontent.com/-6ezHc54U8x0/AAAAAAAAAAI/AAAAAAAAAAA/PBuxm7Ehn6E/s64-c/106136347770555028022.jpg</gphoto:thumbnail>
|
41
|
+
<entry gd:etag='"YDsqeyI."'>
|
42
|
+
<id>https://picasaweb.google.com/data/entry/user/106136347770555028022/albumid/5243667126168669553</id>
|
43
|
+
<published>2008-09-08T07:00:00.000Z</published>
|
44
|
+
<updated>2011-12-05T19:12:04.255Z</updated>
|
45
|
+
<category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#album'/>
|
46
|
+
<title>test2</title>
|
47
|
+
<summary/>
|
48
|
+
<rights>public</rights>
|
49
|
+
<link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://picasaweb.google.com/data/feed/api/user/106136347770555028022/albumid/5243667126168669553'/>
|
50
|
+
<link rel='alternate' type='text/html' href='https://picasaweb.google.com/106136347770555028022/Test2'/>
|
51
|
+
<link rel='self' type='application/atom+xml' href='https://picasaweb.google.com/data/entry/api/user/106136347770555028022/albumid/5243667126168669553'/>
|
52
|
+
<author>
|
53
|
+
<name>Wojciech Wnętrzak</name>
|
54
|
+
<uri>https://picasaweb.google.com/106136347770555028022</uri>
|
55
|
+
</author>
|
56
|
+
<gphoto:id>5243667126168669553</gphoto:id>
|
57
|
+
<gphoto:name>Test2</gphoto:name>
|
58
|
+
<gphoto:location/>
|
59
|
+
<gphoto:access>public</gphoto:access>
|
60
|
+
<gphoto:timestamp>1220857200000</gphoto:timestamp>
|
61
|
+
<gphoto:numphotos>3</gphoto:numphotos>
|
62
|
+
<gphoto:user>106136347770555028022</gphoto:user>
|
63
|
+
<gphoto:nickname>Wojciech Wnętrzak</gphoto:nickname>
|
64
|
+
<media:group>
|
65
|
+
<media:content url='https://lh6.googleusercontent.com/-u_2FJXbbliU/SMU_eBetTXE/AAAAAAAAAkU/3XThNVnAM-4/Test2.jpg' type='image/jpeg' medium='image'/>
|
66
|
+
<media:credit>Wojciech Wnętrzak</media:credit>
|
67
|
+
<media:description type='plain'/>
|
68
|
+
<media:keywords/>
|
69
|
+
<media:thumbnail url='https://lh6.googleusercontent.com/-u_2FJXbbliU/SMU_eBetTXE/AAAAAAAAAkU/3XThNVnAM-4/s160-c/Test2.jpg' height='160' width='160'/>
|
70
|
+
<media:title type='plain'>test2</media:title>
|
71
|
+
</media:group>
|
72
|
+
</entry>
|
73
|
+
<entry gd:etag='"YDUqeyI."'>
|
74
|
+
<id>https://picasaweb.google.com/data/entry/user/106136347770555028022/albumid/5239555770355467953</id>
|
75
|
+
<published>2008-08-28T07:00:00.000Z</published>
|
76
|
+
<updated>2011-07-30T07:16:41.444Z</updated>
|
77
|
+
<category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#album'/>
|
78
|
+
<title>test</title>
|
79
|
+
<summary>Opis albumu</summary>
|
80
|
+
<rights>public</rights>
|
81
|
+
<link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://picasaweb.google.com/data/feed/api/user/106136347770555028022/albumid/5239555770355467953'/>
|
82
|
+
<link rel='alternate' type='text/html' href='https://picasaweb.google.com/106136347770555028022/Test'/>
|
83
|
+
<link rel='self' type='application/atom+xml' href='https://picasaweb.google.com/data/entry/api/user/106136347770555028022/albumid/5239555770355467953'/>
|
84
|
+
<author>
|
85
|
+
<name>Wojciech Wnętrzak</name>
|
86
|
+
<uri>https://picasaweb.google.com/106136347770555028022</uri>
|
87
|
+
</author>
|
88
|
+
<gphoto:id>5239555770355467953</gphoto:id>
|
89
|
+
<gphoto:name>Test</gphoto:name>
|
90
|
+
<gphoto:location>gdzieś</gphoto:location>
|
91
|
+
<gphoto:access>public</gphoto:access>
|
92
|
+
<gphoto:timestamp>1219906800000</gphoto:timestamp>
|
93
|
+
<gphoto:numphotos>6</gphoto:numphotos>
|
94
|
+
<gphoto:user>106136347770555028022</gphoto:user>
|
95
|
+
<gphoto:nickname>Wojciech Wnętrzak</gphoto:nickname>
|
96
|
+
<media:group>
|
97
|
+
<media:content url='https://lh6.googleusercontent.com/-ZqXRf3HicvI/SLakNnjixrE/AAAAAAAAAkc/3EAZ0eF3-CQ/Test.jpg' type='image/jpeg' medium='image'/>
|
98
|
+
<media:credit>Wojciech Wnętrzak</media:credit>
|
99
|
+
<media:description type='plain'>Opis albumu</media:description>
|
100
|
+
<media:keywords/>
|
101
|
+
<media:thumbnail url='https://lh6.googleusercontent.com/-ZqXRf3HicvI/SLakNnjixrE/AAAAAAAAAkc/3EAZ0eF3-CQ/s160-c/Test.jpg' height='160' width='160'/>
|
102
|
+
<media:title type='plain'>test</media:title>
|
103
|
+
</media:group>
|
104
|
+
</entry>
|
105
|
+
</feed>
|