Пример работы с сетевым API Yahoo! Finance: запрос котировок ценных бумаг. Демонстрирует некоторые распространенные идиомы Phobos – например, форматированный ввод, объекты времени и даты. Использует минималистичный HTTP-клиент DHTTPClient. На ввод программа принимает тикер (биржевое обозначение акции) – например, MGNT.ME для акций “Магнит”. Выводит стоимость, дату и время последней сделки.
module main;
import std.stdio;
import std.string;
import std.uri;
import std.format;
import std.datetime;
import dhttpclient;
struct Quote
{
string symbol; // s
string name; // n
double lastTrade; // l1
string currency; // c4
DateTime datetime; // d1 t1
}
Quote getQuote(string sym)
{
const request = "snl1c4d1t1";
const url =
"http://finance.yahoo.com/d/quotes.csv?e=.csv"
~ "&f=" ~ request
~ "&s=" ~ sym.encode;
auto http = new HTTPClient();
auto data = http.get(url).chomp;
Quote q;
with (q)
{
uint year, month, day;
string time;
formattedRead(data,
""%s","%s",%s,"%s","%s/%s/%s","%s"",
&symbol, &name,
&lastTrade, ¤cy,
&month, &day, &year, &time);
uint hour, minute;
formattedRead(time, "%s:%s", &hour, &minute);
if (time[$-2..$] == "pm")
hour += 12;
datetime = DateTime(year, month, day, hour, minute);
}
return q;
}
void main(string[] args)
{
string s = "AAPL"; // Apple Inc.
if (args.length > 1)
s = args[1];
auto q = getQuote(s);
writefln("Symbol: %s", q.symbol);
writefln("Name: %s", q.name);
writefln("Last trade: %s %s (%s)",
q.lastTrade,
q.currency,
q.datetime);
}