Ответ 1
У меня есть хорошие новости и плохие новости для вас. Хорошей новостью является то, что это возможно, плохая новость заключается в том, что существует сумасшедшее количество предостережений, и это не гарантирует, что вы сможете получить информацию, которую вы хотите для каждой фотографии.
Шаг 1: Информация пользователя
Когда вы запрашиваете информацию о месте из API места, вы получаете массив фотографий. На каждой фотографии есть строки url
, width
, a height
и html_attributions
. Если мое понимание верное, что последняя строка будет пустой, если владелец заведения загрузил фотографии самостоятельно, но в случае, если это сторонний контент, он будет содержать ссылку, которую вы должны включить на страницу с атрибуцией пользователя. Чтобы использовать первую фотографию для Google HQ из вашего вопроса, мы получаем следующую информацию.
{
url: 'https://lh5.googleusercontent.com/-7mKc4261Edg/VB01Tfy2OWI/AAAAAAAADII/BHs-SIudu64/s0/20140109_152438.jpg',
width: 2322,
height: 4128,
html_attributions: '<a href="#" onclick="location.href='https://plus.google.com/107252953636064841537'; return false;">William Stewart</a>'
}
В большинстве случаев (если не все) это будет ссылка на учетную запись пользователя Google Plus, из которой мы можем извлечь userId
. В этом случае 107252953636064841537
Шаг 2: Поиск фотографии
Теперь логический следующий шаг, похоже, будет идти в Google+ API, но, оказывается, они до сих пор не включили способ доступа к Google+ Фото. Удивительно, но веб-API Picasa по-прежнему работает и, похоже, все еще возвращает обновленные данные. Итак, мы можем запросить все альбомы для этого пользователя с помощью следующего URL-адреса, используя найденный выше userId
(Google любезно использовал те же идентификаторы или просто поддерживает идентификаторы пользователей Google+).
https://picasaweb.google.com/data/feed/api/user/107252953636064841537
В нем есть один <entry>
для каждого альбома, который содержит пользователя
<feed>
[...]
<entry>
[...]
<link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="#" onclick="location.href='https://picasaweb.google.com/data/feed/api/user/107252953636064841537/albumid/6061059278861279377'; return false;" />
[...]
</entry>
</feed>
Вам нужно будет запросить каждый канал альбома, чтобы получить список фотографий, запросив URL-адрес в поле href
. Это вернет другой XML-документ, который содержит следующую информацию для каждой фотографии:
<entry>
<id>https://picasaweb.google.com/data/entry/api/user/107252953636064841537/albumid/6061059278861279377/photoid/6061059282579110242</id>
<published>2014-09-20T08:05:33.000Z</published>
<updated>2014-10-08T20:11:49.889Z</updated>
<category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/photos/2007#photo" />
<title type="text">20140109_152438.jpg</title>
<summary type="text" />
<content type="image/jpeg" src="https://lh3.googleusercontent.com/-7mKc4261Edg/VB01Tfy2OWI/AAAAAAAADII/BHs-SIudu64/20140109_152438.jpg" />
<link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="#" onclick="location.href='https://picasaweb.google.com/data/feed/api/user/107252953636064841537/albumid/6061059278861279377/photoid/6061059282579110242'; return false;" />
<link rel="alternate" type="text/html" href="#" onclick="location.href='https://picasaweb.google.com/107252953636064841537/September20201402#6061059282579110242'; return false;" />
<link rel="http://schemas.google.com/photos/2007#canonical" type="text/html" href="#" onclick="location.href='https://picasaweb.google.com/lh/photo/CpdWkfaimetJbSbFK2cojdMTjNZETYmyPJy0liipFm0'; return false;" />
<link rel="self" type="application/atom+xml" href="#" onclick="location.href='https://picasaweb.google.com/data/entry/api/user/107252953636064841537/albumid/6061059278861279377/photoid/6061059282579110242'; return false;" />
<link rel="http://schemas.google.com/photos/2007#report" type="text/html" href="#" onclick="location.href='https://picasaweb.google.com/lh/reportAbuse?uname=107252953636064841537&aid=6061059278861279377&iid=6061059282579110242'; return false;" />
<gphoto:id>6061059282579110242</gphoto:id>
<gphoto:version>7</gphoto:version>
<gphoto:position>2.0</gphoto:position>
<gphoto:albumid>6061059278861279377</gphoto:albumid>
<gphoto:access>public</gphoto:access>
<gphoto:width>4128</gphoto:width>
<gphoto:height>2322</gphoto:height>
<gphoto:size>1756108</gphoto:size>
<gphoto:client />
<gphoto:checksum />
<gphoto:timestamp>1389241477000</gphoto:timestamp>
<gphoto:imageVersion>3202</gphoto:imageVersion>
<gphoto:commentingEnabled>true</gphoto:commentingEnabled>
<gphoto:commentCount>0</gphoto:commentCount>
<gphoto:streamId>cs_01_3c7bd15d390e38745feedfd0c8ec076f</gphoto:streamId>
<gphoto:license id="0" name="All Rights Reserved" url="">ALL_RIGHTS_RESERVED</gphoto:license>
<gphoto:shapes faces="done" />
<exif:tags>
<exif:fstop>2.2</exif:fstop>
<exif:make>SAMSUNG</exif:make>
<exif:model>GT-I9505</exif:model>
<exif:exposure>0.030303031</exif:exposure>
<exif:flash>false</exif:flash>
<exif:focallength>4.2</exif:focallength>
<exif:iso>80</exif:iso>
<exif:time>1389281077000</exif:time>
<exif:imageUniqueID>721da79fdf344aa70000000000000000</exif:imageUniqueID>
</exif:tags>
<media:group>
<media:content url="https://lh3.googleusercontent.com/-7mKc4261Edg/VB01Tfy2OWI/AAAAAAAADII/BHs-SIudu64/20140109_152438.jpg" height="288" width="512" type="image/jpeg" medium="image" />
<media:credit>William Stewart</media:credit>
<media:description type="plain" />
<media:keywords />
<media:thumbnail url="https://lh3.googleusercontent.com/-7mKc4261Edg/VB01Tfy2OWI/AAAAAAAADII/BHs-SIudu64/s72/20140109_152438.jpg" height="41" width="72" />
<media:thumbnail url="https://lh3.googleusercontent.com/-7mKc4261Edg/VB01Tfy2OWI/AAAAAAAADII/BHs-SIudu64/s144/20140109_152438.jpg" height="81" width="144" />
<media:thumbnail url="https://lh3.googleusercontent.com/-7mKc4261Edg/VB01Tfy2OWI/AAAAAAAADII/BHs-SIudu64/s288/20140109_152438.jpg" height="162" width="288" />
<media:title type="plain">20140109_152438.jpg</media:title>
</media:group>
</entry>
Обратите внимание, что атрибут src
тега <content>
равен url
от первого вызова API, за исключением поддомена, который вы должны игнорировать (что отличается из-за балансировки нагрузки). Также обратите внимание, как вся доступная информация о фотографии отображается в документе xml и как она содержит все данные exif
, которые были удалены из самой фотографии. Очевидно, что не все фотографии содержат информацию GPS, и приведенный выше пример. Если, однако, фотография содержит информацию GPS, она будет включена в этот документ либо в данные exif, либо в тег <georss:where>
.
Заключение
Чтобы найти информацию, которую вы ищете, вам нужно будет пропустить все альбомы пользователей, а затем выполнить поиск фотографии с похожим url
с тем, который вы получили от API Google Адресов. Самые большие предостережения в том, что он будет работать только для фотографий из Google+, что требует много запросов и что веб-интерфейс Picasa, вероятно, будет прекращен в какой-то момент, хотя в этот момент по крайней мере часть его функций будет перенесена в API Google+ Photos (хотя Google снова планирует сделать Google Фото автономной службой, поэтому в этом случае ее можно просто переименовать). В любом случае, все считают, что я удивлен, что это возможно вообще, поскольку API Google Place не создан для всего этого, поэтому в этом смысле вам повезло, я думаю.