豆板図書APIを読み、表紙画像のQtプログラムをダウンロードする.


豆瓣図書APIはXMLとJSONの2種類があり、CSAPP 3 rdの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()で読み取ったデータをQJson Dcumentクラスに変換し、関数QJson Dcumentに関係する::from Json().3.QJson Dcument類をQJson Object類に変換し、関数QJson Dcumentに関連する:object().4.QJsonObject類を操作し、例えば図書titleを読み込む:QString title = jsonObject["title"].toString();.
APIのイメージ項目は、表紙画像のアドレスを提供する.画像をダウンロードするには、ネットワーク接続の3つのカテゴリを使用します.QNetwork Access Manager、QNetwork Reply、QNetwork Request.手順は以下の通りです.1.urlを設定し、関数QNetwork Requestに関するものです.2.QNetwork Access Manager::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.ネットワーク接続信号スロット関数の書き方.