CC = gcc
-LIBS_GTRANSLATE = `pkg-config rest --libs`
+LIBS_TMDB = `pkg-config rest-0.6 --libs`
-FLAGS_GTRANSLATE = `pkg-config rest --cflags`
+FLAGS_TMDB = `pkg-config rest-0.6 --cflags` -I../src/
-LIBS_GMOVIES = `pkg-config libxml-2.0 rest --libs`
+LIBS_GTRANSLATE = `pkg-config rest-0.6 --libs`
-FLAGS_GMOVIES = `pkg-config libxml-2.0 rest --cflags`
+FLAGS_GTRANSLATE = `pkg-config rest-0.6 --cflags`
-all: gtranslate gmovies
+LIBS_GMOVIES = `pkg-config libxml-2.0 rest-0.6 --libs`
+
+FLAGS_GMOVIES = `pkg-config libxml-2.0 rest-0.6 --cflags`
+
+all: gtranslate gmovies tmdb
gtranslate: gtranslate.o
$(CC) -o gtranslate gtranslate.o $(LIBS_GTRANSLATE)
gmovies.o: gmovies.c
$(CC) -g -c gmovies.c $(FLAGS_GMOVIES)
+
+tmdb: test_tmdb.o tmdb_movie.o
+ $(CC) -ggdb -o tmdb test_tmdb.o tmdb_movie.o $(LIBS_TMDB)
+
+tmdb_movie.o: ../src/tmdb_movie.c
+ $(CC) -ggdb -c ../src/tmdb_movie.c $(FLAGS_TMDB)
+
+test_tmdb.o: test_tmdb.c
+ $(CC) -ggdb -c test_tmdb.c $(FLAGS_TMDB)
clean:
- rm -rf gtranslate gtranslate.o gmovies gmovies.o *~
+ rm -rf gtranslate gtranslate.o gmovies gmovies.o tmdb tmdb_movie.o test_tmdb.o *~
#include "tmdb_movie.h"
-void query_tmdb(const gchar *name);
+static void do_get_info(TMDBMovie *movie);
-static void parse_child_element(gpointer key, gpointer element, gpointer data);
-
-RestXmlNode *get_xml(RestProxyCall *call);
+static void parse_xml_response(RestProxyCall *call, TMDBMovie *movie);
TMDBMovie *tmdb_get_info(const gchar *name) {
TMDBMovie *movie = g_new0(TMDBMovie, 1);
- movie->rating = 10;
- movie->released = g_date_new_dmy(1, G_DATE_FEBRUARY, 2009);
+ movie->name = g_strdup(name);
+
+ do_get_info(movie);
- query_tmdb(name);
+ /*
+ * movie->rating = 10;
+ * movie->released = g_date_new_dmy(1, G_DATE_FEBRUARY, 2009);
+ */
return movie;
}
-void query_tmdb(const gchar *name) {
+static void do_get_info(TMDBMovie *movie) {
RestProxy *proxy;
RestProxyCall *call;
gchar *tmdb_function;
- const gchar *response;
- RestXmlNode *root;
- gssize len;
- /* Provider initialization, should be refactored. Maybe it can be reused between calls */
proxy = rest_proxy_new(TMDB_SERVICE_URL, FALSE);
call = rest_proxy_new_call(proxy);
- /* Generate the function string */
+ /* Generate the function string.
+ * It's METHOD/LANGUAGE/FORMAT/APIKEY/MOVIENAME,
+ * so the actual query puts that after the URL */
tmdb_function = g_strdup_printf("%s/%s/%s/%s/%s", TMDB_SEARCH_METHOD,
- TMDB_LANGUAGE, TMDB_FORMAT, TMDB_API_KEY, name);
+ TMDB_LANGUAGE, TMDB_FORMAT, TMDB_API_KEY, movie->name);
rest_proxy_call_set_function(call, tmdb_function);
/* The actual call */
rest_proxy_call_run(call, NULL, NULL);
- get_xml(call);
+ parse_xml_response(call, movie);
/* Object disposal, should be refactored. */
g_object_unref(call);
+ g_free(tmdb_function);
g_object_unref(proxy);
}
-RestXmlNode *get_xml(RestProxyCall *call) {
+static void parse_xml_response(RestProxyCall *call, TMDBMovie *movie) {
RestXmlParser *parser;
RestXmlNode *root;
- GError *error = NULL;
+ RestXmlNode *tmp;
+ RestXmlNode *field;
+ gint total_results;
parser = rest_xml_parser_new();
root = rest_xml_parser_parse_from_data(parser, rest_proxy_call_get_payload(
call), rest_proxy_call_get_payload_length(call));
- g_hash_table_foreach(root->children, (GHFunc) parse_child_element, NULL);
+ tmp = g_hash_table_lookup(root->children, g_intern_string(
+ "opensearch:totalResults"));
- g_object_unref(parser);
+ total_results = atof(tmp->content);
+
+ tmp = g_hash_table_lookup(root->children, g_intern_string("movies"));
+
+ tmp = g_hash_table_lookup(tmp->children, g_intern_string("movie"));
+
+ while (tmp != NULL) {
+
+ field = g_hash_table_lookup(tmp->children,
+ g_intern_string("popularity"));
+ movie->popularity = atoi(field->content);
+
+ field = g_hash_table_lookup(tmp->children, g_intern_string("name"));
+ movie->name = g_strdup(field->content);
+
+ field = g_hash_table_lookup(tmp->children, g_intern_string(
+ "alternative_name"));
+ movie->alternative_name = g_strdup(field->content);
+
+ field = g_hash_table_lookup(tmp->children, g_intern_string("id"));
+ movie->id = atoi(field->content);
- return root;
+ field = g_hash_table_lookup(tmp->children, g_intern_string("imdb_id"));
+ movie->imdb_id = g_strdup(field->content);
+
+ field = g_hash_table_lookup(tmp->children, g_intern_string("url"));
+ movie->url = g_strdup(field->content);
+
+ field = g_hash_table_lookup(tmp->children, g_intern_string("rating"));
+ movie->rating = atof(field->content);
+
+ field = g_hash_table_lookup(tmp->children, g_intern_string("released"));
+ movie->released = g_date_new();
+ g_date_set_parse(movie->released, field->content);
+
+ field = g_hash_table_lookup(tmp->children, g_intern_string("overview"));
+ movie->overview = g_strdup(field->content);
+
+ /* tmp = tmp->next; */
+ tmp = NULL;
+ }
+
+ g_object_unref(parser);
+ rest_xml_node_unref(root);
}
-static void parse_child_element(gpointer key, gpointer element, gpointer data) {
+void tmdb_movie_unref(TMDBMovie *movie) {
+
+ g_free(movie->alternative_name);
+ g_free(movie->imdb_id);
+ g_free(movie->name);
+ g_free(movie->overview);
+ g_free(movie->url);
- RestXmlNode *node = (RestXmlNode*) element;
+ if (movie->released != NULL)
+ g_date_free(movie->released);
+
+ g_free(movie);
+}
- g_print("%s: ", key);
- if (g_hash_table_size(node->children) == 0) {
- g_print("%s", node->content);
+void tmdb_movie_print(const TMDBMovie *movie) {
+
+ g_print("themoviedb.org - The Movie Database.\n");
+ g_print("Movie name: %s\n", GET_MESSAGE(movie->name));
+ g_print("Alternate name: %s\n", GET_MESSAGE(movie->alternative_name));
+ g_print("Rating: %f\n", movie->rating);
+ g_print("Overview:\n %s\n", GET_MESSAGE(movie->overview));
+ g_print("ID: %d\n", movie->id);
+ g_print("IMDB ID: %s\n", GET_MESSAGE(movie->imdb_id));
+ g_print("Popularity: %d\n", movie->popularity);
+ g_print("URL: %s\n", GET_MESSAGE(movie->url));
+ g_print("Runtime: %d\n", movie->runtime);
+ if (g_date_valid(movie->released)) {
+ g_print("Released: %d-%d-%d\n", g_date_get_year(movie->released),
+ g_date_get_month(movie->released), g_date_get_day(
+ movie->released));
}
- g_print("\n");
- g_hash_table_foreach(node->children, (GHFunc) parse_child_element, NULL);
}