#include "bom.hpp"
|
|
#include "book.hpp"
|
#include "ftplibpp/ftplib.h"
|
#include "rapidxml/rapidxml.hpp"
|
#include <cstddef>
|
#include <cstdio>
|
#include <fstream>
|
#include <iterator>
|
#include <string>
|
#include <unordered_map>
|
#include <vector>
|
|
namespace bom
|
{
|
ftplib* ftp;
|
|
void initialise()
|
{
|
ftp = new ftplib();
|
ftp->Connect("ftp.bom.gov.au:21");
|
ftp->Login("anonymous", "");
|
}
|
|
void destroy()
|
{
|
ftp->Quit();
|
delete ftp;
|
}
|
|
void updateBom(std::unordered_map<std::string, book::Book>& bs)
|
{
|
ftp->Get("bom_data.xml", "/anon/gen/fwo/IDN60920.xml",
|
ftplib::transfermode::ascii);
|
std::ifstream fs("bom_data.xml");
|
std::vector<char> buffer{std::istreambuf_iterator<char>(fs),
|
istreambuf_iterator<char>()};
|
buffer.push_back('\0');
|
rapidxml::xml_document<> d;
|
d.parse<0>(&buffer[0]);
|
// Walk stations
|
for (rapidxml::xml_node<>* n = d.first_node()->last_node()->first_node(); n;
|
n = n->next_sibling()) {
|
int bom_id = std::stoi(n->first_attribute()->next_attribute()->value());
|
for (auto& i : bs) {
|
if (i.second.stationId == bom_id) {
|
// Should be apparent temp
|
i.second.bomPrice = std::stod(n->first_node()
|
->first_node()
|
->first_node()
|
->first_node()
|
->value());
|
}
|
}
|
}
|
}
|
} // namespace bom
|