#include "restaurants.hpp" #include "../network/network.hpp" #include "../htmlparser.hpp" void LunchRest::PlacRestaurant::parse() { Request r; auto html = r.get(_url); if(html == "") return; clearMenus(); HtmlParser hparse(html); auto &root = hparse.getRoot(); auto pizzas = root.find("//div[@class='mt-c cf']//div[@class='mt-i cf']"); if(pizzas.size() == 0) return; auto soups = pizzas[0]->find(".//div[@class='b b-text cf']"); int soup_price = std::stoi(nodeToText(soups[1]->find(".//strong/text()")[0])); int cur_day = -1; for(auto &soup : soups[0]->find(".//p/text()")) { std::string soup_text = nodeToText(soup); auto soup_day = soup_text.substr(0,2); if(soup_day == "Po") cur_day = 0; if(cur_day < 0) continue; menus[cur_day].setInvalidMenu(false); auto soupname = soup_text.substr(5); while(std::isspace(soupname[0])) soupname = soupname.substr(1); menus[cur_day].addMeal(true, soupname, "", soup_price); cur_day++; if(cur_day > 4) break; } for(unsigned long int i = 2; i < pizzas.size(); i++) { auto content = pizzas[i]->find(".//div[@class='b b-text cf']"); auto name_candidates = content[0]->find(".//h3/text()"); std::string name = nodeToText(name_candidates[0]); auto desc_candidates = content[0]->find(".//p//text()"); std::string desc = nodeToText(desc_candidates[0]); auto price_candidates = content[1]->find(".//p/strong/text()"); int price = std::stoi(nodeToText(price_candidates[0])); name = trim(name); desc = trim(desc); addPermanent(false, name, desc, price); } }