读取豆瓣图书API并下载封面图片的Qt程序

2 篇文章 0 订阅

豆瓣图书API有XML和JSON两种,以CSAPP 3rd的API为例分别如下:
XML:http://api.douban.com/book/subject/isbn/9780134092669
JSON:https://api.douban.com/v2/book/isbn/:9780134092669
程序中使用的是JSON格式。

首先要解析已保存好的.json文件,有以下步骤:
1.用QFile类读取.json文件,涉及函数QFile::open()和QFile::readAll(),读取完毕后用QFile::close()关闭文件。
2.将用QFile::readAll()读取到的数据转换为QJsonDocument类,涉及函数QJsonDocument::fromJson()。
3.将QJsonDocument类转换为QJsonObject类,涉及函数QJsonDocument::object()。
4.对QJsonObject类进行操作,例如读取图书title:
QString title = jsonObject["title"].toString();

API中的image项给出了封面图片的地址。下载图片要用到网络连接的三个类:QNetworkAccessManager、QNetworkReply和QNetworkRequest。步骤如下:
1.设置url,涉及函数QNetworkRequest::setUrl()。
2.QNetworkAccessManager::get()。
3.用信号槽QObject::connect()完成图片下载。网络连接的操作似乎必须要用信号槽实现。

main()函数:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QFile file(":/file/book.json");
    file.open(QIODevice::ReadOnly | QIODevice::Text);
    QString value = file.readAll();
    file.close();

    QJsonParseError parseJsonErr;
    QJsonDocument jsonDocument = QJsonDocument::fromJson(value.toUtf8(), &parseJsonErr);
    if(!(parseJsonErr.error == QJsonParseError::NoError)){
        qDebug() << QString("Wrong");
    }
    QJsonObject jsonObject = jsonDocument.object();
    QString title = jsonObject["title"].toString();
    QUrl url(jsonObject["image"].toString()); //construct

    QNetworkAccessManager manager;
    QNetworkRequest request;
    request.setUrl(url);
    QNetworkReply *reply = manager.get(request);
    QObject::connect(&manager,&QNetworkAccessManager::finished,[=]{
        QPixmap pixmap;
        pixmap.loadFromData(reply->readAll());
        pixmap.save(title,"JPG");});

    return a.exec();
}

待改进&问题:
1.API中的images项底下还有small、large和medium三个小项,怎么读取小项中的值?
2.网络连接信号槽函数的写法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值