javascript - usar - Vistas de Google: obtenga detalles de las fotos de una región
google fotos papelera (1)
Tengo buenas y malas noticias para ti. La buena noticia es que es posible, la mala noticia es que hay una gran cantidad de advertencias y no se garantiza que pueda obtener la información que desea para cada foto.
Paso 1: La información del usuario.
Cuando solicitas información del lugar desde la API del lugar, recibes una gran variedad de fotos. Cada foto tiene una url
, un width
, una height
y una cadena html_attributions
. Si entiendo bien, la última cadena estará vacía si el propietario del establecimiento subió las fotos, pero en caso de que sea contenido de terceros, contendrá un enlace que deberá incluir en la página con la atribución del usuario. Para utilizar la primera foto de Google HQ de su pregunta, obtenemos la siguiente información
{
url: ''https://lh5.googleusercontent.com/-7mKc4261Edg/VB01Tfy2OWI/AAAAAAAADII/BHs-SIudu64/s0/20140109_152438.jpg'',
width: 2322,
height: 4128,
html_attributions: ''<a href="https://plus.google.com/107252953636064841537">William Stewart</a>''
}
En la gran mayoría de los casos (si no todos) este será un enlace a una cuenta de usuario de Google Plus, de la que podemos extraer el userId
. En este caso 107252953636064841537
Paso 2: encontrar la foto
Ahora, el siguiente paso lógico parece ir a la API de Google+, pero resulta que todavía no han incluido una forma de acceder a las Fotos de Google+. Sorprendentemente, sin embargo, la API web de Picasa todavía está en funcionamiento y parece que todavía devuelve datos actualizados. Entonces, a continuación, podemos solicitar todos los álbumes para este usuario a través de la siguiente url usando el userId
que encontramos arriba (Google ha utilizado amablemente los mismos ID o simplemente admite ID de usuario de Google+).
https://picasaweb.google.com/data/feed/api/user/107252953636064841537
Allí hay una única <entry>
para cada álbum que tiene el usuario que contiene lo siguiente
<feed>
[...]
<entry>
[...]
<link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="https://picasaweb.google.com/data/feed/api/user/107252953636064841537/albumid/6061059278861279377" />
[...]
</entry>
</feed>
Necesitará solicitar cada feed de álbum para obtener una lista de fotos solicitando la url en el campo href
. Esto devolverá otro documento XML que contiene la siguiente información para cada foto:
<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="https://picasaweb.google.com/data/feed/api/user/107252953636064841537/albumid/6061059278861279377/photoid/6061059282579110242" />
<link rel="alternate" type="text/html" href="https://picasaweb.google.com/107252953636064841537/September20201402#6061059282579110242" />
<link rel="http://schemas.google.com/photos/2007#canonical" type="text/html" href="https://picasaweb.google.com/lh/photo/CpdWkfaimetJbSbFK2cojdMTjNZETYmyPJy0liipFm0" />
<link rel="self" type="application/atom+xml" href="https://picasaweb.google.com/data/entry/api/user/107252953636064841537/albumid/6061059278861279377/photoid/6061059282579110242" />
<link rel="http://schemas.google.com/photos/2007#report" type="text/html" href="https://picasaweb.google.com/lh/reportAbuse?uname=107252953636064841537&aid=6061059278861279377&iid=6061059282579110242" />
<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>
Observe cómo el atributo src
de la etiqueta <content>
es igual a la url
de la primera llamada a la API, excepto por el subdominio que debe ignorar (que es diferente debido al equilibrio de carga). También tenga en cuenta cómo toda la información disponible sobre la foto se expone en el documento xml y cómo contiene todos los datos exif
que se han eliminado de la foto. Obviamente, no todas las fotos contienen información de GPS, y la anterior es un ejemplo de eso. Sin embargo, si una foto contiene información de GPS, se incluirá en ese documento en los datos exif y / o en una <georss:where>
.
Concluyendo
Para encontrar la información que está buscando, debe recorrer todos los álbumes de los usuarios y luego buscar una foto con una url
similar a la que recibió de la API de Google Places. Las advertencias más importantes son que solo funcionará para fotos de Google+, que requiere una gran cantidad de solicitudes y que es probable que la API web de Picasa se suspenda en algún momento, aunque en ese punto al menos una parte de su funcionalidad será portada. a la API de Fotos de Google+ (aunque Google está planificando nuevamente para hacer de Google Fotos un servicio independiente , por lo que en ese caso podría ser simplemente renombrado). De cualquier manera, todos consideraron que estoy sorprendido de que sea posible ya que la API de Google Place no está hecha para todo esto, así que en ese sentido, supongo que tienes mucha suerte.
Buscando una manera de imitar la lógica de la API de Flickr para usar las vistas de Google.
En Flickr puedo llamar al método flickr.photos.search
y obtener todas las fotos para una ubicación específica, como:
La respuesta:
<?xml version="1.0" encoding="utf-8" ?>
<rsp stat="ok">
<photos page="1" pages="7673" perpage="100" total="767266">
<photo id="17856165012" owner="91887621@N04" secret="6d2acf3b87" server="7690" farm="8" title="Amsterdam Canal" ispublic="1" isfriend="0" isfamily="0" />
<photo id="17830118816" owner="131827681@N05" secret="ee8b55fc5e" server="7756" farm="8" title="IMG_2209" ispublic="1" isfriend="0" isfamily="0" />
<photo id="17668921970" owner="131827681@N05" secret="bd0061e638" server="8825" farm="9" title="IMG_2210" ispublic="1" isfriend="0" isfamily="0" />
<photo id="17853550052" owner="131827681@N05" secret="c834e9a7eb" server="7738" farm="8" title="IMG_2212" ispublic="1" isfriend="0" isfamily="0" />
<photo id="17856935911" owner="131827681@N05" secret="39be86bb4b" server="7723" farm="8" title="IMG_2213" ispublic="1" isfriend="0" isfamily="0" />
<photo id="17233920844" owner="131827681@N05" secret="8be2333be3" server="7658" farm="8" title="IMG_2214" ispublic="1" isfriend="0" isfamily="0" />
<photo id="17853542232" owner="131827681@N05" secret="8f19ee65c2" server="7747" farm="8" title="IMG_2215" ispublic="1" isfriend="0" isfamily="0" />
<photo id="17856926911" owner="131827681@N05" secret="bc0fb6dbc1" server="7667"....
Luego llamo a flickr.photos.getInfo
para cada ID de foto para obtener la información de la foto
La respuesta:
<?xml version="1.0" encoding="utf-8" ?>
<rsp stat="ok">
<photo id="17853542232" secret="8f19ee65c2" server="7747" farm="8" dateuploaded="1432037570" isfavorite="0" license="0" safety_level="0" rotation="90" originalsecret="7848968317" originalformat="jpg" views="2" media="photo">
<owner nsid="131827681@N05" username="trashhunters" realname="Trash Hunters" location="" iconserver="7748" iconfarm="8" path_alias="trashhunters" />
<title>IMG_2215</title>
<description />
<visibility ispublic="1" isfriend="0" isfamily="0" />
<dates posted="1432037570" taken="2015-05-17 13:47:32" takengranularity="0" takenunknown="0" lastupdate="1432040217" />
<editability cancomment="0" canaddmeta="0" />
<publiceditability cancomment="1" canaddmeta="0" />
<usage candownload="1" canblog="0" canprint="0" canshare="1" />
<comments>0</comments>
<notes />
<people haspeople="0" />
<tags>
<tag id="131822341-17853542232-563433" author="131827681@N05" authorname="trashhunters" raw="blikje" machine_tag="0">blikje</tag>
<tag id="131822341-17853542232-81138" author="131827681@N05" authorname="trashhunters" raw="fanta" machine_tag="0">fanta</tag>
</tags>
<location latitude="52.367408" longitude="4.862769" accuracy="16" context="0" place_id="xQ4tawtWUL1NrOY" woeid="727232">
<locality place_id="xQ4tawtWUL1NrOY" woeid="727232">Amsterdam</locality>
<county place_id="nmbnjNtQUL_iOTHdPg" woeid="12592040">Amsterdam</county>
<region place_id="F86XYCBTUb6DPzhs" woeid="2346379">North Holland</region>
<country place_id="Exbw8apTUb6236fOVA" woeid="23424909">Netherlands</country>
</location>
<geoperms ispublic="1" iscontact="0" isfriend="0" isfamily="0" />
<urls>
<url type="photopage">https://www.flickr.com/photos/trashhunters/17853542232/</url>
</urls>
</photo>
</rsp>
Estoy interesado en la longitud , latitud , tiempo empleado e información del usuario . He mirado a través de la API de Google Places pero no pude encontrar una manera.
Actualización: para que quede claro, he encontrado la solicitud de detalles del lugar en la API de Google, pero el resultado de las fotos no contiene la ubicación ni los datos del usuario:
..."photos" : [
{
"height" : 2322,
"html_attributions" : [
"/u003ca href=/"//lh5.googleusercontent.com/-QO7PKijayYw/AAAAAAAAAAI/AAAAAAAAAZc/fTtRm3YH3cA/s100-p-k/photo.jpg/"/u003eWilliam Stewart/u003c/a/u003e"
],
"raw_reference" : {
"fife_url" : "https://lh3.googleusercontent.com/-7mKc4261Edg/VB01Tfy2OWI/AAAAAAAADII/BHs-SIudu64/k/"
},
"width" : 4128
},...
Cualquier consejo sería apreciado :)