亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rss.cpp

?? 一個C++寫的RSS解析器,需要libxml2.rpm支持
?? CPP
字號:
#include "string.h"
#include "stdio.h"

#include "rss.h"
#include "utils.h"
#include "htmlformat.h"


#ifdef LINUX_REDHAT
#include <time.h>
#endif



char* g_version = NULL;
struct ITEM *g_head = NULL;

struct IMAGE* malloc_image()
{
	struct IMAGE* pImage = (struct IMAGE*)malloc(sizeof(struct IMAGE));

	memset(pImage, 0, sizeof(struct IMAGE));

	pImage->link = NULL;
	pImage->title = NULL;
	pImage->url = NULL;

	return pImage;
};

void free_image(struct IMAGE* image)
{
	if(image == NULL)
		return;
	
	if(image->link)
		free(image->link);
	if(image->title)
		free(image->title);
	if(image->url)
		free(image->url);
};

struct ITEM* malloc_item()
{
	struct ITEM* pItem = (struct ITEM*)malloc(sizeof(struct ITEM));

	memset(pItem, 0, sizeof(struct ITEM));

	pItem->author = NULL;
	pItem->description = NULL;
	pItem->link = NULL;
	pItem->pubdate = NULL;
	pItem->title = NULL;
	pItem->source = NULL;

	pItem->pNext= NULL;
	
	pItem->is_inserted = 0;
	pItem->is_overdue = 0;

	return pItem;
};

void free_item(struct ITEM* item)
{
	if(item == NULL)
		return;
	
	if(item->author)
		free(item->author);
	if(item->description)
		free(item->description);
	if(item->link)
		free(item->link);
	if(item->pubdate)
		free(item->pubdate);
	if(item->title)
		free(item->title);
	if(item->source)
		free(item->source);
		
	item->pNext= NULL;
}

struct Channel* malloc_channel()
{
	struct Channel* pChannel = (struct Channel*)malloc(sizeof(struct Channel));

	memset(pChannel, 0, sizeof(struct Channel));

	pChannel->description = NULL;
	pChannel->generator = NULL;
	pChannel->language = NULL;
	pChannel->link = NULL;
	pChannel->pubdate = NULL;
	pChannel->title = NULL;
	pChannel->pubdate = NULL;

	pChannel->pItem = NULL;
	pChannel->pNext = NULL;
	pChannel->pImage = NULL;

	pChannel->item_size = 0;

	return pChannel;
}

void free_channel(struct Channel* channel)
{
	if(channel == NULL);
		return;
		
	if(channel->description)
		free(channel->description);
	if(channel->generator)
		free(channel->generator);
	if(channel->language)
		free(channel->language);
	if(channel->link)
		free(channel->link);
	if(channel->title)
		free(channel->title);
	if(channel->pubdate)
		free(channel->pubdate);

	channel->item_size = 0;

	channel->pItem = NULL;
	channel->pNext = NULL;
	channel->pImage = NULL;

	free(channel);
}


void insertSortList(struct ITEM* pItem)
{//最近時間的節點在前
	if(g_head == NULL)
	{
		g_head = pItem;
		return;	
	}
	
	struct ITEM *pCur = g_head;
	struct ITEM *pBefore = NULL;
	int ret = 0;
		
	while(pCur)
	{
		//printf("cur: %s; %s\n", pCur->pubdate, pItem->pubdate);
		ret = strcmp(pCur->pubdate, pItem->pubdate);
		if(ret <= 0)
		{//插入節點早于當前節點或者相同時間
			if(pBefore == NULL)
			{//鏈表頭
				//printf("1111\n");
				pItem->pNext = g_head;
				g_head = pItem;
			}else
			{
				//printf("2222\n");
				pItem->pNext = pBefore->pNext;
				pBefore->pNext = pItem;
			}
			
			break;
		}else
		{
			if(pCur->pNext == NULL)
			{//鏈表尾
				//printf("3333\n");
				pCur->pNext = pItem;
				
				break;
			}
			
			//printf("4444\n");
			pBefore = pCur;
			pCur = pCur->pNext;
		}
	}

}


