lunch-rest/restaurants/suzzies.cpp

43 lines
1.5 KiB
C++
Raw Normal View History

2020-09-20 14:27:49 +00:00
#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 + 6) % 7;
2020-09-20 14:27:49 +00:00
}
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);
2020-09-20 14:27:49 +00:00
}
}
}
}