c語(yǔ)言獲取直播吧最近一周nba比賽信息
就是用c語(yǔ)言的寫的一個(gè)簡(jiǎn)單http請(qǐng)求,并分析其響應(yīng),原理很簡(jiǎn)單,主要是分析http響應(yīng),麻煩的是提取其中的比賽信息
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <errno.h>
#include <sys/socket.h>
#include <sys/epoll.h>
#include <fcntl.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <syslog.h>
#include <pthread.h>
#include <sys/mman.h>
#include <netdb.h> //struct hostent結(jié)構(gòu)的頭文件
#include <time.h>
#define USERAGENT "Wget/1.10.2"
#define ACCEPT "*/*"
#define ACCEPTLANGUAGE "zh-cn,zh;q=0.5"
#define ACCEPTENCODING "gzip,deflate"
#define ACCEPTCHARSET "gb2312,utf-8;q=0.7,*;q=0.7"
#define KEEPALIVE "300"
#define CONNECTION "keep-alive"
#define CONTENTTYPE "application/x-www-form-urlencoded"
#define HOSTNAME "www.zhibo8.cc"
#define DEBUG 1
char Request[409600]="";
char Recive[409600]="";
struct hostent *host;
int sockfd=0;
FILE *fp;
struct sockaddr_in server_addr;
int year;
int mon;
int day;
int wday;
int count=0;
void HandLine(char *l);
void SaveResult();
void GetDayInfo();
void GetTime();
int GetLocalAgent(char * UserAgent, char * Accept, char * AcceptLanguage, char * AcceptEncoding, char * AcceptCharset, char * KeepAlive, char * Connection, char * ContentType)
{
memcpy(UserAgent, USERAGENT, strlen(USERAGENT));
memcpy(Accept, ACCEPT, strlen(ACCEPT));
memcpy(AcceptLanguage, ACCEPTLANGUAGE, strlen(ACCEPTLANGUAGE));
memcpy(AcceptEncoding, ACCEPTENCODING, strlen(ACCEPTENCODING));
memcpy(AcceptCharset, ACCEPTCHARSET, strlen(ACCEPTCHARSET));
memcpy(KeepAlive, KEEPALIVE, strlen(KEEPALIVE));
memcpy(Connection, CONNECTION, strlen(CONNECTION));
memcpy(ContentType, CONTENTTYPE, strlen(CONTENTTYPE));
return 0;
}
void CreatRequest()
{
char UserAgent[1024] = "", Accept[1024] = "", AcceptLanguage[1024] = "", AcceptEncoding[1024] = "", AcceptCharset[1024] = "", KeepAlive[1024] = "", Connection[1024] = "", ContentType[1024] = "";
if((host=gethostbyname("www.zhibo8.cc"))==NULL) /* get ip address by domain */
{
if(DEBUG) fprintf(stderr,"\tGethostname '%s' error, %s\n", HOSTNAME, strerror(errno));
exit(1);
}
GetLocalAgent(UserAgent, Accept, AcceptLanguage, AcceptEncoding, AcceptCharset, KeepAlive, Connection, ContentType); /* Get client browser information */
sprintf(Request, "GET /%s/%s HTTP/1.0\r\nHost: %s\r\nUser-Agent: %s\r\nAccept: %s\r\nConnection: %s\r\n\r\n", "/", "", HOSTNAME, UserAgent, Accept, Connection);
}
void ConnectWeb()
{
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
fprintf(stderr,"\t SOCKET ERROR:%s\a\n",strerror(errno));
exit(1);
}
memset(&server_addr,0,sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(80);
server_addr.sin_addr = *((struct in_addr *)host->h_addr);
if(connect(sockfd,(struct sockaddr*)(&server_addr),sizeof(struct sockaddr))==-1)
{
fprintf(stderr,"\t CONNECT ERROR:%s\a\n",strerror(errno));
exit(1);
}
}
void SendRequest()
{
int wn=0;
wn=write(sockfd,Request,strlen(Request));
if(wn==-1)
{
fprintf(stderr,"\t SEND ERROR:%s\a\n",strerror(errno));
exit(1);
}
fprintf(stdout, "\n\tRequest. send OK!\n" );
}
void SaveResult()
{
fd_set readfds;
struct timeval tival;
int i,j,ret;
i=j=ret=0;
int n=0;
RECIVE:
FD_ZERO(&readfds);
tival.tv_sec=10;
tival.tv_usec=0;
if(sockfd>0)
FD_SET(sockfd,&readfds);
ret=select(sockfd+1,&readfds,NULL,NULL,&tival);
if(ret==0)
{
if(n++<2)
goto RECIVE;
}
if(FD_ISSET(sockfd,&readfds))
{
/*讀取全部相應(yīng)內(nèi)容到本地文件*/
while(read(sockfd,Recive,sizeof(Recive)))
{
fwrite(Recive,sizeof(Recive),1,fp);
memset(Recive,0,sizeof(Recive));
}
}
}
void EchoResult()
{
fd_set readfds;
struct timeval tival;
int i,j,ret;
i=j=ret=0;
int n=0;
RECIVE:
FD_ZERO(&readfds);
tival.tv_sec=2;
tival.tv_usec=0;
if(sockfd>0)
FD_SET(sockfd,&readfds);
ret=select(sockfd+1,&readfds,NULL,NULL,&tival);
if(ret==0)
{
if(n++<2)
goto RECIVE;
}
if(FD_ISSET(sockfd,&readfds))
{
char c;
while(read(sockfd,&c,1))
{
if(c=='d')
{
read(sockfd,&c,1);
if(c=='i')
{
read(sockfd,&c,1);
if(c=='v')
{
read(sockfd,&c,1);
if(c==' ')
{
read(sockfd,&c,1);
if(c=='c')
{
read(sockfd,&c,1);
if(c=='l')
{
read(sockfd,&c,1);
if(c=='a')
{
read(sockfd,&c,1);
if(c=='s')
{
read(sockfd,&c,1);
if(c=='s')
{
read(sockfd,&c,1);
if(c=='=')
{
read(sockfd,&c,1);
if(c=='"')
{
read(sockfd,&c,1);
if(c=='t')
{
read(sockfd,&c,1);
if(c=='i')
{
read(sockfd,&c,1);
if(c=='t')
{
read(sockfd,&c,1);
if(c=='l')
{
read(sockfd,&c,1);
if(c=='e')
{
read(sockfd,&c,1);
if(c=='b')
{
read(sockfd,&c,1);
if(c=='a')
{
read(sockfd,&c,1);
if(c=='r');
{
read(sockfd,&c,1);
if(c=='"')
GetDayInfo();
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
void GetDayInfo()
{
// int f=open("./s.txt",O_WRONLY|O_CREAT);
char t;
char Line[1024]="";
int sday=wday+count;
if(count++>=7)
return;
printf("\n***********%d年 %d月 %d日, 星期 %d **********************\n\n",year,mon,day+count-1,sday>7?sday%7:sday);
while(read(sockfd,&t,1)) /*處理每天的比賽信息即<ul></ul>里的內(nèi)容*/
{
if(t=='l')
{
read(sockfd,&t,1);
if(t=='i');
{
int ln=0;
memset(Line,0,sizeof(Line));
while(read(sockfd,Line+(ln++),1))/*處理每行的信息<li></li>里的內(nèi)容*/
{
char *s=strstr(Line,"</li>");
if(s!=NULL)
break;
}
Line[ln]=0;
HandLine(Line);
}
}
else if(t=='/')
{
read(sockfd,&t,1);
if(t=='u')
{
read(sockfd,&t,1);
if(t=='l');
return;
}
}
}
}
void HandLine(char *l)
{
l++;
char *NBA="NBA常規(guī)賽";
char *p=strstr(l,NBA);
if(p==NULL)
return;
char *t=strstr(l,"<b");
int lt=strlen(l)-strlen(t);
char *time=(char*)malloc(sizeof(char)*lt);
memcpy(time,l,lt);
char *p1=strstr(p,"/b>");
char *p2=strstr(p,"<a");
int n=strlen(p1)-strlen(p2)-3;
char *TeamVsTeam=(char*)malloc(n*sizeof(char));
memcpy(TeamVsTeam,p1+3,n);
char *p3=strstr(p2,"_blank\">");
char *p4=strstr(p3,"</a>");
int m=strlen(p3)-strlen(p4)-8;
char *Live=(char*)malloc(sizeof(char)*m);
memcpy(Live,p3+8,m);
printf("time:%s The Teams:%s TV Live:%s\n",time,TeamVsTeam,Live);
}
void GetTime()
{
time_t rawtime;
struct tm *timeinfo;
time(&rawtime);
timeinfo=localtime(&rawtime);
year=timeinfo->tm_year+1900;
mon =timeinfo->tm_mon+1;
day =timeinfo->tm_mday;
wday=timeinfo->tm_wday;
if(wday==0)
wday=7;
}
int main()
{
fp=fopen("Info.txt","w");
if(fp==NULL)
{
fprintf(stderr,"creat file is error \n");
exit(1);
}
CreatRequest();
ConnectWeb();
SendRequest();
EchoResult();
printf("IS END !!\n");
return 0;
}
上一篇:linux中查詢dns示例
欄 目:C語(yǔ)言
下一篇:c語(yǔ)言實(shí)現(xiàn)冒泡排序、希爾排序等多種算法示例
本文標(biāo)題:c語(yǔ)言獲取直播吧最近一周nba比賽信息
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/3678.html
您可能感興趣的文章
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用函數(shù)刪除字符
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)式函數(shù)庫(kù)
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)數(shù)怎么表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段函數(shù)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排序法函數(shù)
- 04-02c語(yǔ)言沒有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段函數(shù)
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎么打出三角函數(shù)的值
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求階乘


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 04-02jquery與jsp,用jquery
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-10delphi制作wav文件的方法
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10C#中split用法實(shí)例總結(jié)