lunch-rest/restaurants/suzzies.cpp
2020-09-20 16:27:49 +02:00

44 lines
1.5 KiB
C++

#include "../environment.hpp"
#include "restaurants.hpp"
#include "../network/network.hpp"
#include <ctime>
#include <rapidjson/document.h>
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 + 1) % 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());
if(week_day > 4)
continue;
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) {
menus[week_day].addMeal(false, meal["name"].GetString(), "", std::stoi(meal["price"].GetString()));
}
}
}
}