Libcurl не возвращает URL в функции getData (), необходимой для разбора html - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь передать URL в конструктор libcurl, в котором он будет перенаправлять URL и дать мне доступ для анализа html, я знаю, что это работает, потому что я использую его из открытого c кода, который кто-то еще опубликовал, но это немного старше. По сути, я передаю сайт с тикером, который ввел пользователь, и мне нужно, чтобы он вывел на экран конкретное число c, я также использую QT. Похоже, что данные URL из libcurl хранятся в curlBuffer, но я немного запутался, когда я выводил web.getData (), который возвращает curlBuffer, ничего не выходит, присоединен мой класс CurlObj, а также мой основной код для передачи вещей в Я был бы признателен за любую помощь, которую вы мне оказали, поскольку я довольно начинающий программист, как вы, вероятно, можете сказать.

#ifndef H_WEBCURL_H
#define H_WEBCURL_H
#include <curl.h>
#include <iostream>

using namespace std;
//CurlObj is used to get the html from the given webpage
class CurlObj {
public:
    CurlObj (std::string url) {
        curl = curl_easy_init();
        if (!curl) {
            throw std::string ("Curl did not initialize.");
        }

        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &CurlObj::curlWriter);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &curlBuffer);
        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
        curl_easy_perform(curl);
    };

    static int curlWriter(char *data, int size, int nmemb, std::string *buffer) {
        int result = 0;
        if (buffer != NULL) {
            buffer->append(data, size * nmemb);
            result = size * nmemb;
        }

        return result;
    }

    std::string getData() {
        return curlBuffer;
    }

protected:
    CURL * curl;
    std::string curlBuffer;
};
#endif // H_WEBCURL_H

void MainWindow::on_symbolSearch_returnPressed()
{

    QString symbolSearched = ui->symbolSearch->text();
    string symbolSearchedStd = symbolSearched.toStdString();
    pageAddress = "https://www.wsj.com/market-data/quotes/" + symbolSearchedStd + "/financials";
    cout << pageAddress << endl;

    //Gets webpage html file
    CurlObj webPage(pageAddress);

    try
    {
        WebScrapper web = WebScrapper(symbolSearchedStd, webPage.getData());
    }
    catch (std::exception e)
    {
        cout << "\n" << symbolSearchedStd << " is not a valid ticker." << std::endl;
    }

}
...