Пример #1
0
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;
}