char* formate_issuetime(char* info)
{//沒有格式化秒級
	///////////
	//格式化時間
	char* issuetime = (char*)malloc(sizeof(char)*20);
	memset(issuetime, 0, 20);
	char temp[5];
				
	char* year_end = strchr(info, '-');
	if(year_end == NULL)
		NULL;

	memset(temp, 0, 5);
	strncpy(temp, info, (year_end - info));
	int year = atoi(temp);
	if(year < 100)
	{
		if(year < 50)
			year += 2000;
		else
			year += 1900;
	}
				
	sprintf(issuetime, "%d-", year);
					
	/////////
	char* month_end = strchr(year_end+1, '-');
	if(month_end == NULL)
		NULL;

	memset(temp, 0, 5);
	int len = (month_end - (year_end+1));
	if(len > 2 || len <= 0)
		NULL;
					
	strncpy(temp, year_end+1, len);
	if(len == 2)
	{
		strcat(issuetime, temp);
		strcat(issuetime, "-");
	}else
	{
		strcat(issuetime, "0");
		strcat(issuetime, temp);
		strcat(issuetime, "-");
	}
				
	//////////
	char* other = NULL;
	char* day_end = strchr(month_end+1, 32);//32為空格
	
	memset(temp, 0, 5);
	len = 2;
	if(day_end == NULL)
	{
		strncpy(temp, month_end+1, len);
	}else
	{
		len = day_end - (month_end+1);
		strncpy(temp, month_end+1, len);	
	}
			
	len = strlen(temp);
	if(len > 2 || len <= 0)
		NULL;

	if(len == 2)
	{
		strcat(issuetime, temp);
	}else
	{
		strcat(issuetime, "0");
		strcat(issuetime, temp);
	}
	
	if(day_end)
		strcat(issuetime, day_end);
		

	return issuetime;
}

struct Channel* createRss(char* rss, struct Outline* outline)
{
	xmlNodePtr cur;
	xmlDocPtr doc;
	
	//////////////
	time_t now;
	int interval = 10*60;//10分鐘
    	struct tm *timenow;
    	char curtime[32];

	now = time(NULL);

    	timenow = localtime(&now);
    	strftime(curtime, 20, "%Y-%m-%d %H:%M:%S", timenow);
	//////////////

	HtmlFormat* pHtmlFormat = new HtmlFormat();

	char xpath[ XPATH_LEN ];
	char *info = NULL;	char *pub_date = NULL;	int j = 1;
		doc = xmlParseFile( rss);
    	if ( doc == NULL )
    	{
    		delete pHtmlFormat;
    		return NULL;
    	}
	
	cur = xmlDocGetRootElement( doc );    
	if ( cur == NULL )
    	{
       		xmlFreeDoc( doc );
       		delete pHtmlFormat;
       		return NULL;
    	}

	struct Channel* channel = malloc_channel();
	
	cur = get_location( doc, "//rss" );
	g_version = (char*)xmlGetProp( cur, ( const xmlChar* ) "version" );

	sprintf( xpath, "//rss/channel/title");
	info = get_locationContent( doc, xpath );
   	if (info)
   	{
   		TRIM(info);
		channel->title = CodeConvert(info, METHOD_UTF8_TO_GB2312);
   	}
		
	sprintf( xpath, "//rss/channel/description");
	info = get_locationContent( doc, xpath );
   	if (info)
	{
   		TRIM(info);
		channel->description = CodeConvert(info, METHOD_UTF8_TO_GB2312);
   	}

	sprintf( xpath, "//rss/channel/link");
	info = get_locationContent( doc, xpath );
   	if (info)
   	{
   		TRIM(info);
		channel->link = (char*)strdup(info);
	}

