首页 > 解决方案 > 使用 QNetworkAccessManager 解析 youtube

问题描述

我想使用 Qt (QNetworkAccessManager) 从 youtube 中提取信息。虽然下面的代码适用于其他网站,但我没有从 youtube 获得任何数据。知道 QNetworkRequest 的配置应该是什么吗?PS。是的,我知道我可以通过使用 YoutubeApi 来实现它。

Youtube::Youtube(QObject *parent) : QObject(parent)
{
    manager = new QNetworkAccessManager(this);
 
    QObject::connect(manager, SIGNAL(finished(QNetworkReply*)),
                     this, SLOT(readyRead(QNetworkReply*)));
}
 
 
 
void Youtube::makeRequest()
{
 
    qDebug() << "YOUTUBE::makeRequest()";
    request.setUrl(QUrl("www.youtube.com/"));
    request.setRawHeader("User-Agent", "MyOwnBrowser 1.0");
    manager->get(request);
}
 
 
void Youtube::readyRead(QNetworkReply *replay)
{
    qDebug() << replay->readAll();
    QByteArray dataTemp = replay->readAll();
    website = dataTemp.toStdString();
 
}

标签: c++qtparsing

解决方案


您可以尝试此操作以获取有关视频的信息并存储在 QJsonDocument 对象中:

    QNetworkAccessManager* net = new QNetworkAccessManager(this);

    net->get(QNetworkRequest(QUrl("https://noembed.com/embed? 
    url=https://www.youtube.com/watch?v=dQw4w9WgXcQ")));

    connect(net, &QNetworkAccessManager::finished,[](QNetworkReply* reply)
    {
        QString output = reply->readAll();
        QJsonDocument doc;
        QJsonParseError errorPtr;
        doc = QJsonDocument::fromJson(output.toUtf8(), &errorPtr);

        if(! doc.isNull())
        {
            QJsonObject videoInfoJson = doc.object();
            qDebug() <<videoInfoJson.value("title").toString();
        }
    });

推荐阅读