#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/udp.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include "cJSON.h" #define PORT 80 //端口号
#define IPADDR "116.62.81.138"//地址 #define KEY "SNGgI2upxur590NHn" // 私钥
#define LOCAL "beijing" //城市 int main(int argc, char const *argv[])
{
// 1.创建TCP套接字
int tcp_socket = socket(AF_INET, SOCK_STREAM, 0);
//错误处理
if (tcp_socket == -1)
{
fprintf(stderr, "tcp socket error,errno:%d,%s\n", errno, strerror(errno));
exit(1);
}
// 2.发起连接请求,等待接受服务器接受连接
struct sockaddr_in dest_addr;
dest_addr.sin_family = AF_INET; // 协议族,是固定的
dest_addr.sin_port = htons(PORT); // 服务器端口,必须转换为网络字节序
dest_addr.sin_addr.s_addr = inet_addr(IPADDR); // 服务器地址
//ret用来进行下一步的connect连接是否成功进行判断
int ret = connect(tcp_socket, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
//ret = 0连接成功,ret = -1连接失败
if (ret < 0)
{
fprintf(stderr, "connect error,errno:%d,%s\n", errno, strerror(errno));
exit(1);
}
// 3.用于存储HTTP的请求内容: 请求行(HRI+(空格))+ 请求字段 + \r\n + 请求包体(可选)+\r\n
char reqbuf[1024] = {0};
sprintf(reqbuf, "GET https://api.seniverse.com/v3/weather/now.json?key=%s&location=%s&language=en&unit=c "
"HTTP/1.1"
"\r\n"
"Host:api.seniverse.com\r\n"
"\r\n",
KEY, LOCAL); // 4.说明双方建立连接,此时可以利用HTTP协议发送请求信息,并等待服务器的响应 基于请求/响应
send(tcp_socket, reqbuf, strlen(reqbuf), 0); // 5.等待服务器的响应
char recvbuf[1024] = {0}; recv(tcp_socket, recvbuf, sizeof(recvbuf), 0); // 第一次返回的响应参数
printf("%s", recvbuf);
bzero(recvbuf, 1024); recv(tcp_socket, recvbuf, sizeof(recvbuf), 0); // 第二次返回的响应包体
printf("%s\n", recvbuf); // 6.对响应包体进行JSON解析 // 1) 先把获取的字符串转换为JSON格式
cJSON *obj = cJSON_Parse(recvbuf); // 2) 把解析之后的JSON格式进行输出,用于调试
printf("%s\n", cJSON_Print(obj)); // 3) 对JSON格式进行解析
cJSON *results = NULL;
results = cJSON_GetObjectItem(obj, "results");
printf("array size = %d\n", cJSON_GetArraySize(results)); // 4)对城市的实时温度数据进行解析
cJSON *result = NULL;
cJSON_ArrayForEach(result, results)
{
cJSON *now = cJSON_GetObjectItem(result, "now");
cJSON *temperature = cJSON_GetObjectItem(now, "temperature"); printf("temperature : %s\n", temperature->valuestring); printf("temperature : %d\n", atoi(temperature->valuestring));
} return 0;
}

基于服务器响应的实时天气数据进行JSON解析的详细代码及其框架的更多相关文章

  1. 关于Node.js中HTTP请求返回数据需要JSON解析的问题

    在编写项目过程中,需要用到实时数据的推送需求, 所以首先想到了NodeJS的websocket模块 在网上找了一个聊天室的例子  然后将其改为自己需求的推送 其中遇到的问题 返回数据问题  :   由 ...

  2. 移动平台作业——天气预报——天气数据的获得——为应用申请百度ak码

    需求: 可切换城市 可实时更新(按钮或手势或下拉刷新) 可现实未来三日的天气 不限制横屏或者竖屏,不限制布局样式,但要求得到的数据均需显示(北京.天气数据.天气图标) 提示: 获得实时天气数据(任选一 ...

  3. 【开发记录】如何在B/S项目中使用中国天气的实时天气功能

    好久没有更新我的博客了,正好手头有一个比较合适的项目经验可以分享出来,就是这个如何使用中国天气的天气预报功能,也正好做个项目经验记录. 功能需求 这个功能需求比较简单,就是想在网页端显示实时天气数据. ...

  4. Python2.7-浙江省实时天气爬取

    先对中国天气网的实时天气数据进行了研究,数据在http://www.weather.com.cn/weather1d/101010100.shtml中,可以通过城市代码进行爬取,但实况数据是用JS动态 ...

  5. .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块

    .Net Core ORM选择之路,哪个才适合你   因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...

  6. iOS 中json解析数据出现中文乱码的问题

    一般服务器的编码格式都是UTF8,这样通过json解析下来的的数据,一般中文是不会出现乱码,但是如果服务器的编码格式不是UTF8,通过json解析的数据中的中文容易出现luan乱码,怎么解决这个问题呢 ...

  7. Spring Security 解析(六) —— 基于JWT的单点登陆(SSO)开发及原理解析

    Spring Security 解析(六) -- 基于JWT的单点登陆(SSO)开发及原理解析   在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把 ...

  8. 使用腾讯云无服务器云函数(SCF)分析天气数据

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:李想 无服务器云函数(SCF)是腾讯云提供的Serverless执行环境,也是国内首款FaaS(Function as a Service ...

  9. TOP100summit:【分享实录-Microsoft】基于Kafka与Spark的实时大数据质量监控平台

    本篇文章内容来自2016年TOP100summit Microsoft资深产品经理邢国冬的案例分享.编辑:Cynthia 邢国冬(Tony Xing):Microsoft资深产品经理.负责微软应用与服 ...

  10. 基于Hadoop生态SparkStreaming的大数据实时流处理平台的搭建

    随着公司业务发展,对大数据的获取和实时处理的要求就会越来越高,日志处理.用户行为分析.场景业务分析等等,传统的写日志方式根本满足不了业务的实时处理需求,所以本人准备开始着手改造原系统中的数据处理方式, ...

随机推荐

  1. 龙蜥社区开源 coolbpf,BPF 程序开发效率提升百倍 | 龙蜥技术

    简介: coolbpf,可以酷玩的BPF!来看看让BPF加了双翅膀的它究竟有多硬核? 文/系统运维 SIG(Special Interest Group) 引言 BPF 是一个新的动态跟踪技术,目前这 ...

  2. 一文理解 K8s 容器网络虚拟化

    简介:本文需要读者熟悉 Ethernet(以太网)的基本原理和 Linux 系统的基本网络命令,以及 TCP/IP 协议族并了解传统的网络模型和协议包的流转原理.文中涉及到 Linux 内核的具体实现 ...

  3. 如何开发 Node.js Native Add-on?

    简介: 来一起为 Node.js 的 add-on 生态做贡献吧~ 作者 | 吴成忠(昭朗) 这篇文章是由 Chengzhong Wu (@legendecas),Gabriel Schulhof ( ...

  4. [FE] FastAdmin 动态下拉组件 Selectpage 自定义 data-params

    正常情况下,我们想获取列表只需要定义接口路径和要显示的字段名即可, 比如: <input id="c-package_ids" data-rule="require ...

  5. [SVG] JS 动态加载 svg 修改 svg 属性

    svg 概念一览: https://javascript.ruanyifeng.com/htmlapi/svg.html加载 svg: // for example: $('body').load(' ...

  6. 利用python爬取某壳的房产数据

    以无锡的某壳为例进行数据爬取,现在房子的价格起伏很快,买房是人生一个大事,了解本地的房价走势来判断是否应该入手. (建议是近2年不买,本人在21年高位抛了一套房,基本是通过贝壳数据判断房价已经到顶,希 ...

  7. ansible(9)--ansible的yum模块

    1. yum模块 功能:管理软件包,需要确认被管理端为红帽系列的,并且需要被管理端配置好yum源. 主要的参数如下: 参数 说明 name 指定安装软件包名或软件包URL state 指定yum对应的 ...

  8. 第十届山东省大学生程序设计竞赛题解(A、F、M、C)

    部分代码define了long long,请记得开long long A. Calandar 把年份.月份.单个的天数全都乘以对应的系数转化成单个的天数即可,注意最后的结果有可能是负数,要转化成正数. ...

  9. python教程6.5-excel处理模块

    第三方开源模块安装  创建文件 打开已有文件 写数据 选择表 保存表 遍历表 按行遍历 按列遍历 遍历指定行列 遍历指定第几列数据 删除表 设置单元格样式 字体 对齐 设置行高列宽

  10. threejs的坐标渲染和着色

    点击查看代码 function createBasic() { // 目标:了解顶点坐标绘制正方形 // 1. 准备 BufferGemotry 缓冲几何图形 // 2. 准备 32 位浮点数的数组, ...