function dots_derive_location_from_address(&$data) { $geocode_rsp = geo_geocode_string($data['address']); if (!$geocode_rsp['ok']) { return array('ok' => 0); } # stuff to be marked as "derived_from" $derived_keys = array('latitude', 'longitude'); $data['latitude'] = $geocode_rsp['latitude']; $data['longitude'] = $geocode_rsp['longitude']; $geocoded_by = $geocode_rsp['service_id']; $geo_map = geo_geocode_service_map(); $geocoder_name = $geo_map[$geocoded_by]; $derived_map = dots_derive_derived_from_map('string keys'); $derived_from = $derived_map["geocoded ({$geocoder_name})"]; foreach ($geocode_rsp['extras'] as $k => $v) { $extra = "{$geocoder_name}:{$k}"; $derived_keys[] = $extra; $data[$extra] = $v; } # Happy happy $rsp = array('ok' => 1, 'keys' => array()); foreach ($derived_keys as $key) { $rsp['keys'][$key] = $derived_from; } return $rsp; }
function enplacify_foodspotting_get_place($place_id) { $cache_key = "enplacify_foodspotting_place_{$place_id}"; $cache = cache_get($cache_key); if ($cache['ok']) { return $cache['data']; } $url = "http://www.foodspotting.com/places/" . urlencode($place_id); $http_rsp = http_get($url); if (!$http_rsp['ok']) { return $http_rsp; } $rsp = vcard_parse_html($http_rsp['body']); if ($rsp['ok']) { $place = $rsp['vcard']; $place['id'] = $place_id; # vcard has no specifics for latlon so just assume this is false and look for: # <input id="place_latitude" name="place[latitude]" type="hidden" value="35.6633801" /> # <input id="place_longitude" name="place[longitude]" type="hidden" value="139.71029 $has_latlon = 0; libxml_use_internal_errors(true); $doc = new DOMDocument(); $html = mb_convert_encoding($http_rsp['body'], 'html-entities', 'utf-8'); if ($doc->loadHTML($html)) { foreach ($doc->getElementsByTagName('input') as $i) { $id = $i->getAttribute('id'); if (preg_match("/place_(latitude|longitude)/", $id, $m)) { $place[$m[1]] = $i->getAttribute('value'); } } $has_latlon = $place['latitude'] && $place['longitude'] ? 1 : 0; } if (!$has_latlon && ($place['street-address'] && $place['locality'] && $place['region'])) { $q = "{$place['street-address']}, {$place['locality']} {$place['region']}"; $geo_rsp = geo_geocode_string($q); if ($geo_rsp['ok']) { $place['latitude'] = $geo_rsp['latitude']; $place['longitude'] = $geo_rsp['longitude']; } } $rsp = array('ok' => 1, 'place' => $place); } cache_set($cache_key, $rsp); return $rsp; }