X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fmvs-minfo-provider.c;h=9b226751d6faf86b305c2209d0667ec3199a2c9e;hb=51a9a17c5b206963ae6b4e6964af0a8876f6015d;hp=5e4289f988245202e8f79a33be3d8be2da5fee6e;hpb=825f3ea4dbd5f431cc8cdb723aac93c88e9b8608;p=maevies diff --git a/src/mvs-minfo-provider.c b/src/mvs-minfo-provider.c index 5e4289f..9b22675 100644 --- a/src/mvs-minfo-provider.c +++ b/src/mvs-minfo-provider.c @@ -18,11 +18,15 @@ #include "mvs-minfo-provider.h" +#include +#include + #define TMDB_API_KEY "249e1a42df9bee09fac5e92d3a51396b" #define TMDB_LANGUAGE "en" #define TMDB_FORMAT "xml" #define TMDB_METHOD "Movie.search" #define TMDB_BASE_URL "http://api.themoviedb.org/2.1/%s/%s/%s/%s/%s" +#define TMDB_MOVIE_XPATH "/OpenSearchDescription/movies/movie" G_DEFINE_TYPE (MvsMInfoProvider, mvs_minfo_provider, G_TYPE_OBJECT) @@ -130,7 +134,58 @@ mvs_minfo_provider_new (void) } static void -parse_response (SoupSession *session, SoupMessage *message, +display_movie_info (xmlNodePtr node) +{ + xmlNodePtr cur_node = NULL; + + for (cur_node = node; cur_node; cur_node = cur_node->next) { + if (cur_node->type == XML_ELEMENT_NODE) { + gchar *value = xmlNodeGetContent (cur_node); + g_print ("[%s] = %s\n", cur_node->name, value); + } + } +} + +static void +iterate_list (xmlNodeSetPtr node_set) +{ + int i = 0; + + for (i = 0; i < node_set->nodeNr; i++) { + xmlNodePtr node = node_set->nodeTab[i]; + if (node->type == XML_ELEMENT_NODE) { + display_movie_info (node->children); + } + } +} + +static void +parse_xml (const char *xml_data, goffset length) +{ + xmlDocPtr document = xmlReadMemory (xml_data, length, + NULL, + NULL, + XML_PARSE_NOBLANKS | XML_PARSE_RECOVER); + g_return_if_fail (document); + + xmlXPathContextPtr context_ptr = xmlXPathNewContext (document); + + xmlXPathObjectPtr xpath_obj = + xmlXPathEvalExpression (TMDB_MOVIE_XPATH, context_ptr); + + xmlNodeSetPtr nodeset = xpath_obj->nodesetval; + + if (nodeset->nodeNr > 0) { + iterate_list (nodeset); + } + + xmlXPathFreeNodeSetList (xpath_obj); + xmlXPathFreeContext (context_ptr); + xmlFreeDoc (document); +} + +static void +response_callback (SoupSession *session, SoupMessage *message, gpointer user_data) { MvsMInfoProvider *self = MVS_MINFO_PROVIDER (user_data); @@ -146,8 +201,8 @@ parse_response (SoupSession *session, SoupMessage *message, mime = soup_message_headers_get_content_type (message->response_headers, NULL); - g_print ("Response OK. Mime type: %s\n", mime); - g_print ("Content:\n%s\n", message->response_body->data); + parse_xml (message->response_body->data, + message->response_body->length); } g_signal_emit (self, signals[RESPONSE_RECEIVED], 0); @@ -185,7 +240,7 @@ mvs_minfo_provider_query (MvsMInfoProvider *self, if (message) { soup_session_queue_message (session, message, - parse_response, self); + response_callback, self); message_queued = TRUE; }