Пример работы с Yahoo! Finance на D

Пример работы с сетевым 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, &currency,
&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);
}