C语言实现在线获取彩票数据

举报
C语言C加加学习 发表于 2018/12/21 15:47:58 2018/12/21
【摘要】 编程思路彩票选择的理由:(1)数据量要大,双色球就不满足。(2)开奖间隔要短,避免人为因素等来影响。我选择:快开彩,每个省都有,湖南这边叫做动物总动员快乐十分。每天开84期,从9点钟到晚上11点,每隔10分开一期。每期从1-20个数里选择8个数作为开奖号码。只要中2个或者3个就可以兑奖。欢迎加入学习群【892643663】,获取全套免费C/C++企业实战级课程资源(素材+源码+视频)和编译大...

编程思路

彩票选择的理由:
(1)数据量要大,双色球就不满足。
(2)开奖间隔要短,避免人为因素等来影响。

我选择:快开彩,每个省都有,湖南这边叫做动物总动员快乐十分。
每天开84期,从9点钟到晚上11点,每隔10分开一期。
每期从1-20个数里选择8个数作为开奖号码。只要中2个或者3个就可以兑奖。

欢迎加入学习群【892643663】,获取全套免费C/C++企业实战级课程资源(素材+源码+视频)和编译大礼包

在这里插入图片描述

##编程从提供开奖数据的网站那里直接获取开奖结果,然后再分析

Todo1: 找哪个网站?https://market.aliyun.com/ 阿里云市场里面有一个api。

彩票API
调用地址:http://gie777.market.alicloudapi.com/Kaijiang/[Kaijiang]/date/[date]/
请求方式:GET
返回类型:JSON
API 调用:API 简单身份认证调用方法(APPCODE)展开API 签名认证调用方法(AppKey & AppSecret)

Todo2:用什么语言?怎么调用api?
用C语言编程,用HTTP的方式去调用api。得到的数据,用cJson库来解析获得的JSON数据。

详细:
创建一个套接字去访问,然后发送http请求给服务器,然后获取返回的数据,用cJSON库来解析某个数字的出现次数。

代码

#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>

// 用C编程访问彩票api,在线获取开奖数据,分析某个数出现的几率

// 文件:  /Kaijiang/HNKLSF/date/20181213/
// Authorization:APPCODE b533e3b56bcd4c96982f9d3643601951

//http请求头,由方法行+换行符+头部(有多个)+换行符+换行符
char *request="GET /Kaijiang/BJPK10/date/20181213/ HTTP/1.1\r\n"
              "Host:gie777.market.alicloudapi.com\r\n"
              "Authorization:APPCODE b533e3b56bcd4c96982f9d3643601951\r\n\r\n";

char *p="hello""world";

int main(void)
{
    //1 创建一个套接字,设置好服务器的地址,连接服务器
    int sockfd=socket(AF_INET,SOCK_STREAM,0);
    struct hostent *ent=gethostbyname("gie777.market.alicloudapi.com");//解析服务器的域名,得到ip地址
    if(ent==NULL)
    {
        printf("域名解析失败\n");
        return -1;
    }
    //dns 是解析域名的服务器,能够根据某个域名得出它的真正ip
    printf("ip %s\n",inet_ntoa(*(struct in_addr *)ent->h_addr));

    //1-2 连接到服务器
    struct sockaddr_in sin;
    bzero(&sin,sizeof(sin));//清空
    sin.sin_family=AF_INET;
    sin.sin_port=htons(80); //端口80,转换成大端模式
    sin.sin_addr=*(struct in_addr *)ent->h_addr;//ip地址

    int r=connect(sockfd,(struct sockaddr *)&sin,sizeof(sin));
    if(r==-1)
    {
        perror("connect");//如果失败,输出并返回
        return -1;
    }
    printf("服务器连接成功\n");

    //2 发送http请求
    ssize_t wlen=write(sockfd,request,strlen(request));

    if(wlen<0)
    {
        perror("write");
        return -1;
    }

    //3 读取网站发回来的数据
    char buffer[1024*1024]={0};
    char c;
    int i=0;
    while(read(sockfd,&c,1)==1)
    {
        buffer[i++]=c;
    }

    printf("%s\n",buffer);


    return 0;
}

欢迎加入学习群【892643663】,获取全套免费C/C++企业实战级课程资源(素材+源码+视频)和编译大礼包


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。