• You are currently browsing the archives for the hackday category.

  • Archive for the ‘hackday’ Category

    Currency conversion API on a shoestring

    Saturday, June 21st, 2008

    Someone just came to our table at Mashed08 and asked if Yahoo! offers a currency conversion API. We don’t, but a few lines of PHP allows you to get the information from the Yahoo finance site:

    
    function convert($from,$to){
    $url= 'http://finance.yahoo.com/currency/convert?amt=1&from='.$from.'&to='.$to.'&submit=Convert';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $feed = curl_exec($ch);
    curl_close($ch);
    preg_match_all("/tabledata1">([^<]+)</td>/",$feed,$cells);
    return $cells[1][1];
    }
    echo convert('USD','GBP');
    

    There’s a whole list of currency codes available on oanda.

    A few more lines turns this into a JSON API:

    
    header('Content-type:text/javascript');
    $from = $_GET['from'];
    $to = $_GET['to'];
    $callback = $_GET['callback'];
    if(preg_match("/[A-Z|a-z]{3}/",$to) && preg_match("/[A-Z|a-z]{3}/",$from)){
    $to = strToUpper($to);
    $from = strToUpper($from);
    $url= 'http://finance.yahoo.com/currency/convert?' .
    'amt=1&from='.$from.'&to='.$to.'&submit=Convert';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $feed = curl_exec($ch);
    curl_close($ch);
    preg_match_all("/tabledata1">([^<]+)</td>/",$feed,$cells);
    if(is_numeric($cells[1][1])){
    $out = '{"from":"'.$from.'","to":"'.$to.'","factor":"'.$cells[1][1].'"}';
    } else {
    $out = '{<a href=""Could" title="">error</a> not convert currencies, are you sure about the names?"}';
    }
    } else {
    $out = '{<a href=""Invalid" title="">error</a> Currency format, must be three letters"}';
    }
    if(isset($callback)){
    if(preg_match("/[a-z|A-Z|_|-|$|0-9|.]/",$callback)){
    $out = $callback.'('.$out.')';
    } else {
    $out = '{<a href=""Invalid" title="">error</a> callback method name"}';
    }
    }
    echo $out;
    

    You have several parameters:

    • from (mandatory): three letter currency code (upper or lower case)
    • to (mandatory): three letter currency code (upper or lower case)
    • callback (optional): the name of the callback method that should be wrapped around the resulting object

    If something goes wrong, the API will return an object with an error property, otherwise you’ll get an object with three properties:

    • from: the original currency
    • to: the target currency
    • factor: the conversion factor

    Say you store this as convert.php somewhere, then you could do the following:

    
    <script type="text/javascript">
    function converted(obj){
    if(obj.error){
    alert(obj.error);
    } else {
    alert('one ' + obj.from + ' is ' + obj.factor + ' ' + obj.to);
    }
    }
    </script>
    <script type="text/javascript" src="convert.php?from=gbp&to=usd&callback=converted"></script>
    

    This is a terrible dirty hack and if Yahoo finance ever changes their HTML (and they will), this will cease to work.

    It’s all about APIs these days.

    Friday, November 2nd, 2007

    It is quite cool to see the increase of coverage of the topic of web APIs. It is also very exciting to APIs finally evolving to work across several systems, aggregate and move from a one way stream of retrieving data to an alternative entry point for applications. How cool will it be for example to write reviews for amazon on movie or book sites? Having write APIs would allow us to leverage the knowledge of people on the web at the places they hang out rather than having to lure them into using a web app.

    Anyways with this new API interest I had a triple release today: There is a podcast about APIs for .net magazine together with Jeremy Keith, Paul Hammond, Drew McLellan and hosted by Paul Boag, Ajaxian is featuring my ‘hack’ of the Slideshare RSS feed and I uploaded the presentations I gave at the University Hack Day introduction at Dundee, Scotland yesterday.

    Enjoy!
    [tags]apis,webdevelopment,rss,hacks,hackday,unihackday,slideshare[/tags]