#include "bom.hpp" #include "book.hpp" #include "ftplibpp/ftplib.h" #include "rapidxml/rapidxml.hpp" #include #include #include #include #include #include #include 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& bs) { ftp->Get("bom_data.xml", "/anon/gen/fwo/IDN60920.xml", ftplib::transfermode::ascii); std::ifstream fs("bom_data.xml"); std::vector buffer{std::istreambuf_iterator(fs), istreambuf_iterator()}; 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