{"id":329,"date":"2010-11-23T17:13:15","date_gmt":"2010-11-23T16:13:15","guid":{"rendered":"https:\/\/d-mueller.de\/blog\/?p=329"},"modified":"2010-11-26T23:33:16","modified_gmt":"2010-11-26T22:33:16","slug":"yahoo-placefinder-api-tutorial","status":"publish","type":"post","link":"https:\/\/d-mueller.de\/blog\/yahoo-placefinder-api-tutorial\/","title":{"rendered":"Yahoo Placefinder-API Tutorial"},"content":{"rendered":"<p>Habe mich gestern auf Arbeit f\u00fcr eine Geo-Location Klasse mit der Placefinder API auseinandergesetzt und war ganz angetan davon, deswegen gebe hier mal die &#8222;Essentials&#8220; wieder.<\/p>\n<h3>Was kann Placefinder?<\/h3>\n<p>Placefinder hat 2 Haupt-Einsatzbereiche:<\/p>\n<ul>\n<li>Finde die Lat\/Long-Koordinaten einer eingegebenen Adresse (Bspw: Neckarstra\u00dfe 15, Darmstadt -> 49.869220, 8.645537)<\/li>\n<li>Finde zu angegebenen Lat\/Long-Koordinaten die n\u00e4chstgelegene Adresse (Bspw: 48.1431,8.4176 -> Am Doniswald 8, 78126 K\u00f6nigsfeld Im Schwarzwald)<\/li>\n<\/ul>\n<p>Dabei ist der Placefinder sehr &#8222;tolerant&#8220;, spuckt also auch zu mies formatierten Eingaben oder Tippfehlern korrekte Ergebnisse aus.<\/p>\n<h3>Wie spreche ich die API an?<\/h3>\n<p>Yahoo bittet euch, erstmal einen API-Key zu besorgen (das geht <a href=\"http:\/\/developer.yahoo.com\/dashboard\/createKey.html\">hier<\/a>). Komischerweise hat Yahoo aber auch nichts dagegen, wenn bei Anfragen kein API-Key angegeben wird &#8211; aber sicher ist sicher. Danach gibt es grundlegend <b>3 relevante Verfahren<\/b>, die API anzusprechen:<\/p>\n<h4>Koordinaten einer Adresse finden<\/h4>\n<p><h5>1) Simples &#8222;one string&#8220;-Format:<\/h5>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n$location = &quot;Neckarstra\u00dfe 15, Darmstadt&quot;;\r\n$url = &quot;http:\/\/where.yahooapis.com\/geocode?q=&quot;.\r\n\t\turlencode($location).&quot;&amp;appid=[der-api-key]&quot;;\r\necho file_get_contents($url);\r\n<\/pre>\n<\/p>\n<p><h5>2) Detaillierte Angabe der Adresse:<\/h5>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n$address = array(&quot;street&quot; =&gt; &quot;Neckarstra\u00dfe&quot;,\r\n\t\t\t\t &quot;house&quot; =&gt; 15,\r\n\t\t\t\t &quot;postal&quot; =&gt; 64283,\r\n\t\t\t\t &quot;city&quot; =&gt; &quot;Darmstadt&quot;,\r\n\t\t\t\t &quot;country&quot; =&gt; &quot;DE&quot;);\r\n\r\n$url = &quot;http:\/\/where.yahooapis.com\/geocode?&quot;.\r\n\t    http_build_query($address,&quot;&quot;,&quot;&amp;&quot;).\r\n\t\t&quot;&amp;appid=[der-api-key]&quot;;\r\necho file_get_contents($url);\r\n<\/pre>\n<p>Bei der detaillierteren Variante f\u00e4llt der &#8222;q&#8220;-Parameter weg und es werden stattdessen die Einzelangaben gemacht (es k\u00f6nnen auch weniger Details angegeben werden). Inkorrekte Postleitzahlen \/ Tippfehler werden korrigiert.<\/p>\n<h4>Adresse zu einer Koordinate finden<\/h4>\n<p><pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n$coords = array(&quot;lat&quot; =&gt; 48.1431,\r\n\t\t\t\t&quot;long&quot; =&gt; 8.4176);\r\n\r\n$url = &quot;http:\/\/where.yahooapis.com\/geocode?q=&quot;.\r\n\t\t$coords[&#039;lat&#039;].&quot;,&quot;.$coords[&#039;long&#039;].\r\n\t\t&quot;&amp;gflags=R&amp;appid=[der-api-key]&quot;;\r\necho file_get_contents($url);\r\n<\/pre>\n<p>Auch hier wird wieder der &#8222;q&#8220;-Parameter verwendet. Die Koordinaten dann einfach mit Komma getrennt hinterher. Zu beachten ist der <i>&#8222;gflags=R&#8220;<\/i> Parameter, der das <b>R<\/b>esolven der Koordinaten veranlasst.<\/p>\n<h3>Weitere Finessen<\/h3>\n<ul>\n<li><b>Outputformat:<\/b> Standardm\u00e4\u00dfig kommt das Result in XML zur\u00fcck. Mit Parameter <i>flags=J<\/i> kommt JSON bei euch an, mit <i>flags=P<\/i> serialisiertes PHP. Ich bin mit dem serialisierten PHP sehr gut gefahren<\/li>\n<li><b>Quality-Index:<\/b> Zu jeder gefundenen Adresse (ja, es k\u00f6nnen auch mehrere passende sein, die in der Response aufgef\u00fchrt werden) wird ein quality-index mitgeliefert. Dieser variiert zwischen 0 und 99, kann aber im Standard-Suchfall nach einer Adresse maximal 87 ergeben (h\u00f6here Werte sind nur f\u00fcr POI&#8217;s wie bspw. den Eiffelturm m\u00f6glich).<\/li>\n<li><b>Sprache des Outputs:<\/b> Per Parameter <i>locale=de_DE<\/i> kommt Deutsch zur\u00fcck, default ist logischerweise Englisch.<\/li>\n<\/ul>\n<p>Man kann also sehr gut mit dem Placefinder auskommen. F\u00fcr weiteres sei auf die <a href=\"http:\/\/developer.yahoo.com\/geo\/placefinder\/guide\/\">sehr gute Dokumentation<\/a> verwiesen, in der u.a. auch noch der Quality-Index genau aufgeschl\u00fcsselt wird und ein paar weitere Parameter zu finden sind<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Habe mich gestern auf Arbeit f\u00fcr eine Geo-Location Klasse mit der Placefinder API auseinandergesetzt und war ganz angetan davon, deswegen gebe hier mal die &#8222;Essentials&#8220; wieder. Was kann Placefinder? Placefinder hat 2 Haupt-Einsatzbereiche: Finde die Lat\/Long-Koordinaten einer eingegebenen Adresse (Bspw: &hellip; <a href=\"https:\/\/d-mueller.de\/blog\/yahoo-placefinder-api-tutorial\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,3],"tags":[],"class_list":["post-329","post","type-post","status-publish","format-standard","hentry","category-php","category-webdev"],"_links":{"self":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/329","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/comments?post=329"}],"version-history":[{"count":0,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/329\/revisions"}],"wp:attachment":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/media?parent=329"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/categories?post=329"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/tags?post=329"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}