Страница 1 из 1

вывод содержимого сайта в консоль

Добавлено: 03 июл 2024, 15:25
ya
Предварительно установить: libcurl4-openssl-dev

Код: Выделить всё

sudo apt install libcurl4-openssl-dev
web-curl.0.0.1.cpp

Код: Выделить всё

#include <iostream>
#include <curl/curl.h>

size_t write_callback(void *ptr, size_t size, size_t nmemb, std::string* data)
{
    data->append((char*)ptr, size * nmemb);
    return size * nmemb;
}

int main()
{
    CURL *curl;
    CURLcode res;
    std::string data;

    curl = curl_easy_init();
    if(curl)
    {
        curl_easy_setopt(curl, CURLOPT_URL, "https://google.com");

        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);

        res = curl_easy_perform(curl);
        if(res != CURLE_OK)
        {
            std::cerr << "Failed to get data from URL: " << curl_easy_strerror(res) << std::endl;
        }
        else
        {
            std::cout << data << std::endl;
        }

        curl_easy_cleanup(curl);
    }

    return 0;
}
Откомпилировать с параметром -lcurl

Код: Выделить всё

g++ -std=c++11 -o web-curl.0.0.1 web-curl.0.0.1.cpp -lcurl

Re: вывод содержимого сайта в консоль

Добавлено: 03 июл 2024, 17:50
ya
web-curl.0.0.3.cpp

Код: Выделить всё

#include <SFML/Graphics.hpp>
#include <curl/curl.h>
#include <iostream>
#include <string>

size_t writeFunction(void* ptr, size_t size, size_t nmemb, std::string* data) {
    data->append((char*)ptr, size * nmemb);
    return size * nmemb;
}

int main() {
    sf::RenderWindow window(sf::VideoMode(800, 600), "Web Page Viewer");

    std::string url = "https://google.com"; // URL веб-страницы
    std::string content;

    // Инициализация библиотеки libcurl
    curl_global_init(CURL_GLOBAL_ALL);
    CURL* curl = curl_easy_init();

    // Установка URL для загрузки
    curl_easy_setopt(curl, CURLOPT_URL, url.c_str());

    // Установка функции обратного вызова для записи данных в content
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeFunction);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);

    // Запуск загрузки
    curl_easy_perform(curl);

    // Завершение работы с libcurl
    curl_easy_cleanup(curl);
    curl_global_cleanup();

    // Отображение содержимого веб-страницы в окне
    sf::Font font;
    font.loadFromFile("arial.ttf");

    sf::Text text;
    text.setFont(font);
    text.setString(content);
    text.setCharacterSize(12);
    text.setPosition(10, 10);

    while (window.isOpen()) {
        sf::Event event;
        while (window.pollEvent(event)) {
            if (event.type == sf::Event::Closed) {
                window.close();
            }
        }

        window.clear();
        window.draw(text);
        window.display();
    }

    return 0;
}

Установить библиотеку sfml

Код: Выделить всё

sudo apt-get install libsfml-dev
Компилировать с параметрами линковки:

Код: Выделить всё

g++ -std=c++11 -o web-curl.0.0.3 web-curl.0.0.3.cpp -lcurl -lsfml-graphics -lsfml-window -lsfml-system


Re: вывод содержимого сайта в консоль

Добавлено: 03 июл 2024, 17:53
ya
web-curl.0.0.4.cpp

Код: Выделить всё

#include <iostream>
#include <curl/curl.h>
#include <libxml/HTMLparser.h>
#include <SFML/Graphics.hpp>

// Функция для загрузки содержимого веб-страницы
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* data) {
    data->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    // Инициализация библиотеки curl
    curl_global_init(CURL_GLOBAL_DEFAULT);
    
    // Создание экземпляра curl
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string htmlContent;
        
        // Устанавливаем URL страницы для загрузки
        curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
        
        // Устанавливаем функцию обратного вызова для записи полученных данных
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &htmlContent);
        
        // Выполняем запрос
        CURLcode res = curl_easy_perform(curl);
        
        // Проверка на успешность запроса
        if (res == CURLE_OK) {
            // Распарсим загруженную HTML-страницу
            htmlDocPtr doc = htmlReadMemory(htmlContent.c_str(), htmlContent.length(), "", NULL, HTML_PARSE_RECOVER);
            if (doc) {
                // Далее можно работать с содержимым страницы, например, отобразить его в окне SFML
                // Создаем окно SFML
                sf::RenderWindow window(sf::VideoMode(800, 600), "Web Content Display");
                
                // Отображаем содержимое HTML-страницы на экране
                // Здесь нужно написать код для рендеринга содержимого страницы в окне SFML
                
                // Цикл обработки событий окна
                while (window.isOpen()) {
                    // Обработка событий
                    sf::Event event;
                    while (window.pollEvent(event)) {
                        if (event.type == sf::Event::Closed) {
                            window.close();
                        }
                    }
                    
                    // Отрисовка содержимого
                    window.clear();
                    
                    // Здесь нужно написать код для отображения содержимого страницы
                    
                    window.display();
                }
                
                // Освобождаем память после работы с содержимым страницы
                xmlFreeDoc(doc);
            }
        } else {
            std::cerr << "Error: " << curl_easy_strerror(res) << std::endl;
        }
        
        // Освобождаем ресурсы
        curl_easy_cleanup(curl);
    }
    
    // Закрываем библиотеку curl
    curl_global_cleanup();

    return 0;
}
Перед компиляцией линковки установить библиотеку: libxml2 и создать символическую ссылку

Код: Выделить всё

sudo apt-get install libxml2-dev libxml2-doc
cd /usr/include
ln -s libxml2/libxml .
Компилировать с параметрами линковки:

Код: Выделить всё

g++ -std=c++11 -o web-curl.0.0.3 web-curl.0.0.3.cpp -lcurl -lsfml-graphics -lsfml-window -lsfml-system -lxml2