37 lines
1.1 KiB
C++
37 lines
1.1 KiB
C++
|
#include "parsers.hpp"
|
||
|
#include "../network/network.hpp"
|
||
|
#include "../htmlparser.hpp"
|
||
|
|
||
|
void LunchRest::UKarlaParser::parse() {
|
||
|
menus.clear();
|
||
|
Request r;
|
||
|
auto html = r.get(_url);
|
||
|
HtmlParser hparse(html);
|
||
|
auto &root = hparse.getRoot();
|
||
|
auto days = root.find("//li[@class='item-day']");
|
||
|
int validdays = 0;
|
||
|
for(auto &day : days) {
|
||
|
validdays++;
|
||
|
Menu m{};
|
||
|
auto meals = day->find("./div[@class='row']");
|
||
|
for(auto &meal : meals) {
|
||
|
auto soup = false;
|
||
|
auto texts = meal->find("./div/text()");
|
||
|
std::string name = dynamic_cast<const xmlpp::ContentNode *>(texts[0])->get_content();
|
||
|
if(name[0] == 'P') {
|
||
|
soup = true;
|
||
|
name = name.substr(10);
|
||
|
}
|
||
|
int price = -1;
|
||
|
if(texts.size() > 1)
|
||
|
price = std::stoi(dynamic_cast<const xmlpp::ContentNode *>(texts[1])->get_content());
|
||
|
m.addMeal(soup, name, "", price);
|
||
|
}
|
||
|
menus.push_back(m);
|
||
|
}
|
||
|
for(int i = validdays; i < 5; i++) {
|
||
|
menus.push_back(Menu{});
|
||
|
menus.back().setInvalidMenu();
|
||
|
}
|
||
|
}
|