diff -urp ../geonamesOLD/geonames_config.inc ./geonames_config.inc --- ../geonamesOLD/geonames_config.inc 2009-09-08 16:39:59.000000000 +1000 +++ ./geonames_config.inc 2009-09-08 16:39:14.000000000 +1000 @@ -177,6 +177,22 @@ function geonames_config($a = NULL, $b = 'required_parameters_type' => 'all', 'columns' => array('countrycode', 'countryname', 'admincode1', 'adminname1'), ); + $config['get'] = array( + 'service_name' => 'get', + 'service_full_name' => 'Get', + 'description' => 'Retrieve GeoNames record by geonameid', + 'service_path' => 'get', + 'credit_cost' => 1, + 'result_cache_prefix' => 'gres:', + 'data_cache_prefix' => 'gdat:', + 'allowed_parameters' => array( + 'geonameid' => 'geonameId', + 'lang' => 'lang', + ), + 'columns' => array( + 'geoname', + ), + ); $config['gtopo30'] = array( 'service_name' => 'gtopo30', 'service_full_name' => 'Elevation - GTOPO30', Only in .: geonames_get.patch diff -urp ../geonamesOLD/geonames.module ./geonames.module --- ../geonamesOLD/geonames.module 2009-09-07 23:42:12.000000000 +1000 +++ ./geonames.module 2009-09-08 16:39:31.000000000 +1000 @@ -428,7 +428,7 @@ function geonames_query($service, $query if (!is_object($result) && $data) { // parse the XML data we have received, and add some more properties to the object - $result = geonames_parse_xml($data, $fields); + $result = ($service == 'get') ? geonames_parse_get_xml($data) : geonames_parse_xml($data, $fields); $result->service = $service; $result->request['url'] = geonames_service_url($service) . $querystring; $result->request['bytes'] = drupal_strlen($data); @@ -697,6 +697,32 @@ function geonames_parse_xml($data, $colu } /** + * Parser for the Get service + */ +function geonames_parse_get_xml($data) { + $xml = new SimpleXMLElement($data); + foreach ($xml->children() as $key => $entry) { + $k = (string) strtolower($key); + $v = (string) $entry; + if ($key != 'status') { + $fields[$k] = $v; + } + else { + $result->status['message'] = (string) $xml->status['message']; + $result->status['value'] = (string) $xml->status['value']; + } + } + if (!empty($fields)) { + $result->results[] = $fields; + $result->total_results_count = 1; + } + else { + $result->total_results_count = 0; + } + return $result; +} + +/** * Commercial Service: Increase the Credits Counter ;) */ function geonames_credits_pay($service) {