我和小武打算写一个像火车头的接口,今天开工,我就写了个网址的接口。就是根据网址的相似性,来变化出延续的网址
主要练习啦深搜,哎....真难为我这懒人啦
主函数:
#include<stdio.h> #include<string.h> #include "UrlCheck.h" int main() { struct HttpInfo a[10]; char szDest[1000][256]; int num , i; strcpy(a->szHttpUrl ,"http://movie.douban.com/##/##?start=##&type=T"); strcpy(a->szWebSpecies, "爱情|动作~helle|word|hihi~12|13|14~"); strcpy(a->szCodingKind, "utf~sss~num~"); HttpHatGet(a , szDest, &num); for(i = 0 ;i < num ; i++) { printf("%s\n", szDest[i]); } return 0; }
接口:
#include<stdio.h> #include<string.h> #include<string.h> #include "lyPublic/lyCodeConvert.h" #include "UrlCheck.h" #pragma comment (lib , "libmysql.lib") #define URLLONG 200 /* strHttpInfo:网址的信息 szDest:需要保存的组合后的URL iNum:统计URL的个数 */ //1级 2级 // char szHttpUrl[256];//网址 http://movie.douban.com/##/##?start=##&type=T // char szWebSpecies[512];//类别 动作|爱情| ~ num|utf ~阿庆|我操~ // char szCodingKind[256];//编码种类 ufl ~ num~ 妹夫的~ //注意 : 类别和 编码种类的后面都要接 ~ 分隔符 //切词 void GetStrFromChar(char *szStr ,char *szGet) { char *p =NULL , *q = NULL; int len , n; len = strlen(szStr); q = szStr; p = strstr(q, "~"); if( p == NULL) { p = strstr(q, "|"); //每个小块,切到最后时,直接Copy if (p == NULL) { strcpy(szGet, szStr); return; } } n = p - q ; strncpy(szGet, szStr, n); } //由传递的szCod类型指示,转化szStr到szUtf上 void GetUtf(char *szCod , char *szStr,char *szUtf) { char *p; char TranslateEnd[URLLONG] = ""; p = szCod; if (*p == 'u') { CodeConvert(szStr, TranslateEnd , sizeof(TranslateEnd) , 2); strcpy(szUtf, TranslateEnd); } else if(*p == 'n' || *p == 's') { strcpy(szUtf, szStr); } } /* svHttpUrl :网址信息 svWebSpecies :要被转化的内容 svCodingKing:要被转化的 类型 szDest : 存储 转化好的HTTP iUrlNum : 网址数量 */ //进行深搜 void dfsUrl(char *svHttpUrl, char *svWebSpecies,char *svCodingKing ,char szDest[][256], int *iUrlNum) { char *p = NULL, *q = NULL; char *p1 = NULL, *q1 = NULL; char *f1 = NULL , *f2 = NULL; char *PWeb = NULL; //动作指针 char szStr[URLLONG] = ""; //爱情 char szWeb[URLLONG] = ""; //爱情|动作|喜剧 char szCod[URLLONG] = ""; //uft char szUtf[URLLONG] = ""; char sdHttp[URLLONG] = "";//变换后的HTTP char sqHttp[URLLONG] = ""; int len ,lenStr ,at; f1 = strstr(svHttpUrl, "##"); if(f1 == NULL) //当HTPP中没有##时,说明都变过来啦。要存储一次 { strcpy(szDest[*iUrlNum], svHttpUrl); (*iUrlNum)++; return; } *f1 = '%'; *(f1+1) = 's'; //保存HTTP,以便深都回溯 strcpy(sqHttp, svHttpUrl); GetStrFromChar(svWebSpecies, szWeb); GetStrFromChar(svCodingKing, szCod); len = strlen(szWeb); at = 0; q = svCodingKing; PWeb = szWeb; while(at < len -1) { GetStrFromChar(PWeb,szStr); GetUtf(szCod , szStr, szUtf); sprintf(sdHttp, svHttpUrl , szUtf); lenStr = strlen(szWeb); p = svWebSpecies; p1 = p; p += lenStr + 1; q1 = q; q +=4; //深搜 dfsUrl(sdHttp, p, q, szDest, iUrlNum); //还原HTTP 和 每段词 strcpy(svHttpUrl, sqHttp); q = q1; //切词后要把前一段 切掉 at += strlen(szStr)+1; PWeb += strlen(szStr)+1; memset(szStr, 0 ,sizeof(szStr)); memset(szUtf, 0 ,sizeof(szUtf)); } } void HttpHatGet(struct HttpInfo *strHttpInfo, char szDest[][256], int *iUrlNum) { *iUrlNum = 0; dfsUrl(strHttpInfo->szHttpUrl, strHttpInfo->szWebSpecies , strHttpInfo->szCodingKind , szDest , iUrlNum); }
头文件:
#ifndef _URLCHECK_H_ #define _URLCHECK_H_ #ifdef __cplusplus extern "C"{ #endif struct HttpInfo { char szHttpUrl[256];//网址 char szSupplierName[256];//数据源名字 char szWebSpecies[512];//类别 char szCodingKind[256];//编码种类 int iPageStart;//起始页 int iPageEnd;//结束页 int iPageRule;//页数增加的规则 int iSupplierId; }; /* strHttpInfo:网址的信息 szDest:需要保存的组合后的URL iNum:统计URL的个数 */ void HttpHatGet(struct HttpInfo *strHttpInfo, char szDest[][256], int *iUrlNum); /* void dfsUrl(char *svHttpUrl, char *svWebSpecies,char *svCodingKing ,char szDest[][256], int *iUrlNum); void GetUtf(char *szCod , char *szUtf); void GetStrFromChar(char *szStr ,char *szGet);*/ #ifdef __cplusplus } #endif #endif
其他的 事关 公司 机密,就不贴啦