Клиент для получения курса валют

| 1 комментарий

Попробуем написать программу для того, чтобы из командной строки получать взаимный курс любой пары валют.

Исходные данные: имеем API, возвращающее взаимный курс валют на любую запрошенную пару, например, USD/EUR. На выходе должны получить одно-единственное число — сегодняшний курс.

Пару валют предполагается вводить в командной строке как аргументы при запуске скрипта:

$ rate USD EUR

По умолчанию предполагается, что курс относится к рублю:

$ rate USD

Поскольку скрипт должен работать с любой современной версией языка, use 5.10 и say использовать не получится (а жаль).

#!/usr/bin/perl

Потребуется модуль для загрузки страницы с сервера:

use LWP::Simple;

Проверяем число аргументов в командной строке или печатаем пример использования:

if (length @ARGV < 1) {
    print "Usage: rate FROM [TO]\n";
    exit;
}

Если нашлолсь два аргумента, то считаем их запрашиваемой парой валют:

my ($from, $to) = @ARGV;

Отсутствующий второй аргумент заменяем валютой по умолчанию:

$to = 'RUB' unless $to;

API ожидает получить названия валют в верхнем регистре:

$from = uc $from;
$to = uc $to;

Делаем простую проверку на то, что коды валют более или менее правильные и содежат ровно три буквы (хотя это можно было сделать и до преобразования в верхний регистр):

unless ($from =~ /^[A-Z]{3}/ && $to =~ /^[A-Z]{3}/) {
    print "Wrong currency code requested\n";
    exit;
}

И, наконец, происходит запрос к API с нужными параметрами:

my $data = get("http://whoyougle.com/money/api/$from/$to");

Ответ приходит в виде XML, из которого регулярными выражениями (а зачем в таком простом примере делать сложнее?) отыскивается и выбирается число с курсом.

my ($result) = $data =~ /<value>(.*?)<\/value>/;

print "$result\n";

Просто? Да. Переносимо? Более или менее. Поймет ли начинающий? Однозначно.

P. S. Идею такого скрипта предложил Дима Карасик.

P. S. II. В этой простой программе мне интересно было прежде всего то, как подойти к обучению перлу на реальных задачах, но при этом использовать минимум дополнительных компонентов, которые необходимо либо изучить, либо установить на компьютер до того, как удастся решить простейшие задачи. Об этом я как-нибудь напишу отдельно. Я днем и ночью думаю о том, как сделать перл доступным :-)

1 комментарий

Андрей, по-моему, код надо сразу писать под use strict, это потом можно объяснить, что можно не использовать, а не наоборот.

Мой вариант:

use strict;
use LWP::Simple;

my $from = lc shift;
my $to = lc shift;
print join ' ', get("http://whoyougle.com/money/api/$from/$to") =~ /([^

Проверки опущены, твой сервис решает, что есть, а не прикладной код.

Комментировать

Страницы

  • img

Об этой записи

Сообщение опубликовано 08.09.2009 22:51. Автор — ash.

Предыдущая запись — 5.10.1 в продакшне

Следующая запись — Perl.uz — как это было

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.