Fix udrevaka and ukarla
This commit is contained in:
parent
b03fceb3dd
commit
560cd28e78
4
main.cpp
4
main.cpp
@ -99,9 +99,9 @@ int main(int argc, char **argv, char **env) {
|
||||
restaurants["lightofindia"] = std::make_unique<LunchRest::LightOfIndiaRestaurant>();
|
||||
restaurants["ukarla"] = std::make_unique<LunchRest::UKarlaRestaurant>();
|
||||
restaurants["alcapone"] = std::make_unique<LunchRest::AlCaponeRestaurant>();
|
||||
restaurants["plac"] = std::make_unique<LunchRest::PlacRestaurant>();
|
||||
// restaurants["plac"] = std::make_unique<LunchRest::PlacRestaurant>();
|
||||
restaurants["zo"] = std::make_unique<LunchRest::ZoRestaurant>();
|
||||
restaurants["suzzies"] = std::make_unique<LunchRest::SuzziesRestaurant>();
|
||||
// restaurants["suzzies"] = std::make_unique<LunchRest::SuzziesRestaurant>();
|
||||
std::cout << "Initial parsing" << std::endl;
|
||||
for(auto &restaurant : restaurants)
|
||||
restaurant.second->parse();
|
||||
|
@ -20,7 +20,9 @@ void LunchRest::PlacRestaurant::parse() {
|
||||
clearMenus();
|
||||
HtmlParser hparse(html);
|
||||
auto &root = hparse.getRoot();
|
||||
auto pizzas = root.find("//div[@class='section-inner']//div[@class='mt-i cf']");
|
||||
auto pizzas = root.find("//div[@class='mt-c cf']//div[@class='mt-i cf']");
|
||||
if(pizzas.size() == 0)
|
||||
return;
|
||||
auto soups = pizzas[0];
|
||||
|
||||
int soup_price = std::stoi(nodeToText(pizzas[1]->find(".//strong/text()")[0]));
|
||||
|
@ -3,3 +3,15 @@
|
||||
std::string LunchRest::nodeToText(xmlpp::Node *node) {
|
||||
return dynamic_cast<const xmlpp::ContentNode *>(node)->get_content();
|
||||
}
|
||||
|
||||
std::string LunchRest::trim(const std::string &input) {
|
||||
const std::string whitespace = "\t\n\v\f\r ";
|
||||
std::string ret = input;
|
||||
ret.erase(0, ret.find_first_not_of(whitespace));
|
||||
ret.erase(ret.find_last_not_of(whitespace) + 1);
|
||||
for(size_t i = 0; i < ret.length(); i++) {
|
||||
if(ret[i] == '\n')
|
||||
ret[i] = ' ';
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -3,9 +3,10 @@
|
||||
|
||||
namespace LunchRest {
|
||||
std::string nodeToText(xmlpp::Node *node);
|
||||
std::string trim(const std::string &input);
|
||||
class UDrevakaRestaurant : public Restaurant {
|
||||
public:
|
||||
UDrevakaRestaurant() : Restaurant("https://www.udrevaka.cz/denni-menu/", "U Dřeváka") {}
|
||||
UDrevakaRestaurant() : Restaurant("https://udrevaka.cz/denni-menu/", "U Dřeváka") {}
|
||||
virtual ~UDrevakaRestaurant() = default;
|
||||
virtual void parse() override;
|
||||
};
|
||||
@ -23,7 +24,7 @@ public:
|
||||
};
|
||||
class UKarlaRestaurant : public Restaurant {
|
||||
public:
|
||||
UKarlaRestaurant() : Restaurant("https://www.ukarlabrno.cz/denni-menu/", "U Karla") {}
|
||||
UKarlaRestaurant() : Restaurant("https://ukarlabrno.cz/denni-menu/", "U Karla") {}
|
||||
virtual ~UKarlaRestaurant() = default;
|
||||
virtual void parse() override;
|
||||
};
|
||||
|
@ -14,10 +14,10 @@ void LunchRest::UDrevakaRestaurant::parse() {
|
||||
auto days = root.find("//li[@class='item-day']");
|
||||
for(auto &day : days) {
|
||||
auto meals = day->find("./div[@class='row']");
|
||||
for(auto meal : meals) {
|
||||
for(auto &meal : meals) {
|
||||
auto divs = meal->find(".//div/text()");
|
||||
Meal meal_obj{};
|
||||
std::string name = nodeToText(divs[0]);
|
||||
std::string name = trim(nodeToText(divs[0]));
|
||||
auto soup_pos = name.find("Polévka");
|
||||
if(soup_pos != std::string::npos) {
|
||||
meal_obj.setSoup();
|
||||
@ -26,7 +26,7 @@ void LunchRest::UDrevakaRestaurant::parse() {
|
||||
meal_obj.setName(name.substr(3, name.find('(') - 4));
|
||||
}
|
||||
if(divs.size() > 1) {
|
||||
meal_obj.setPrice(std::stoi(nodeToText(divs[1])));
|
||||
meal_obj.setPrice(std::stoi(trim(nodeToText(divs[1]))));
|
||||
}
|
||||
menus[menu_index].addMeal(meal_obj);
|
||||
menus[menu_index].setInvalidMenu(false);
|
||||
|
@ -19,7 +19,7 @@ void LunchRest::UKarlaRestaurant::parse() {
|
||||
for(auto &meal : meals) {
|
||||
auto soup = false;
|
||||
auto texts = meal->find("./div/text()");
|
||||
std::string name = nodeToText(texts[0]);
|
||||
std::string name = trim(nodeToText(texts[0]));
|
||||
if(name[0] == 'P') {
|
||||
soup = true;
|
||||
name = name.substr(10);
|
||||
@ -28,7 +28,7 @@ void LunchRest::UKarlaRestaurant::parse() {
|
||||
}
|
||||
int price = -1;
|
||||
if(texts.size() > 1)
|
||||
price = std::stoi(nodeToText(texts[1]));
|
||||
price = std::stoi(trim(nodeToText(texts[1])));
|
||||
menus[menu_index].addMeal(soup, name, "", price);
|
||||
menus[menu_index].setInvalidMenu(false);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user