Finally, a free geocoding API

REST Query to look up an address
http://local.yahooapis.com/MapsService/V1/geocode?appid=rlerdorf&location=Moscow
Returned XML
We can parse it like this
<?php
  $url  = 'http://local.yahooapis.com/MapsService/V1/geocode';
  $url .= '?appid=rlerdorf&location='.urlencode('Moscow');
  $xml = simplexml_load_file($url); 
  $ret['precision'] = (string)$xml->Result['precision'];
  $ret['warning'] = (string)$xml->Result['warning'];
  foreach($xml->Result->children() as $key=>$val) {
    if(strlen($val)) $ret[(string)$key] =  (string)$val;
  }
  echo "<pre>"; print_r($ret); echo "</pre>";
?>
Output