Compare commits
3 Commits
feature-xm
...
ba0e8b81fa
| Author | SHA1 | Date | |
|---|---|---|---|
| ba0e8b81fa | |||
| d757710f5d | |||
| 54f612e785 |
25
JsonService.cpp
Normal file
25
JsonService.cpp
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
#include "JsonService.h"
|
||||||
|
#include "thirdparty/json.hpp"
|
||||||
|
#include <fstream>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
|
using nlohmann::json;
|
||||||
|
|
||||||
|
Weather JsonService::getWeather(std::string s) {
|
||||||
|
std::ifstream fin(s);
|
||||||
|
if (!fin)
|
||||||
|
throw std::runtime_error("error"); // Linux support
|
||||||
|
|
||||||
|
json j;
|
||||||
|
j = json::parse(fin);
|
||||||
|
|
||||||
|
std::string city = j["name"]; // Киров
|
||||||
|
double lon = j["coord"]["lon"]; // 49.6601
|
||||||
|
double lat = j["coord"]["lat"]; // 58.5966
|
||||||
|
double temperature = j["main"]["temp"]; // 5.69
|
||||||
|
std::string weather = j["weather"][0]["description"]; // дождь
|
||||||
|
double windSpeed = j["wind"]["speed"]; // 4.27
|
||||||
|
int clouds = j["clouds"]["all"]; // 100
|
||||||
|
|
||||||
|
return Weather(city, lon, lat, temperature, weather, windSpeed, clouds);
|
||||||
|
}
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
#include "Service.h"
|
#include "Service.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
class XmlService : public Service {
|
class JsonService : public Service {
|
||||||
public:
|
public:
|
||||||
virtual Weather getWeather(std::string s) override;
|
virtual Weather getWeather(std::string s) override;
|
||||||
virtual ~XmlService() {}
|
virtual ~JsonService() {}
|
||||||
};
|
};
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
#include "XmlService.h"
|
|
||||||
#include "thirdparty/pugixml-1.15/pugixml.hpp"
|
|
||||||
#include <stdexcept>
|
|
||||||
|
|
||||||
using namespace pugi;
|
|
||||||
|
|
||||||
Weather XmlService::getWeather(std::string s) {
|
|
||||||
xml_document doc;
|
|
||||||
xml_parse_result result = doc.load_file(s.c_str());
|
|
||||||
if (!result)
|
|
||||||
throw std::runtime_error("error");
|
|
||||||
|
|
||||||
xml_node node = doc.child("current");
|
|
||||||
|
|
||||||
std::string city = node.child("city").attribute("name").as_string(); // Киров
|
|
||||||
|
|
||||||
double lon = node.child("city").child("coord").attribute("lon").as_double(); // 49.6601
|
|
||||||
double lat = node.child("city").child("coord").attribute("lat").as_double(); // 58.5966
|
|
||||||
|
|
||||||
double temperature = node.child("temperature").attribute("value").as_double(); // 5.69
|
|
||||||
|
|
||||||
std::string weather = node.child("weather").attribute("value").as_string(); // дождь
|
|
||||||
|
|
||||||
double windSpeed = node.child("wind").child("speed").attribute("value").as_double(); // 4.27
|
|
||||||
|
|
||||||
int clouds = node.child("clouds").attribute("value").as_int(); // 100
|
|
||||||
|
|
||||||
return Weather(city, lon, lat, temperature, weather, windSpeed, clouds);
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
<current>
|
<current>
|
||||||
<city id="548408" name="Киров">
|
<city id="548408" name="Êèðîâ">
|
||||||
<coord lon="49.6601" lat="58.5966"/>
|
<coord lon="49.6601" lat="58.5966"/>
|
||||||
<country>RU</country>
|
<country>RU</country>
|
||||||
<timezone>10800</timezone>
|
<timezone>10800</timezone>
|
||||||
@@ -14,9 +14,9 @@
|
|||||||
<gusts value="11.57"/>
|
<gusts value="11.57"/>
|
||||||
<direction value="171" code="S" name="South"/>
|
<direction value="171" code="S" name="South"/>
|
||||||
</wind>
|
</wind>
|
||||||
<clouds value="100" name="пасмурно"/>
|
<clouds value="100" name="ïàñìóðíî"/>
|
||||||
<visibility value="133"/>
|
<visibility value="133"/>
|
||||||
<precipitation value="0.45" mode="rain" unit="1h"/>
|
<precipitation value="0.45" mode="rain" unit="1h"/>
|
||||||
<weather number="500" value="небольшой дождь" icon="10d"/>
|
<weather number="500" value="íåáîëüøîé äîæäü" icon="10d"/>
|
||||||
<lastupdate value="2023-03-27T08:55:52"/>
|
<lastupdate value="2023-03-27T08:55:52"/>
|
||||||
</current>
|
</current>
|
||||||
|
|||||||
6
main.cpp
6
main.cpp
@@ -1,12 +1,12 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include "XmlService.h"
|
#include "JsonService.h"
|
||||||
#include "Weather.h"
|
#include "Weather.h"
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
try {
|
try {
|
||||||
XmlService xs;
|
JsonService js;
|
||||||
Weather w = xs.getWeather("endpoints/weather.xml");
|
Weather w = js.getWeather("endpoints/weather.json");
|
||||||
|
|
||||||
std::cout << "Weather object created" << std::endl;
|
std::cout << "Weather object created" << std::endl;
|
||||||
w.printWeather();
|
w.printWeather();
|
||||||
|
|||||||
25526
thirdparty/json.hpp
vendored
Normal file
25526
thirdparty/json.hpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
80
thirdparty/pugixml-1.15/pugiconfig.hpp
vendored
80
thirdparty/pugixml-1.15/pugiconfig.hpp
vendored
@@ -1,80 +0,0 @@
|
|||||||
/**
|
|
||||||
* pugixml parser - version 1.15
|
|
||||||
* --------------------------------------------------------
|
|
||||||
* Copyright (C) 2006-2025, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
|
|
||||||
* Report bugs and download new versions at https://pugixml.org/
|
|
||||||
*
|
|
||||||
* This library is distributed under the MIT License. See notice at the end
|
|
||||||
* of this file.
|
|
||||||
*
|
|
||||||
* This work is based on the pugxml parser, which is:
|
|
||||||
* Copyright (C) 2003, by Kristen Wegner (kristen@tima.net)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HEADER_PUGICONFIG_HPP
|
|
||||||
#define HEADER_PUGICONFIG_HPP
|
|
||||||
|
|
||||||
// Uncomment this to enable wchar_t mode
|
|
||||||
// #define PUGIXML_WCHAR_MODE
|
|
||||||
|
|
||||||
// Uncomment this to enable compact mode
|
|
||||||
// #define PUGIXML_COMPACT
|
|
||||||
|
|
||||||
// Uncomment this to disable XPath
|
|
||||||
// #define PUGIXML_NO_XPATH
|
|
||||||
|
|
||||||
// Uncomment this to disable STL
|
|
||||||
// #define PUGIXML_NO_STL
|
|
||||||
|
|
||||||
// Uncomment this to disable exceptions
|
|
||||||
// #define PUGIXML_NO_EXCEPTIONS
|
|
||||||
|
|
||||||
// Set this to control attributes for public classes/functions, i.e.:
|
|
||||||
// #define PUGIXML_API __declspec(dllexport) // to export all public symbols from DLL
|
|
||||||
// #define PUGIXML_CLASS __declspec(dllimport) // to import all classes from DLL
|
|
||||||
// #define PUGIXML_FUNCTION __fastcall // to set calling conventions to all public functions to fastcall
|
|
||||||
// In absence of PUGIXML_CLASS/PUGIXML_FUNCTION definitions PUGIXML_API is used instead
|
|
||||||
|
|
||||||
// Tune these constants to adjust memory-related behavior
|
|
||||||
// #define PUGIXML_MEMORY_PAGE_SIZE 32768
|
|
||||||
// #define PUGIXML_MEMORY_OUTPUT_STACK 10240
|
|
||||||
// #define PUGIXML_MEMORY_XPATH_PAGE_SIZE 4096
|
|
||||||
|
|
||||||
// Tune this constant to adjust max nesting for XPath queries
|
|
||||||
// #define PUGIXML_XPATH_DEPTH_LIMIT 1024
|
|
||||||
|
|
||||||
// Uncomment this to switch to header-only version
|
|
||||||
// #define PUGIXML_HEADER_ONLY
|
|
||||||
|
|
||||||
// Uncomment this to enable long long support (usually enabled automatically)
|
|
||||||
// #define PUGIXML_HAS_LONG_LONG
|
|
||||||
|
|
||||||
// Uncomment this to enable support for std::string_view (usually enabled automatically)
|
|
||||||
// #define PUGIXML_HAS_STRING_VIEW
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copyright (c) 2006-2025 Arseny Kapoulkine
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person
|
|
||||||
* obtaining a copy of this software and associated documentation
|
|
||||||
* files (the "Software"), to deal in the Software without
|
|
||||||
* restriction, including without limitation the rights to use,
|
|
||||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following
|
|
||||||
* conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be
|
|
||||||
* included in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
||||||
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
||||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
||||||
* OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
13553
thirdparty/pugixml-1.15/pugixml.cpp
vendored
13553
thirdparty/pugixml-1.15/pugixml.cpp
vendored
File diff suppressed because it is too large
Load Diff
1585
thirdparty/pugixml-1.15/pugixml.hpp
vendored
1585
thirdparty/pugixml-1.15/pugixml.hpp
vendored
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user