Compare commits
6 Commits
feature-js
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
| 823e4c83ef | |||
| fa1be9fb42 | |||
| 969251661c | |||
| effb6385c0 | |||
| ba0e8b81fa | |||
| b6e557757b |
@@ -1,9 +1,10 @@
|
|||||||
|
#pragma once
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "Weather.h"
|
#include "Weather.h"
|
||||||
|
|
||||||
class Service {
|
class Service {
|
||||||
public:
|
public:
|
||||||
virtual ~Service() = default;
|
virtual ~Service() = default;
|
||||||
|
|
||||||
virtual Weather getWeather(std::string s) = 0;
|
virtual Weather getWeather(std::string s) = 0;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
#pragma once
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
|||||||
29
XmlService.cpp
Normal file
29
XmlService.cpp
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#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);
|
||||||
|
}
|
||||||
8
XmlService.h
Normal file
8
XmlService.h
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#include "Service.h"
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class XmlService : public Service {
|
||||||
|
public:
|
||||||
|
virtual Weather getWeather(std::string s) override;
|
||||||
|
virtual ~XmlService() {}
|
||||||
|
};
|
||||||
@@ -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>
|
||||||
|
|||||||
13
main.cpp
13
main.cpp
@@ -1,15 +1,22 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include "JsonService.h"
|
#include "JsonService.h"
|
||||||
|
#include "XmlService.h"
|
||||||
#include "Weather.h"
|
#include "Weather.h"
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
try {
|
try {
|
||||||
|
std::cout << "Testing JsonService" << std::endl;
|
||||||
JsonService js;
|
JsonService js;
|
||||||
Weather w = js.getWeather("endpoints/weather.json");
|
Weather w1 = js.getWeather("endpoints/weather.json");
|
||||||
|
std::cout << "Weather object created (JSON)" << std::endl;
|
||||||
|
w1.printWeather();
|
||||||
|
|
||||||
std::cout << "Weather object created" << std::endl;
|
std::cout << "\nTesting XmlService" << std::endl;
|
||||||
w.printWeather();
|
XmlService xs;
|
||||||
|
Weather w2 = xs.getWeather("endpoints/weather.xml");
|
||||||
|
std::cout << "Weather object created (XML)" << std::endl;
|
||||||
|
w2.printWeather();
|
||||||
}
|
}
|
||||||
catch (const std::exception& e) {
|
catch (const std::exception& e) {
|
||||||
std::cerr << "Error: " << e.what() << std::endl;
|
std::cerr << "Error: " << e.what() << std::endl;
|
||||||
|
|||||||
80
thirdparty/pugixml-1.15/pugiconfig.hpp
vendored
Normal file
80
thirdparty/pugixml-1.15/pugiconfig.hpp
vendored
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
/**
|
||||||
|
* 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
Normal file
13553
thirdparty/pugixml-1.15/pugixml.cpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1585
thirdparty/pugixml-1.15/pugixml.hpp
vendored
Normal file
1585
thirdparty/pugixml-1.15/pugixml.hpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user