C语言实现天气获取 + HTML页面
目录
一、聚合 API
二、天气客户端实现的要点
1、请求Key
2、GET请求
3、天气服务端返回的数据
三、Ubuntu Linux下安装apache2(web服务)
配置环境:
四、HTML基础
1、搭建HTML框架
一、聚合 API
聚合API注册
实名注册账号,实名认证时需要上传身份证正反面,大概3个工作日认证成功,实名认证后,免费接口可以使用100次/天
使用接口前确保Ubuntu可以正常上网
二、天气客户端实现的要点
1、请求Key
天气预报API
我们完成这个实验必须得到这个上面去注册一个账号才能使用聚合API的天气数据,注册之后每个账户都会有一个Key,例如:
请求Key:ef7755d80707f9258a95a000f8c6xxxx
2、GET请求
HTTP有几种请求方法,我们这里使用的是GET请求。查看聚合天气API文档可知,请求地址示例为:
请求示例:http://apis.juhe.cn/simpleWeather/query?city=%E8%8B%8F%E5%B7%9E&key=
这是一个天气实况的请求地址示例,其有几个重要的参数:
名称 | 必填 | 类型 | 说明 | |
---|---|---|---|---|
city | 是 | string | 要查询的城市名称/id,城市名称如:温州、上海、北京,需要utf8 urlencode | |
key | 是 | string | 在个人中心->我的数据,接口名称上方查看 |
这里的Key是个很重要的参数,就是我们前面说的。
我们的天气客户端就是要往天气服务端发送类似这样的GET请求
来获取天气数据,具体的请求方法示例为:
GET http://apis.juhe.cn/simpleWeather/query?city=北京&key=ef7755d80707f9258a95a000f8c6xxxx
linux模拟http请求命令
sprintf函数的用法:
(1)函数功能:字符串格式化
(2)函数原型:int sprintf(char *string, char *format [,argument,…]);
string: 这是指向一个字符数组的指针,该数组存储了 C 字符串。
format : 这是字符串,包含了要被写入到字符串 str 的文本。
[argument]….:根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。
使用示例:
sprintf(buf, "%s,%d", str, num);
假如此时str
为"hello"
,num
为5201314
,则此时buf中的内容为:hello,5201314
,需要注意的是buf的容量要足够大。
3、天气服务端返回的数据
天气服务端给我们天气客户端返回的数据为JSON
格式数据
三、Ubuntu Linux下安装apache2(web服务)
Apache或Apache HTTP服务器是一个免费的开源Web服务器,由Apache软件基金(Apache Software Foundation)开发和维护。
sudo su
sudo apt update
sudo apt-get install apache2
此时浏览器访问ubuntu ip地址应该会有默认页面,查看ip地址的命令:ifconfig
如果想要将默认页面修改为我们自己的页面需要进行环境配置
配置环境:
apache2配置文件
链接:https://pan.baidu.com/s/1P3-1vtUSsMY26bmQtgH1ew
提取码:8krk
cd /work
mkdir web
把apache2.conf, mime.load, serve-cgi-bin.conf, 000-default.conf拷贝到/work/web/下
在Ubuntu的文件内切换到/work/web的界面,从Windows复制四个文件,粘贴到该目录下:(具体目录根据个人)
切换到终端
cd /work/web/cp apache2.conf /etc/apache2/ -rfcp 000-default.conf /etc/apache2/sites-enabled/ -rfcp mime.load /etc/apache2/mods-enabled/ -rfcp serve-cgi-bin.conf /etc/apache2/conf-enabled/ -rf
重启服务
sudo /etc/init.d/apache2 restart
创建hello.html文件拷贝到/work/web/html下
mkdir html
mkdir cgi-bin
hello.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><h2>你们好!</h2>
</body>
</html>
每次添加文件需要进行一次权限操作
chmod 777 /work/web -R
使用浏览器访问ubuntu ip地址,显示“你们好!”代表正确:
四、HTML基础
1、搭建HTML框架
Index.html 页面入口
Top.html 项目标题
Left.html 项目菜单
Weather.html 天气页面
在web目录下,cgi-bin是后端处理代码
这里推荐一个国外HTML页面模板网址:HTML页面
以及图标素材网址:图标素材
2、编写天气处理代码
apiWeather.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<unistd.h>#include "include.h"//!!!使用时请换成自己的KEY
#define API_KEY "xxxxxxxxx"//请求对应城市的天气
int apiWeather(char *cityName);int main(int argc, char *argv[])
{if (argc != 2){printf("使用方法: ./apiWeather 城市名称\n");return 0;}apiWeather(argv[1]);//printf("city :%s\n", argv[1]);return 0;
}int apiWeather(char *cityName)
{char cmd[MAX_LEN] = {0};char result[RESULT_BUF_LEN] = {0};//生成API请求urlsprintf(cmd, "curl -s \"http://apis.juhe.cn/simpleWeather/query?city=%s&key=%s\"", cityName, API_KEY);popenCmd(cmd, result);printf("%s\n", result);return 0;
}
tools.c
#include <stdio.h>
#include <string.h>
#include "include.h"//执行命令,将命令结果保存到result
int popenCmd(char *cmd, char *result)
{FILE *fp = popen(cmd, "r");if (NULL == fp){printf("打开 file命令失败\n");goto err;}//将结果读取到results字符串数组中fgets(result, RESULT_BUF_LEN, fp);if (fp){pclose(fp);fp = NULL;}return 0;err:if (fp){pclose(fp);fp = NULL;}return -1;
}
include.h
#include "cJSON.h"#define MAX_LEN 256
#define RESULT_BUF_LEN 102400//执行命令,将命令结果保存到result
int popenCmd(char *cmd, char *result);
编译命令
gcc -o apiWeather apiWeather.c tools.c -lm
cgi-bin目录下citycode.cgi在执行apiWeather程序时,需要将weather放到和citycode.cgi同一个目录下。
citycode.cgi
#!/bin/shecho "Conten-type:text/html;Cache-Control:no-cache;charset=utf-8\\n\\r\\n\\r"
city=`echo $QUERY_STRING |awk -F '[=]' '{print $2}'`./apiWeather $city
最终实现结果为:
HTML源代码:
链接:https://pan.baidu.com/s/1baNfUCJi4pnIDmWacLBWBA
提取码:7vy0
如有错误请提出!
C语言实现天气获取 + HTML页面相关推荐
- php判断访客语言,php实现获取及设置用户访问页面语言类
本文实例讲述了php实现获取及设置用户访问页面语言类,分享给大家供大家参考.具体分析如下: 该实例User Language Class 获取/设置用户访问的页面语言,如果用户没有设置访问语言,则读取 ...
- python爬虫抓取文本_Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例...
本文实例讲述了Python实现可获取网易页面所有文本信息的网易网络爬虫功能.分享给大家供大家参考,具体如下: #coding=utf-8 #------------------------------ ...
- js准确获取当前页面url网址信息
这篇文章主要为大家介绍了js准确获取当前页面url网址信息的多种方法,包括正则法.split拆分法等,需要的朋友可以参考下 在WEB开发中,时常会用到javascript来获取当前页面的url网址信息 ...
- 截取url的host_js如何准确获取当前页面url网址信息
在WEB开发中,时常会用到javascript来获取当前页面的url网址信息,在这里是我的一些获取url信息的小总结. 下面我们举例一个URL,然后获得它的各个组成部分:http://i.jb51.n ...
- java获取当前页面url地址_js如何准确获取当前页面url网址信息
在WEB开发中,时常会用到javascript来获取当前页面的url网址信息,在这里是我的一些获取url信息的小总结. 下面我们举例一个URL,然后获得它的各个组成部分:http://i.cnblog ...
- R语言dplyr包获取dataframe分组聚合汇总统计值实战(group_by() and summarize() ):均值、中位数、分位数、IQR、MAD、count、unique
R语言dplyr包获取dataframe分组聚合汇总统计值实战(group_by() and summarize() ):均值.中位数.分位数.IQR.MAD.count.unique 目录
- R语言dplyr包获取dataframe分组聚合的最大值实战(Maximum Value by Group)
R语言dplyr包获取dataframe分组聚合的最大值实战(Maximum Value by Group) 目录 R语言dplyr包获取dataframe分组聚合的最大值实战(Maximum Val ...
- R语言names函数获取或者设置数据对象名称实战
R语言names函数获取或者设置数据对象名称实战 目录 R语言names函数获取或者设置数据对象名称实战 #基本语法
- R语言ncol函数获取dataframe或者matrix列的个数实战
R语言ncol函数获取dataframe或者matrix列的个数实战 目录 R语言ncol函数获取dataframe或者matrix列的个数实战 #基本语法
最新文章
- 读“基于深度学习的图像识别技术研究综述”有感
- JavaScript初体验之冲出迷雾,我四个多小时的经验教训_AX
- python flask 返回值 状态码 设置
- 结合案例深入解析策略模式
- 讲讲 Python Launcher 是什么鬼东西?
- 异常解决——Spring Cloud FeignClient: BeanCreationException: Error creating bean with
- python-面向对向-静态方法的继承-父类中的super方法
- socketserver库的使用
- 1.1zookeeper简介
- Julia : 如何生成一个水仙花数?
- win7 做无盘服务器配置,两种方法轻松实现无盘安装Win7系统
- 英语拼音怎么在计算机上拼出来的,英语拼音怎么写
- 产品经理眼中的SLAM技术学习路径
- CANoe集成解决方案
- AFEPack 使用 Tutorial(二):解带系数二维泊松方程
- 传统产业如何进行数字化转型
- 自兴动脑人工智能课程
- 再谈目前QQ空间主流的赚钱方法
- 天气预报数据保存APP的制作
- ABAQUS 建模及分析流程(一)
热门文章
- FishHook钩子库开发日志
- C++ map和set
- 网络层核心协议:IP协议
- Kotlin学习(二)Kotlin基础语法
- 红帽linux更新资源库,如何用APT维护红帽企业版Linux
- 停简单电子优惠系统_停简单app下载
- yandex安卓android,首款Jolla手机国内首测【6】
- 按键精灵定位坐标循环_LinkTrack UWB定位正式支持ROS机器人操作系统,驱动开源,自由定制消息格式...
- 台湾品牌获得东京威士忌烈酒竞赛2020最佳单一麦芽威士忌总冠军
- 华为官微 鸿蒙,华为鸿蒙官微一条微博都没发就火了