From e2a48d8701f91b8e24fbe9e99e91eb72a87bb749 Mon Sep 17 00:00:00 2001 From: horchi Date: Sun, 5 Mar 2017 16:39:28 +0100 Subject: git init --- scraper/themoviedbscraper/moviedbmovie.c | 255 +++++++++++++++++++++++++++++++ 1 file changed, 255 insertions(+) create mode 100644 scraper/themoviedbscraper/moviedbmovie.c (limited to 'scraper/themoviedbscraper/moviedbmovie.c') diff --git a/scraper/themoviedbscraper/moviedbmovie.c b/scraper/themoviedbscraper/moviedbmovie.c new file mode 100644 index 0000000..8060930 --- /dev/null +++ b/scraper/themoviedbscraper/moviedbmovie.c @@ -0,0 +1,255 @@ + +#include +#include +#include +#include +#include +#include + +#include "../../lib/curl.h" +#include "../../tools/fuzzy.h" +#include "../../tools/stringhelpers.h" +#include "moviedbmovie.h" + +using namespace std; + +cMovieDbMovie::cMovieDbMovie(string json) { + this->json = json; + title = ""; + originalTitle = ""; + tagline = ""; + overview = ""; + backdropPath = ""; + posterPath = ""; + adult = false; + collectionID = 0; + collectionName = ""; + collectionPosterPath = ""; + collectionBackdropPath = ""; + budget = 0; + revenue = 0; + genres = ""; + homepage = ""; + imdbid = ""; + releaseDate = ""; + runtime = 0; + popularity = 0.0; + voteAverage = 0.0; + currentActor = 0; + backdropWidth = 1280; + backdropHeight = 720; + posterWidth = 500; + posterHeight = 750; +} + +cMovieDbMovie::~cMovieDbMovie() { + for(std::vector::const_iterator it = actors.begin(); it != actors.end(); it++) { + delete *it; + } + actors.clear(); +} + +void cMovieDbMovie::ParseJSON(void) { + cJsonLoader jMovie(json.c_str()); + if (!jMovie.isObject()) { + return; + } + json_t *jTitle = jMovie.objectByName("title"); + if(json_is_string(jTitle)) { + title = json_string_value(jTitle);; + } + json_t *jOriginalTitle = jMovie.objectByName("original_title"); + if(json_is_string(jOriginalTitle)) { + originalTitle = json_string_value(jOriginalTitle); + } + json_t *jOverview = jMovie.objectByName("overview"); + if(json_is_string(jOverview)) { + overview = json_string_value(jOverview); + } + json_t *jBackdrop = jMovie.objectByName("backdrop_path"); + if(json_is_string(jBackdrop)) { + backdropPath = backdropBaseUrl + json_string_value(jBackdrop); + } + json_t *jPoster = jMovie.objectByName("poster_path"); + if(json_is_string(jPoster)) { + posterPath = posterBaseUrl + json_string_value(jPoster); + } + json_t *jAdult = jMovie.objectByName("adult"); + if(json_is_true(jAdult)) { + adult = true; + } + json_t *collection = jMovie.objectByName("belongs_to_collection"); + if(json_is_object(collection)) { + json_t *colID = json_object_get(collection, "id"); + if (json_is_integer(colID)) { + collectionID = (int)json_integer_value(colID); + } + json_t *colName = json_object_get(collection, "name"); + if(json_is_string(jPoster)) { + collectionName = json_string_value(colName); + } + json_t *colPoster = json_object_get(collection, "poster_path"); + if(json_is_string(colPoster)) { + collectionPosterPath = posterBaseUrl + json_string_value(colPoster); + } + json_t *colBackdrop = json_object_get(collection, "backdrop_path"); + if(json_is_string(colBackdrop)) { + collectionBackdropPath = backdropBaseUrl + json_string_value(colBackdrop); + } + } + json_t *jBudget = jMovie.objectByName("budget"); + if (json_is_integer(jBudget)) { + budget = (int)json_integer_value(jBudget); + } + json_t *aGenres = jMovie.objectByName("genres"); + if(json_is_array(aGenres)) { + size_t numGenres = json_array_size(aGenres); + for (size_t res = 0; res < numGenres; res++) { + json_t *result = json_array_get(aGenres, res); + if (json_is_object(result)) { + json_t *jGenre = json_object_get(result, "name"); + if(json_is_string(jGenre)) { + genres += json_string_value(jGenre); + if ((res+1) < numGenres) + genres += " | "; + } + } + } + } + json_t *jHomepage = jMovie.objectByName("homepage"); + if(json_is_string(jHomepage)) { + homepage = json_string_value(jHomepage); + } + json_t *jIMDB = jMovie.objectByName("imdb_id"); + if(json_is_string(jIMDB)) { + imdbid = json_string_value(jIMDB); + } + json_t *jPopularity = jMovie.objectByName("popularity"); + if(json_is_real(jPopularity)) { + popularity = json_real_value(jPopularity); + } + json_t *jReleaseDate = jMovie.objectByName("release_date"); + if(json_is_string(jReleaseDate)) { + releaseDate = json_string_value(jReleaseDate); + } + json_t *jRevenue = jMovie.objectByName("revenue"); + if (json_is_integer(jRevenue)) { + revenue = (int)json_integer_value(jRevenue); + } + json_t *jRuntime = jMovie.objectByName("runtime"); + if (json_is_integer(jRuntime)) { + runtime = (int)json_integer_value(jRuntime); + } + json_t *jVote = jMovie.objectByName("vote_average"); + if(json_is_real(jVote)) { + voteAverage = json_real_value(jVote); + } + json_t *jTagline = jMovie.objectByName("tagline"); + if(json_is_string(jTagline)) { + tagline = json_string_value(jTagline); + } +} + +int cMovieDbMovie::ParseJSONForMovieId(string movieSearchString) { + //convert searchstring to lower case + transform(movieSearchString.begin(), movieSearchString.end(), movieSearchString.begin(), ::tolower); + cJsonLoader root(json.c_str()); + if (!root.isObject()) { + return -1; + } + json_t *results = root.objectByName("results"); + if(!json_is_array(results)) { + return -1; + } + size_t numResults = json_array_size(results); + for (size_t res = 0; res < numResults; res++) { + json_t *result = json_array_get(results, res); + if (!json_is_object(result)) { + return -1; + } + json_t *title = json_object_get(result, "title"); + if (!json_is_string(title)) { + return -1; + } + string resultTitle = json_string_value(title); + //convert result to lower case + transform(resultTitle.begin(), resultTitle.end(), resultTitle.begin(), ::tolower); + json_t *jId = json_object_get(result, "id"); + if (json_is_integer(jId)) { + int id = (int)json_integer_value(jId); + searchResult sRes; + sRes.id = id; + sRes.distance = sentence_distance(resultTitle, movieSearchString); + resultSet.push_back(sRes); + } + } + return FindBestResult(); +} + +int cMovieDbMovie::FindBestResult(void) { + int resID = -1; + int bestMatch = -1; + int numResults = resultSet.size(); + for (int i=0; iDump(); + } +} -- cgit v1.2.3