html stripping and string length limits
This commit is contained in:
parent
fe1e2693b8
commit
eb55e76836
1 changed files with 107 additions and 1 deletions
108
feed.c
108
feed.c
|
@ -30,6 +30,8 @@ static int feed_cmd_add( const CmdParams *cmdparams );
|
||||||
static int feed_cmd_del( const CmdParams *cmdparams );
|
static int feed_cmd_del( const CmdParams *cmdparams );
|
||||||
static int feed_set_exclusions_cb( const CmdParams *cmdparams, SET_REASON reason );
|
static int feed_set_exclusions_cb( const CmdParams *cmdparams, SET_REASON reason );
|
||||||
static void FeedDownLoadHandler(void *ptr, int status, char *data, int datasize);
|
static void FeedDownLoadHandler(void *ptr, int status, char *data, int datasize);
|
||||||
|
char *trim (char *tmp);
|
||||||
|
|
||||||
Bot *feed_bot;
|
Bot *feed_bot;
|
||||||
typedef struct feeddata {
|
typedef struct feeddata {
|
||||||
mrss_t *mrss;
|
mrss_t *mrss;
|
||||||
|
@ -96,6 +98,110 @@ ModuleEvent module_events[] =
|
||||||
NS_EVENT_END()
|
NS_EVENT_END()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
html_trim_check (char *tmp)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
while (*tmp)
|
||||||
|
{
|
||||||
|
if (*tmp == '>')
|
||||||
|
return i;
|
||||||
|
tmp++;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
html_trim (char *tmp)
|
||||||
|
{
|
||||||
|
int i, j, l, len;
|
||||||
|
char *ret;
|
||||||
|
|
||||||
|
tmp = trim (tmp);
|
||||||
|
len = strlen (tmp);
|
||||||
|
|
||||||
|
|
||||||
|
ret = malloc (sizeof (char) * (len + 1));
|
||||||
|
|
||||||
|
for (i = j = 0; i < len; i++)
|
||||||
|
{
|
||||||
|
if (tmp[i] != '<' || !(l = html_trim_check (tmp + i)))
|
||||||
|
ret[j++] = tmp[i];
|
||||||
|
else
|
||||||
|
i += l;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret[j] = 0;
|
||||||
|
free (tmp);
|
||||||
|
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
trim (char *tmp)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
int len, j;
|
||||||
|
char *ret;
|
||||||
|
int q, ok = 0;
|
||||||
|
|
||||||
|
while (tmp[i] == ' ' || tmp[i] == '\t' || tmp[i] == '\r' || tmp[i] == '\n')
|
||||||
|
tmp++;
|
||||||
|
|
||||||
|
i = strlen (tmp);
|
||||||
|
i--;
|
||||||
|
|
||||||
|
while (tmp[i] == ' ' || tmp[i] == '\t' || tmp[i] == '\r' || tmp[i] == '\n')
|
||||||
|
i--;
|
||||||
|
|
||||||
|
tmp[i + 1] = 0;
|
||||||
|
|
||||||
|
len = strlen (tmp);
|
||||||
|
|
||||||
|
if (len > 400)
|
||||||
|
{
|
||||||
|
ok = 1;
|
||||||
|
len = 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = malloc (sizeof (char) * (len + 1 + (ok ? 3 : 0)));
|
||||||
|
|
||||||
|
for (i = j = q = 0; i < len; i++)
|
||||||
|
{
|
||||||
|
if (tmp[i] == '\t' || tmp[i] == ' ' || tmp[i] == '\v' || tmp[i] == '\r'
|
||||||
|
|| tmp[i] == '\n')
|
||||||
|
{
|
||||||
|
if (!q)
|
||||||
|
{
|
||||||
|
q = 1;
|
||||||
|
ret[j++] = ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
q = 0;
|
||||||
|
ret[j++] = tmp[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ok)
|
||||||
|
{
|
||||||
|
ret[j++] = '.';
|
||||||
|
ret[j++] = '.';
|
||||||
|
ret[j++] = '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
ret[j++] = 0;
|
||||||
|
|
||||||
|
tmp = strdup (ret);
|
||||||
|
free (ret);
|
||||||
|
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/** @brief feed_cmd_list
|
/** @brief feed_cmd_list
|
||||||
|
@ -288,7 +394,7 @@ static void CheckFeed(feeddata *ptr) {
|
||||||
{
|
{
|
||||||
irc_chanprivmsg(feed_bot, ptr->channel,"title: %s", item->title);
|
irc_chanprivmsg(feed_bot, ptr->channel,"title: %s", item->title);
|
||||||
irc_chanprivmsg(feed_bot, ptr->channel,"link: %s", item->link);
|
irc_chanprivmsg(feed_bot, ptr->channel,"link: %s", item->link);
|
||||||
irc_chanprivmsg(feed_bot, ptr->channel,"description: %s", item->description);
|
irc_chanprivmsg(feed_bot, ptr->channel,"description: %s", html_trim(item->description));
|
||||||
irc_chanprivmsg(feed_bot, ptr->channel,"author: %s", item->author);
|
irc_chanprivmsg(feed_bot, ptr->channel,"author: %s", item->author);
|
||||||
irc_chanprivmsg(feed_bot, ptr->channel,"comments: %s", item->comments);
|
irc_chanprivmsg(feed_bot, ptr->channel,"comments: %s", item->comments);
|
||||||
irc_chanprivmsg(feed_bot, ptr->channel,"pubDate: %s", item->pubDate);
|
irc_chanprivmsg(feed_bot, ptr->channel,"pubDate: %s", item->pubDate);
|
||||||
|
|
Reference in a new issue