Пример работы с сетевым 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);
} 
Комментариев нет:
Отправить комментарий