c++ - 使用 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();
}
解决方案
您可以尝试此操作以获取有关视频的信息并存储在 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();
}
});
推荐阅读
- android - Recyclerview 仅显示 1 项
- webassembly - 如何从 binutils 构建 `gas`/`as` 到 wasm(并支持所有目标)?
- powershell - 有没有办法从 PowerShell 中的数字签名中获取一个人的姓名/电子邮件?
- pine-script - 是否有解决方案将系列转换为 pine 编辑器中的单个数据?
- node.js - React 正在获取系统 .env 文件 .. 而不是我在根目录中创建的 .env 文件
- flutter - Flutter:使用带有 ToggleButtons 的工具提示
- html - 添加多个字段时,HTML多选下拉菜单Jquery和样式不起作用
- python - warnings.warn("Estimator fit failed. the score on this train-test"
- python - Django:关系的“id”列中的空值违反了非空约束
- angular - Reddit OAuth 隐式授权流程是不断征求对每个令牌请求的同意。我究竟做错了什么?