Това може да бъде в помощ на някой който се занимава с PHP програмиране. Наскоро на мен ми трябваше такава функция, и затова си написах 🙂
Има най-различни начини за постигане на целта – някои по-добри, други по-лоши. Но така или иначе, по-добре да имаш бързо решение, отколкото никакво…
Накратко, функцията ми изтегля съдържанието на http://finances.need.bg/rates.php и чрез два RegEx израза извлича нужната информация от HTML кода.
Курсовете са спрямо BGN и са по фиксинга на БНБ. Примерно, ако изпълните getRate(‘EUR’), тя ще върне 1.955830. А ако тегленето на данните се провали, връща False.
Избрах за източник на данните да използвам http://finances.need.bg/rates.php, защото в XML-а на БНБ поради бла бла бла (причини, които не ме интересуват) няма данни за EUR.
Ето какво надробих:

function getRate($currency = 'EUR'){
    $rates = file_get_contents('http://finances.need.bg/rates.php');
    if ($rates){
        if (preg_match_all('/<select name="list1" id="list1" >(.*?)<\/select>/ims', $rates, $matches, PREG_SET_ORDER)){
            $matches[0][1] = trim(str_replace('selected','',$matches[0][1]));
            if (preg_match_all('/<option\s*value\s*=\s*"(\d*\.?\d*)">('.$currency.')<\/option>/ims', $matches[0][1], $matches1, PREG_SET_ORDER)){
                return $matches1[0][1];
            }
        }
    }
    return False;
}

Нищо невиждано, обаче ми свърши работа, и затова реших да я споделя.
Имайте предвид, че е силно препоръчително ако използвате тази функция, да предвидите някакъв механизъм за кеширане на резултата, така че заявката към http://finances.need.bg/rates.php да се прави примерно веднъж дневно, а не при всяко презареждане.
Примерно да записвате $rates във локално файлче, и когато повторно извиквате функцията да се прави проверка дали такъв файл съществува и дали е променян днес. Ако не е – теглят се нови данни, иначе се чете от локалния файл. Или нещо такова – начини много…