	sprintf( xpath, "//rss/channel/language");
	info = get_locationContent( doc, xpath );
   	if (info)
   	{
   		TRIM(info);
		channel->language = (char*)strdup(info);
	}else
	{
		channel->language = (char*)strdup("zh-cn");//default is "zh-cn"
	}

	sprintf( xpath, "//rss/channel/pubDate");
	info = get_locationContent( doc, xpath );
	if (info)
   	{
		struct tm datetime;

   		TRIM(info);
		
		strptime(info, "%a, %d %b %Y %H:%M:%S %z", &datetime);
		strftime(info, 20, "%Y-%m-%d %H:%M:%S", &datetime);

		channel->pubdate = (char*)strdup(info);
   	}

	struct IMAGE* pImage = malloc_image();

	sprintf( xpath, "//rss/channel/image/title");
	info = get_locationContent( doc, xpath );
	if (info)
   	{
   		pHtmlFormat->format_code_convert(info);
		pImage->title = (char*)strdup(info);
   	}

	sprintf( xpath, "//rss/channel/image/link");
	info = get_locationContent( doc, xpath );
   	if (info)
   	{
   		TRIM(info);
		pImage->link = (char*)strdup(info);
	}

	sprintf( xpath, "//rss/channel/image/url");
	info = get_locationContent( doc, xpath );
   	if (info)
   	{
   		TRIM(info);
		pImage->url = (char*)strdup(info);
	}

	channel->pImage = pImage;

	g_head = NULL;
    	for ( j = 1;;j++ )
   	{
		memset(xpath, 0, XPATH_LEN);
		sprintf( xpath, "//rss/channel/item[%d]/title", j);
		if(get_locationContent (doc, xpath) == NULL)
			break;

		struct ITEM* pItem = malloc_item();

		sprintf( xpath, "//rss/channel/item[%d]/title", j);
		info = get_locationContent( doc, xpath );
		if (info)
		{
	   		pHtmlFormat->format_code_convert(info);
        		pItem->title = (char*)strdup(info);
		}

		sprintf( xpath, "//rss/channel/item[%d]/source", j);
		info = get_locationContent( doc, xpath );
		if (info)
		{
	   		TRIM(info);
        	pItem->source = CodeConvert(info, METHOD_UTF8_TO_GB2312);
		}
        
		sprintf( xpath, "//rss/channel/item[%d]/link", j);
		info = get_locationContent( doc, xpath );
		if (info)
		{
			TRIM(info);
			pItem->link = (char*)strdup(info);
		}

		sprintf( xpath, "//rss/channel/item[%d]/description", j);
		info = get_locationContent( doc, xpath );
		if (info)
    		{
			pHtmlFormat->format_code_convert(info, outline->begintag, outline->endtag);
			pItem->description = (char*)strdup(info);

			if(info)
				free(info);
    		}
	
		sprintf( xpath, "//rss/channel/item[%d]/pubDate", j);
		info = get_locationContent( doc, xpath );
		if (info)
		{
	        	struct tm datetime;
			
   			TRIM(info);

			if(strchr(info, '-') == NULL)
			{//Not format.
				char* pTemp = (char*)strdup(info);
			
				strptime(info, "%a, %d %b %Y %H:%M:%S %z", &datetime);
				strftime(info, 20, "%Y-%m-%d %H:%M:%S", &datetime);
	
				if(strncmp(info, "1900", 4) != 0)
					pItem->pubdate = (char*)strdup(info);
				else
					pItem->pubdate = (char*)strdup(pTemp);
					
				free(pTemp);
			}else
			{//Formatted.
				char issuretime[20];
				memset(issuretime, 0, 20);
				
				strncpy(issuretime, info, strlen("2006-00-00 00:00:00"));
				
				pItem->pubdate = formate_issuetime(issuretime);
			}
			
		}else
		{
			now -= interval;
		    	timenow = localtime(&now);
		    	strftime(curtime, 20, "%Y-%m-%d %H:%M:%S", timenow);
		    	
    			pItem->pubdate = (char*)strdup(curtime);
		}
		
		/*
		if(strcmp(pItem->pubdate, curtime) > 0)
		{//發布時間晚于當前時間,丟棄
			printf("當前時間:%s; 鏈接時間:%s\n", curtime, pItem->pubdate);
			
			free_item(pItem);
			continue;
		}
		*/
		
		insertSortList(pItem);
		
		channel->item_size++;
	}
	
