#include "../environment.hpp" #include "restaurants.hpp" #include "../network/network.hpp" #include #include LunchRest::SuzziesRestaurant::SuzziesRestaurant() : Restaurant("https://developers.zomato.com/api/v2.1/dailymenu?res_id=18126190", "Suzzie's") { api_key = getEnv("ZOMATO_APIKEY"); } int weekDay(const std::string &date_str) { struct tm date_tm; strptime(date_str.c_str(), "%Y-%m-%d %H:%M:%S", &date_tm); return (date_tm.tm_wday + 6) % 7; } void LunchRest::SuzziesRestaurant::parse() { rapidjson::Document json; Request r; r.addHeader("Accept: application/json"); r.addHeader("user_key: " + api_key); json.Parse(r.get(_url).c_str()); if( json.HasParseError() ) return; const auto &json_menus = json["daily_menus"]; if( !json_menus.IsArray() ) return; clearMenus(); for(size_t i = 0; i < json_menus.Size(); i++) { const auto &menu = json_menus[i]["daily_menu"]; auto week_day = weekDay(menu["start_date"].GetString()); menus[week_day].setInvalidMenu(false); const auto &meals = menu["dishes"]; for(size_t j = 0; j < meals.Size(); j++) { const auto &meal = meals[j]["dish"]; if(strlen(meal["price"].GetString()) != 0) { auto price = std::stoi(meal["price"].GetString()); menus[week_day].addMeal(price < 100, meal["name"].GetString(), "", price); } } } }