c语言获取直播吧最近一周nba比赛信息_C 语言

就是用c语言的写的一个简单http请求,并分析其响应,原理很简单,主要是分析http响应,麻烦的是提取其中的比赛信息

复制代码 代码如下:

#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结构的头文件
#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))
   {
     /*读取全部相应内容到本地文件*/
     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>里的内容*/
    {

 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>里的内容*/
      {

                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常规赛";
   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;
}

时间: 2024-09-29 00:38:57

c语言获取直播吧最近一周nba比赛信息_C 语言的相关文章

C语言获取消耗内存的方法_C 语言

本文实例讲述了C语言获取消耗内存的方法.分享给大家供大家参考.具体实现方法如下: /* * 消耗内存 */ #include <stdio.h> #include <stdlib.h> main() { int MB=0; while(malloc(1<<20)) ++MB; printf("Alloced %d MB total\n",MB); } 希望本文所述对大家的C语言程序设计有所帮助. 以上是小编为您精心准备的的内容,在的博客.问答.公众号

C语言获取Shell返回结果的实现方法_C 语言

Linux编程时候,如果我们需要调用shell命令或脚本通常使用system方法.如system("ls") 该方法返回值为0或-1,即成功或失败.而有的时候我们想要获取shell命令执行的结果,该怎么办呢? 我们可以将shell命令结果重定向到文件中,然后再读取这个文件,如: system("ls>result.txt") FILE *fp = fopen(result, "r") 当然我们也可以直接使用管道,如下面示例: #includ

c语言获取文件大小的示例_C 语言

1.fseek 函数原型: 复制代码 代码如下: int fseek ( FILE * stream, long int offset, int origin ); 参数说明:stream,文件流指针:offest,偏移量:orgin,原(始位置.其中orgin的可选值有SEEK_SET(文件开始).SEEK_CUR(文件指针当前位置).SEEK_END(文件结尾). 函数说明:对于二进制模式打开的流,新的流位置是origin + offset. 2.ftell 函数原型:long int ft

linux根据pid获取进程名和获取进程pid(c语言获取pid)_C 语言

Liunx中通过进程名查找进程PID可以通过 pidof [进程名] 来查找.反过来 ,相同通过PID查找进程名则没有相关命令.在linux根目录中,有一个/proc的VFS(虚拟文件系统),系统当前运行的所有进程都对应于该目录下的一个以进程PID命名的文件夹,其中存放进程运行的N多信息.其中有一个status文件,cat显示该文件, 第一行的Name即为进程名. 打开stardict程序,进程名为stardict: shell中分别根据Pid获取进程名.根据进程名获取Pid 1)查找stard

用C语言获取文件的大小示例分享_C 语言

查了一下发现同C语言的文件操作函数便可以很容易的实现这样的功能.在自己实现的函数中使用到的函数就只有fseek和ftell.它们的说明如下: fseek 语法: #include <stdio.h> int fseek( FILE *stream, long offset, int origin ); 函数fseek()为给出的流设置位置数据. origin的值应该是下列值其中之一(在stdio.h中定义): 名称 说明 SEEK_SET 从文件的开始处开始搜索 SEEK_CUR 从当前位置开

新媒体环境下的品牌营销尝试

新媒体环境下的品牌营销之路,简言之就是"专注才能赢".我先把新媒体环境下的品牌营销之路拆解为三个阶段. 品牌营销的三个阶段 首先,我们认为一个商业的媒介品牌,在投放广告,进行各种营销活动的过程中,如何体现其商业价值呢?主要是通过三个阶段体现:第一个阶段是注意力营销.在互联网领域这可能是被提及最多.最为人广知的一个营销层次.此时的重点是通过很多手段吸引网民来访问,参与各种各样的活动,并形成强大的关注度.其实任何一个媒体在具有覆盖面的基础上,都可以把企业的一些信息传播给广泛的客户. 第二阶

React Native移动开发资料库

本文整理了React Native开发中额优秀博客,以及优秀的Github库列表(很多英文资料源自于awesome-react-native) 关于开源库类 Star 100+ ️ Star 200+ ️️ Star 500+ ️️️ Star 1000+ ️️️️ Star 2000+ ️️️️️ 关于博客和视频类 值得读读 ️ 建议阅读 ️️ 强烈推荐 ️️️ 目录 网址 完整开源项目 Libraries (Star 100+) 中文博客 英文博客 视频资料 网址 源代码 官方文档 reac

总结参加2010网络营销大会的3点感受

中介交易 SEO诊断 淘宝客 云主机 技术大厅 2010年6月25日阿鹏有幸代表亿玛客网络营销学院参加了在北京举行的2010年网络营销大会,参加大会的嘉宾代表包括百度,艾瑞,天涯,搜狐等行业服务商还有企业代表和高校师生.本届网络营销大会以"网络营销时代的新思维.新机遇.新领域"为主题,着重关注新经济形势下国内互联网产业的发展态势,深入挖掘网络营销行业的新思维和新机遇,共谋行业未来.在此两天的会议下来作为参会代表我认为有这几点是未来网络营销行业的一个探讨热点: 后web2.0时代的社会化

不错过NBA新赛季 球迷必备的直播APP

<新浪NBA><NBA时讯>NBA新赛季早已开启,还在为看不了直播而抱怨么?NBA球赛是很多篮球粉丝们的最爱,为了看球赛熬夜罢工的朋友也有不少,朋友们何必一定要盯着电脑或者是电视呢,手机 照样也能看,赛前赛后直播重播,想怎么看就怎么看!今天小编为球迷们推荐几款有关NBA的软件,从观看到学习,应有尽有.精彩不再错过~软件名称:<新浪NBA>价格:免费更新日期:2012年9月10日大小:9.0 MB这款<新浪NBA>是iPad客户端上的一款观看NBA赛事软件,随