1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
| TheMovieDB::TheMovieDB(QObject *parent) : QObject(parent)
{
t_api_key="?api_key=**************";
t_api_url="http://api.themoviedb.org/3/";
t_manager = new QNetworkAccessManager;
t_resultID=0;
}
//******************************************* Search from Title ******************************************************
void TheMovieDB::search(const QString &title)
{
qDebug()<<"étape 1";
t_title=GeneralFunctions::prepareString(title);
t_api_query= t_api_url + "search/movie" + t_api_key + "&language=fr&query=" + t_title;
QObject::connect(t_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(readTitleSearch(QNetworkReply *)));
t_manager->get(QNetworkRequest(QUrl(t_api_query)));
}
//On lit le résultat de la recherche par titre
void TheMovieDB::readTitleSearch(QNetworkReply *reply)
{
qDebug()<<"étape 2";
QString source = reply->readAll();
QJsonDocument document = QJsonDocument::fromJson(source.toUtf8());
QJsonObject jsonObj = document.object();
QJsonArray obj = jsonObj["results"].toArray();
QDate date;
int distance=GeneralFunctions::distanceDL(t_title , obj[0].toObject()["title"].toString());
t_resultID=obj[0].toObject()["id"].toInt();
int distanceToBeCompared=0;
for(int i = 1; i < obj.count(); i++){
if(date.fromString(obj[i].toObject()["release_date"].toString(), "yyyy-MM-dd") < QDate::currentDate())
{
distanceToBeCompared=GeneralFunctions::distanceDL(t_title , obj[i].toObject()["title"].toString());
if(distance > distanceToBeCompared)
{
distance=distanceToBeCompared;
t_resultID=obj[i].toObject()["id"].toInt();
}
}
}
//on lance la suite
searchID(t_resultID);
}
//******************************************* Search from ID ******************************************************
void TheMovieDB::searchID(const int &id)
{
qDebug()<<"étape 3";
t_manager->disconnect(t_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(readTitleSearch(QNetworkReply *)));
t_api_query=t_api_url+"movie/"+QString::number(id)+t_api_key+"&language=fr";
QObject::connect(t_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(readIDSearch(QNetworkReply *)));
t_manager->get(QNetworkRequest(QUrl(t_api_query)));
}
//Faire un téléchargement automatique des images
//poster_path, backdrop_path
void TheMovieDB::readIDSearch(QNetworkReply *reply)
{
qDebug()<<"étape 4";
t_infosList.clear();
QString source = reply->readAll();
QJsonDocument document = QJsonDocument::fromJson(source.toUtf8());
QJsonObject jsonObj = document.object();
QJsonArray objGenres = jsonObj["genres"].toArray();
QStringList genresList;
for(int i = 0; i < objGenres.count(); i++){
genresList.append(objGenres[i].toObject()["name"].toString());
}
t_infosList["title"] =jsonObj["title"].toString();
t_infosList["genres"]=genresList;
t_infosList["id"] =jsonObj.value("id").toInt();
t_infosList["release_date"] = QDate::fromString(jsonObj.value("release_date").toString(),"yyyy-MM-dd");
t_infosList["overview"] = jsonObj.value("overview").toString();
t_infosList["note"] = jsonObj.value("vote_average").toDouble();
t_infosList["collection"]=jsonObj["belongs_to_collection"].toObject()["name"].toString();
t_posterURL = jsonObj["poster_path"].toString();
getBackdrop(t_infosList["title"].toString() , jsonObj["backdrop_path"].toString());
}
//******************************************* DOWNLOAD BACKDROP ******************************************************
void TheMovieDB::getBackdrop(const QString &pictureName, const QString &pictureUrl)
{
qDebug()<<"étape 5";
t_manager->disconnect(t_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(readIDSearch(QNetworkReply *)));
t_picturePath= "./backdrop/" + pictureName + ".jpg";
t_infosList["backdrop"]=t_picturePath;
QString url="http://image.tmdb.org/t/p/w1920"+pictureUrl;
QObject::connect(t_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(saveBackdrop(QNetworkReply*)));
t_manager->get(QNetworkRequest(QUrl(url)));
}
void TheMovieDB::saveBackdrop(QNetworkReply *reply)
{
qDebug()<<"étape 6";
QFile* file = new QFile;
file->setFileName(t_picturePath);
file->open(QIODevice::WriteOnly);
file->write(reply->readAll());
getPoster(t_infosList["title"].toString() , t_posterURL);
}
//******************************************* DOWNLOAD POSTER *******************************************************
void TheMovieDB::getPoster(const QString &pictureName, const QString &pictureUrl)
{
qDebug()<<"étape 7";
t_manager->disconnect(t_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(saveBackdrop(QNetworkReply *)));
t_picturePath= "./poster/" + pictureName + ".jpg";
t_infosList["poster"]=t_picturePath;
QString url="http://image.tmdb.org/t/p/w1920"+pictureUrl;
QObject::connect(t_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(savePoster(QNetworkReply *)));
t_manager->get(QNetworkRequest(QUrl(url)));
}
void TheMovieDB::savePoster(QNetworkReply *reply)
{
qDebug()<<"étape 8";
QFile* file = new QFile;
file->setFileName(t_picturePath);
file->open(QIODevice::WriteOnly);
file->write(reply->readAll());
t_manager->disconnect(t_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(savePoster(QNetworkReply *)));
emit dataRetrieved();
} |
Partager