{"id":2089,"date":"2011-04-06T20:00:25","date_gmt":"2011-04-06T18:00:25","guid":{"rendered":"http:\/\/blogs.wittwer.fr\/whiler\/?p=2089"},"modified":"2023-03-12T15:01:02","modified_gmt":"2023-03-12T14:01:02","slug":"wlatitude","status":"publish","type":"post","link":"https:\/\/blogs.wittwer.fr\/whiler\/2011\/04\/06\/wlatitude\/","title":{"rendered":"wLatitude"},"content":{"rendered":"<p><a href=\"http:\/\/fr.wikipedia.org\/wiki\/Google_Latitude\" rel=\"glossary\" target=\"_blank\" title=\"Wikipedia, D&eacute;finition de&nbsp;: Google Latitude\" style=\"\" >Google Latitude<\/a><sup style=\"font-family: Georgia, Times New Roman, Serif; font-weight: bold; color: #AAAAAA\" ><em>W<\/em><\/sup> propose des applications, des services et une <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Interface_de_programmation\" rel=\"glossary\" target=\"_blank\" title=\"Wikipedia, D&eacute;finition de&nbsp;: API\" style=\"\" >API<\/a><sup style=\"font-family: Georgia, Times New Roman, Serif; font-weight: bold; color: #AAAAAA\" ><em>W<\/em><\/sup> permettant d&rsquo;effectuer de la g\u00e9olocalisation.<\/p>\n<p>Avec un t\u00e9l\u00e9phone Android par exemple, la position peut se mettre \u00e0 jour de fa\u00e7on automatique.<\/p>\n<p>Or, j&rsquo;ai eu envie de voir comment on pouvait interagir avec cette API depuis <a target=\"_blank\" href=\"https:\/\/www.embarcadero.com\/fr\/products\/delphi\" rel=\"noopener\">Delphi<\/a>.<br \/>\nMais comme par hasard, Latitude est un service qui utilise sa propre authentification&#8230; du coup, je n&rsquo;ai pas pu r\u00e9utiliser le code que j&rsquo;avais \u00e9crit lors de la r\u00e9daction de <a href=\"\/whiler\/2010\/12\/12\/delphi-google-contacts\/\">cet article<\/a>&nbsp;! <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/sad.gif\" alt=\":(\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <\/p>\n<p>Apr\u00e8s avoir pass\u00e9 un bon moment \u00e0 comprendre les diff\u00e9rents aller-retours qu&rsquo;il fallait effectuer pour s&rsquo;authentifier, j&rsquo;y suis finalement parvenu&nbsp;! <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/tmi.gif\" alt=\"(tmi)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><br \/>\n<center><div id=\"attachment_2093\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2011\/04\/wLatitude.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2093\" src=\"\/whiler\/wp-content\/uploads\/2011\/04\/wLatitude-300x214.jpg\" alt=\"wLatitude\" title=\"wLatitude\" width=\"300\" height=\"214\" class=\"size-medium wp-image-2093\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/04\/wLatitude-300x214.jpg 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/04\/wLatitude.jpg 998w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-2093\" class=\"wp-caption-text\">wLatitude<\/p><\/div><\/center><br \/>\n<!--more--><br \/>\nPour cela, j&rsquo;ai utilis\u00e9 l&rsquo;<a target=\"_blank\" href=\"https:\/\/googlecodesamples.com\/oauth_playground\/\" rel=\"noopener\">interface Web de test d&rsquo;authentification de Google<\/a> qui m&rsquo;a permis de mieux comprendre le m\u00e9canisme d&rsquo;\u00e9change \u00e0 effectuer.<br \/>\n<a target=\"_blank\" href=\"https:\/\/groups.google.com\/group\/google-latitude-api\/browse_thread\/thread\/d0efbc90d5080d94\/9f18ce90194a9c12\" rel=\"noopener\">Ce message<\/a> post\u00e9 sur le groupe de discussion m&rsquo;a \u00e9galement permis d&rsquo;y voir plus clair.<br \/>\n&nbsp;<br \/>\nPour y parvenir, j&rsquo;ai cr\u00e9\u00e9 un nouveau projet Delphi, dans lequel j&rsquo;ai ajout\u00e9 un <em>TIdHTTP<\/em> pour les requ\u00eates HTTP n&rsquo;ayant pas d&rsquo;interaction avec l&rsquo;utilisateur, un <em>TIdSSLIOHandlerSocketOpenSSL<\/em> pour les connexions SSL, et un <em>TWebBrowser<\/em> pour les connexions n\u00e9cessitant une interaction de l&rsquo;utilisateur (que j&rsquo;ai par la suite automatis\u00e9e comme un porc <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/happy.gif\" alt=\"(lol)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> ) et l&rsquo;affichage de la position courante via Google Maps&#8230;<br \/>\n&nbsp;<br \/>\nMon code est tr\u00e8s facilement am\u00e9liorable&#8230; c&rsquo;est un projet brouillon qui m&rsquo;a simplement d\u00e9montr\u00e9 que c&rsquo;\u00e9tait possible&nbsp;! Il permet aujourd&rsquo;hui (demain, s&rsquo;il change des trucs dans l&rsquo;API, leurs pages web, ce n&rsquo;est pas certain qu&rsquo;il fonctionnera sans modification \u00e0 apporter) de r\u00e9cup\u00e9rer sa position actuelle et\/ou d&rsquo;en d\u00e9finir une manuellement&#8230; Tout cela en s&rsquo;\u00e9tant bien s\u00fbr correctement authentifi\u00e9&nbsp;!<br \/>\nPar ailleurs, lors de \u00e9changes, les serveurs de Google me renvoient parfois des erreurs <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/worry.gif\" alt=\":s\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/>  &nbsp;; c&rsquo;est pourquoi, l&rsquo;application tente automatiquement de se reconnecter (limit\u00e9 \u00e0 5 fois)&#8230;<br \/>\nUn <em>TSpeedButton<\/em> est disponible dans l&rsquo;application pour acc\u00e9der \u00e0 <a target=\"_blank\" href=\"https:\/\/www.google.com\/accounts\/ManageDomains\" rel=\"noopener\">la page Web de Google qui permet de se cr\u00e9er un domaine<\/a> afin de pouvoir sp\u00e9cifier les param\u00e8tres n\u00e9cessaires \u00e0 l&rsquo;utilisation de l&rsquo;API.<br \/>\n&nbsp;<br \/>\nSi cela vous int\u00e9resse, vous pouvez t\u00e9l\u00e9charger les sources de l&rsquo;application depuis <a href=\"\/whiler\/wp-content\/uploads\/2011\/04\/wlatitude.zip\">ce lien<\/a>.<\/p>\n<blockquote><p>Les sources ont \u00e9t\u00e9 cod\u00e9es avec Delphi XE.<\/p><\/blockquote>\n<p>De plus, je ne maitrise pas la fa\u00e7on d&rsquo;encoder pour obtenir le format attendu par Google&#8230; si vous corrigez des bugs, am\u00e9liorez le code, n&rsquo;h\u00e9sitez pas \u00e0 laisser un commentaire <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/wink.gif\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <\/p>\n<p><center><a href=\"\/whiler\/category\/computer\/delphi\/\" title=\"Articles concernant Delphi\"><img loading=\"lazy\" decoding=\"async\" src=\"\/whiler\/wp-content\/uploads\/2009\/10\/built_with_delphi.png\" alt=\"D\u00e9velopp\u00e9 en Delphi\" title=\"D\u00e9velopp\u00e9 en Delphi\" width=\"125\" height=\"51\" class=\"size-full wp-image-2721\" \/><\/a><\/center><\/p>\n<div class=\"thanks_button_div\" \n                  style=\"float: right; margin-right: 10px; margin-top:10px;\"><div id=\"thanksButtonDiv_2089_1\" style=\"background-image:url(https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/plugins\/thanks-you-counter-button\/images\/thanks_compact_brown1.png); background-repeat:no-repeat; float: left; display: inline;\"\n                onmouseover=\"javascript:thankYouChangeButtonImage('thanksButtonDiv_2089_1', true);\" \n                onmouseout=\"javascript:thankYouChangeButtonImage('thanksButtonDiv_2089_1', false);\"\n                onclick=\"javascript:thankYouChangeButtonImage('thanksButtonDiv_2089_1', false);\" >\n                <input type=\"button\" onclick=\"thankYouButtonClick(2089, 'You left &ldquo;Thanks&rdquo; already for this post')\" value=\"Merci\u00a0 0\"\n                  class=\"thanks_button thanks_compact thanks_brown1\"\n                  style=\"  font-family: Verdana, Arial, Sans-Serif; font-size: 14px; font-weight: normal;; color:#00f;\"\n                  id=\"thanksButton_2089_1\" title=\"Click to leave &ldquo;Thanks&rdquo; for this post\"\/>\n             <\/div><div id=\"ajax_loader_2089_1\" style=\"display:inline;visibility: hidden;\"><img decoding=\"async\" alt=\"ajax loader\" src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/plugins\/thanks-you-counter-button\/images\/ajax-loader.gif\" \/><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Google Latitude propose des applications, des services et une API permettant d\u2019effectuer de la g\u00e9olocalisation.<\/p>\n<p>Avec un t\u00e9l\u00e9phone Android par exemple, la position peut se mettre \u00e0 jour de fa\u00e7on automatique.<\/p>\n<p>Or, j\u2019ai eu envie de voir comment on pouvait interagir avec cette API depuis Delphi&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[132,7,6],"tags":[158,15,154,157,120],"class_list":["post-2089","post","type-post","status-publish","format-standard","hentry","category-android","category-delphi","category-dev","tag-android","tag-api","tag-delphi","tag-google","tag-localisation"],"_links":{"self":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/2089","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/comments?post=2089"}],"version-history":[{"count":1,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/2089\/revisions"}],"predecessor-version":[{"id":6375,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/2089\/revisions\/6375"}],"wp:attachment":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/media?parent=2089"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/categories?post=2089"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/tags?post=2089"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}