网址的简单 深搜

我和小武打算写一个像火车头的接口,今天开工,我就写了个网址的接口。就是根据网址的相似性,来变化出延续的网址

主要练习啦深搜,哎....真难为我这懒人啦

主函数:

#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;
}
View Code

 

 接口:

#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 
View Code

其他的 事关 公司 机密,就不贴啦

posted @ 2013-08-06 17:18  煮人为乐  阅读(258)  评论(0编辑  收藏  举报