static lyrics_t *handle_lyrics_page(const char *page_name) { char *url, *page, *lyrics; lyrics_t *result; url = url_escape_location("http://lyrics.wikia.com", page_name); page = url_fetch(url); if (!page) { musicd_log(LOG_ERROR, "lyrics", "can't fetch lyrics page"); free(url); return NULL; } lyrics = parse_lyrics_page(page); free(page); if (!lyrics) { free(url); return NULL; } result = lyrics_new(); result->lyrics = lyrics; result->provider = strcopy("LyricWiki"); result->source = url; return result; }
GList * lyrics_lyrixat_parse (cb_object * capo) { /* lyrix.at does not offer any webservice -> use the searchfield to get some results */ GList * result_list = NULL; gchar * search_begin_tag = capo->cache->data; gint ctr = 0; while (continue_search (g_list_length (result_list),capo->s) && (search_begin_tag = strstr (search_begin_tag+1,SEARCH_START_TAG) ) && MAX_TRIES >= ctr++) { gchar * url_tag = search_begin_tag; url_tag = strstr (url_tag,URL_TAG_BEGIN); if (url_tag != NULL) { gchar * title_tag = strstr (url_tag,URL_TAG_ENDIN); if (title_tag) { gchar * title_end = strstr (title_tag,TITLE_END); if (title_end != NULL) { gsize tag_end_len = (sizeof URL_TAG_ENDIN) - 1; gchar * title = copy_value (title_tag + tag_end_len,title_end); if (title != NULL) { if (levenshtein_strnormcmp (capo->s,title,capo->s->title) <= capo->s->fuzzyness) { gchar * url_part = copy_value (url_tag+strlen (URL_TAG_BEGIN),title_tag); if (url_part != NULL) { gchar * url = g_strdup_printf ("http://lyrix.at/de%s",url_part); parse_lyrics_page (url,&result_list,capo); g_free (url); g_free (url_part); } } g_free (title); } } } } } return result_list; }