38 #include <libxml/HTMLparser.h> 45 #define COMPARE(a, b) (!_stricmp((a), (b))) 47 #define COMPARE(a, b) (!strcasecmp((a), (b))) 75 if(writerData == NULL)
78 writerData->append(data, size*nmemb);
94 fprintf(stderr,
"Failed to create CURL connection\n");
100 fprintf(stderr,
"Failed to set error buffer [%d]\n", code);
137 const xmlChar **attributes)
141 if(
COMPARE((
char *)name,
"TITLE")) {
157 if(
COMPARE((
char *)name,
"TITLE"))
166 const xmlChar *chars,
170 context->
title.append((
char *)chars, length);
178 const xmlChar *chars,
190 static void cdata(
void *voidContext,
191 const xmlChar *chars,
241 htmlParserCtxtPtr ctxt;
244 ctxt = htmlCreatePushParserCtxt(&
saxHandler, &context,
"", 0,
"",
245 XML_CHAR_ENCODING_NONE);
247 htmlParseChunk(ctxt, html.c_str(), html.size(), 0);
248 htmlParseChunk(ctxt,
"", 0, 1);
250 htmlFreeParserCtxt(ctxt);
252 title = context.
title;
255 int main(
int argc,
char *argv[])
264 fprintf(stderr,
"Usage: %s <url>\n", argv[0]);
272 if(!
init(conn, argv[1])) {
273 fprintf(stderr,
"Connection initializion failed\n");
291 printf(
"Title: %s\n", title.c_str());
static int writer(char *data, size_t size, size_t nmemb, std::string *writerData)
static bool init(CURL *&conn, char *url)
static void StartElement(void *voidContext, const xmlChar *name, const xmlChar **attributes)
int main(int argc, char *argv[])
static void handleCharacters(Context *context, const xmlChar *chars, int length)
#define curl_easy_setopt(handle, option, value)
static void cdata(void *voidContext, const xmlChar *chars, int length)
static std::string buffer
#define CURL_GLOBAL_DEFAULT
CURL_EXTERN CURL * curl_easy_init(void)
static void parseHtml(const std::string &html, std::string &title)
CURL_EXTERN void curl_easy_cleanup(CURL *curl)
static void EndElement(void *voidContext, const xmlChar *name)
CURL_EXTERN CURLcode curl_global_init(long flags)
curl_global_init() globally initializes curl given a bitwise set of the different features of what to...
static htmlSAXHandler saxHandler
static void Characters(void *voidContext, const xmlChar *chars, int length)
static char errorBuffer[CURL_ERROR_SIZE]
CURL_EXTERN CURLcode curl_easy_perform(CURL *curl)