	channel->pItem = g_head;
    	
	xmlFreeDoc( doc );
		
	delete pHtmlFormat;
	
	return channel;
}

void rssVersion(char* version)
{
	strcpy(version, g_version);

	if(g_version)
		free(g_version);

	g_version = NULL;
}

void destroyRss(struct Channel* channel)
{
	struct Channel* pHead = channel;
	struct Channel* pNext = NULL;

	struct ITEM* cur_item = NULL;
	struct ITEM* next_item = NULL;

	if(g_version)
		free(g_version);

	g_version = NULL;

	if(pHead == NULL)
		return;

	while(pHead)
	{
		pNext = pHead->pNext;

		free_image(pHead->pImage);

		cur_item = pHead->pItem;
		while(cur_item)
		{
			next_item = cur_item->pNext;
			free_item(cur_item);

			cur_item = next_item;
		}

		free_channel(pHead);

		pHead = pNext;
	}
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产精品72免费观看| 成人欧美一区二区三区白人| 欧美日韩国产高清一区| 欧美丝袜丝交足nylons图片| 制服丝袜在线91| 国产亚洲综合在线| 中文字幕视频一区| 99精品欧美一区二区蜜桃免费 | 国产欧美日韩综合| 国产精品卡一卡二| 日韩专区中文字幕一区二区| 国产伦精品一区二区三区免费迷 | 久久成人久久鬼色| 久久久综合精品| 一区二区免费在线| 国产一区二区三区观看| 中文字幕的久久| 亚洲成在线观看| 国产永久精品大片wwwapp| 国产午夜精品久久| 在线观看日韩电影| 国产欧美一区二区精品秋霞影院| 国产91精品一区二区麻豆网站 | 亚洲精品一卡二卡| 成人h动漫精品一区二区| 日韩美一区二区三区| 亚洲永久精品国产| 一本大道综合伊人精品热热| 2017欧美狠狠色| 免费久久99精品国产| 欧美日韩不卡在线| 成人午夜电影网站| 综合欧美一区二区三区| 一本久久a久久免费精品不卡| 日韩电影在线观看一区| 3atv在线一区二区三区| 国产91色综合久久免费分享| 激情图区综合网| 日韩欧美在线观看一区二区三区| 日本不卡视频在线观看| 国产精品美女久久久久久久久| 成人h精品动漫一区二区三区| 亚洲国产成人porn| 日韩一区二区电影在线| 99久久99久久综合| 国产又粗又猛又爽又黄91精品| 亚洲福利视频一区二区| 欧美激情中文字幕| 精品日韩一区二区三区 | 亚洲风情在线资源站| 中文字幕av在线一区二区三区| 欧美一区二区精品| 国产精品综合一区二区| 欧美国产综合色视频| 日韩三级中文字幕| 欧美日韩精品综合在线| 成人黄色免费短视频| 国产在线看一区| 日本美女一区二区三区| 亚洲成人免费看| 一区二区三区在线视频观看| 欧美高清在线一区| 久久综合精品国产一区二区三区| 欧美一区二区三区视频在线观看| 91丨九色丨国产丨porny| 亚洲三级在线看| 国产精品你懂的| 国产午夜三级一区二区三| 欧美精品色综合| 国产精品一区二区不卡| 久99久精品视频免费观看| 国产精品欧美极品| 国产亚洲制服色| 国产午夜亚洲精品理论片色戒| 欧美成人精品二区三区99精品| 欧美猛男gaygay网站| 欧美色视频在线| 久久精品国产99国产| 日本美女一区二区三区视频| 日韩**一区毛片| 日日夜夜免费精品| 男男视频亚洲欧美| 日韩av不卡一区二区| 精品一区二区三区香蕉蜜桃| 经典三级在线一区| 国产精品99久久久久久有的能看| 久久成人免费日本黄色| 国内精品国产成人| 大桥未久av一区二区三区中文| 国产精品538一区二区在线| 精品一区二区在线观看| 国产99久久久国产精品| 色综合天天性综合| 日本成人在线电影网| 美女免费视频一区| 亚洲在线免费播放| 亚洲成人精品一区| 精品制服美女久久| 成人sese在线| 欧洲亚洲国产日韩| 91精品国产91久久久久久最新毛片| 欧美一级片在线看| 欧美极品另类videosde| 亚洲日本在线a| 日韩高清一区二区| 国产大陆a不卡| 麻豆高清免费国产一区| 国产精品一区免费在线观看| 99久久久久免费精品国产 | 日韩一区和二区| 国产亚洲一区字幕| 一区二区三区**美女毛片| 亚洲欧美激情一区二区| 国产91综合一区在线观看| 91视视频在线观看入口直接观看www | 国产99久久久国产精品潘金| 久久国产夜色精品鲁鲁99| 免费在线观看一区二区三区| 色八戒一区二区三区| 性感美女久久精品| 日韩国产一区二| 国产91清纯白嫩初高中在线观看 | 成人欧美一区二区三区| 亚洲成人激情自拍| 高清成人在线观看| 欧美人与禽zozo性伦| 亚洲国产高清在线观看视频| 午夜视频一区二区三区| 亚洲国产欧美在线| 国产精品影视网| 欧美日本韩国一区| 中文字幕一区二区三区四区不卡| 综合久久给合久久狠狠狠97色| 国产在线一区二区综合免费视频| 精品久久国产字幕高潮| 依依成人精品视频| 成人免费观看男女羞羞视频| 777久久久精品| 五月婷婷久久丁香| 麻豆91在线观看| 成人高清视频在线观看| 国产精品456| 激情小说欧美图片| 亚洲欧洲日韩av| 欧美精品色一区二区三区| 一区二区在线免费观看| 在线免费观看日本欧美| 91香蕉国产在线观看软件| 久久99热这里只有精品| 夜夜精品视频一区二区 | 美女视频免费一区| 欧美精品一区二区三区久久久| 成人sese在线| 久久精品日产第一区二区三区高清版 | 亚洲男人电影天堂| 色噜噜偷拍精品综合在线| 亚洲一区二区三区爽爽爽爽爽| 日韩精品一区二区在线观看| 麻豆91在线看| 国产亚洲一区字幕| 欧美三级视频在线| 成人免费视频播放| 五月综合激情网| 欧美日韩电影在线| 国产又黄又大久久| 亚洲一二三级电影| 久久综合一区二区| 日韩无一区二区| av亚洲产国偷v产偷v自拍| 成人动漫一区二区三区| 亚洲精品国产品国语在线app| 91亚洲国产成人精品一区二区三 | 亚洲国产成人av好男人在线观看| 678五月天丁香亚洲综合网| 日本sm残虐另类| 尤物在线观看一区| 国产精品激情偷乱一区二区∴| 日韩女优电影在线观看| 91小视频免费看| 国产精品一区二区久久不卡 | 久久综合精品国产一区二区三区| 欧美久久婷婷综合色| 色综合色综合色综合色综合色综合| 免费观看日韩电影| 石原莉奈在线亚洲二区| 国产精品乱码久久久久久| 日本韩国欧美一区二区三区| 另类欧美日韩国产在线| 亚洲人成亚洲人成在线观看图片| 日本一区二区三区久久久久久久久不 | 久久久精品综合| 久久国产精品99久久人人澡| 精品国产乱码久久久久久1区2区| 精品一二三四区| 欧美韩日一区二区三区| 欧美综合亚洲图片综合区| 蜜桃精品视频在线观看| 色狠狠色狠狠综合| 日本欧美肥老太交大片| 久久久久9999亚洲精品|