function onLocationFromName($name, $language, &$location)
{
+ $loc = $this->getCache(array('name' => $name,
+ 'language' => $language));
+
+ if (!empty($loc)) {
+ $location = $loc;
+ return false;
+ }
+
$client = HTTPClient::start();
// XXX: break down a name by commas, narrow by each
$location->location_id = $n->geonameId;
$location->location_ns = self::LOCATION_NS;
+ $this->setCache(array('name' => $name,
+ 'language' => $language),
+ $location);
+
// handled, don't continue processing!
return false;
}
return true;
}
+ $loc = $this->getCache(array('id' => $id));
+
+ if (!empty($loc)) {
+ $location = $loc;
+ return false;
+ }
+
$client = HTTPClient::start();
$str = http_build_query(array('geonameId' => $id,
$location->lat = $last->lat;
$location->lon = $last->lng;
$location->names[$language] = implode(', ', array_reverse($parts));
+
+ $this->setCache(array('id' => $last->geonameId),
+ $location);
}
}
function onLocationFromLatLon($lat, $lon, $language, &$location)
{
+ $loc = $this->getCache(array('lat' => $lat,
+ 'lon' => $lon));
+
+ if (!empty($loc)) {
+ $location = $loc;
+ return false;
+ }
+
$client = HTTPClient::start();
$str = http_build_query(array('lat' => $lat,
$location->names[$language] = implode(', ', $parts);
+ $this->setCache(array('lat' => $lat,
+ 'lon' => $lon),
+ $location);
+
// Success! We handled it, so no further processing
return false;
return true;
}
+ $n = $this->getCache(array('id' => $location->location_id,
+ 'language' => $language));
+
+ if (!empty($n)) {
+ $name = $n;
+ return false;
+ }
+
$client = HTTPClient::start();
- $str = http_build_query(array('geonameId' => $id,
+ $str = http_build_query(array('geonameId' => $location->location_id,
'lang' => $language));
$result = $client->get('http://ws.geonames.org/hierarchyJSON?'.$str);
if (count($parts)) {
$name = implode(', ', array_reverse($parts));
+ $this->setCache(array('id' => $location->location_id,
+ 'language' => $language),
+ $name);
return false;
}
}
// it's been filled, so don't process further.
return false;
}
+
+ function getCache($attrs)
+ {
+ $c = common_memcache();
+
+ if (!$c) {
+ return null;
+ }
+
+ return $c->get($this->cacheKey($attrs));
+ }
+
+ function setCache($attrs, $loc)
+ {
+ $c = common_memcache();
+
+ if (!$c) {
+ return null;
+ }
+
+ $c->set($this->cacheKey($attrs), $loc);
+ }
+
+ function clearCache($attrs)
+ {
+ $c = common_memcache();
+
+ if (!$c) {
+ return null;
+ }
+
+ $c->delete($this->cacheKey($attrs));
+ }
+
+ function cacheKey($attrs)
+ {
+ return common_cache_key('geonames:'.
+ implode(',', array_keys($attrs)) . ':'.
+ common_keyize(implode(',', array_values($attrs))));
+ }
}