PHP Ajax JavaScript Json获取天气信息实现代码


Posted in PHP onAugust 17, 2016

要在自己的网站上添加一个天气预报功能,是一个很普通的需求,实现起来也不是很难。今天来介绍几个简单的方法。

使用第三方服务

有这样的一种简单的方式,借助http://www.tianqi.com/plugin/网上的天气服务,可以定制我们的显示形状,实现添加天气预报的功能。

下面给出一个简单的小例子:

<iframe width="420" scrolling="no" height="60" frameborder="0" allowtransparency="true" src="http://i.tianqi.com/index.php?c=code&id=12&icon=1&num=5"></iframe>

间接方式

说是间接的获取天气信息,那是因为对于我们个人而言,是不可能自己发射卫星,或者维护天气预报那么大的计算量的服务的。我们是借助其他网站提供的数据接口来实现的。

思路

由于Ajax本身的特点决定了岂不能够跨域请求,所以我们需要借助PHP来试下代理的功能。具体思路如下:

PHP Ajax JavaScript Json获取天气信息实现代码

客户端打开我们的网页根据PHP获得客户端IP使用第三方服务获取该IP对应的城市编码调用天气接口,根据城市编码来获取天气信息客户端获得服务器返回的数据,并显示到页面上。

使用到的服务

下面列出我们用到的一句常用的接口
 •ip转城市:”http://ip.taobao.com/service/getIpInfo.php?ip=XXX”
 •查看对应的城市的代码:http://blog.csdn.net/anbowing/article/details/21936293
 •访问天气接口,获取数据:”http://www.weather.com.cn/adat/sk/“.$city_id.”html”

下面的是几个很好的接口网站。
 •天气API接口大全 

实现代码

代码的实现,分为三步。照应我们之前的逻辑来写即可。
 •获取客户端ip对应的城市 

<?php
header("Content-Type:text/json;charset=utf-8");
// ajax 自身特性决定其不能跨域请求,所以使用php的代理模式来实现垮与请求
//$url = 'http://www.weather.com.cn/adat/sk/101010100.html';

// 1.获取文本内容信息;2获取url对应的数据
//$data = file_get_contents($url);
//echo $data;

/////////////////////////////////////思路一
// ip-->>城市----->>>城市代码----->>>> 天气信息
// 获取ip对应的城市信息,以及编码 http://ip.taobao.com/service.getIpInfo.php?ip=60.205.8.179
// 通过编码获得天气信息 http://www.weather.com.cn/adat/sk/编码.html
$client_ip = "60.205.8.179";//$_SERVER['REMOTE_ADDR'];
$url = "http://ip.taobao.com/service/getIpInfo.php?ip="."$client_ip";
$result = file_get_contents($url);
echo $result;


/////////////////////////////////////思路二


?>

在客户端我们就可以看到

<script>
 function getcitycode(){
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function(){
   if(xhr.readyState==4){
    //alert(xhr.responseText); 
    eval('var citycode='+xhr.responseText);
    alert(citycode.data.city);
   }
  }
  xhr.open('get','./getcityid.php');
  xhr.send(null);
 }


</script>

 •再向服务器请求一下城市代码,传给天气接口即可。 

<?php

$city_id = $_GET['city'];
//print_r($GET);
调用数据库代码逻辑,查找到对应的城市的城市编码
只需要从我们实现存储好的城市表中警醒查找即可。而且城市编码的表基本上不发生变化,我们可以稳定的使用。
$weather_url = "http://www.weather.com.cn/adat/sk/".$city_id."html";
$weather = file_get_contents($weather_url);
echo $weather;



?>

前端完整代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>获取天气信息</title>
<script>
function getinfo(){
 var ajax = new XMLHttpRequest();
 ajax.onreadystatechange = function(){
  if(ajax.readyState==4){
   alert(ajax.responseText);
   eval("var data=" + ajax.responseText);
   alert(data);
   document.getElementById("city").innerHTML =data.weatherinfo.city;
   document.getElementById("cityid").innerHTML =data.weatherinfo.cityid;
   document.getElementById("temp").innerHTML =data.weatherinfo.temp;
   document.getElementById("WD").innerHTML =data.weatherinfo.WD;
   document.getElementById("WS").innerHTML =data.weatherinfo.WS;
   document.getElementById("SD").innerHTML =data.weatherinfo.SD;
   document.getElementById("time").innerHTML =data.weatherinfo.time; 
  }
 }
 ajax.open('get','./getinfo.php');
 ajax.send(null);

}
</script>


</head>

<body>
<h3>获取城市代码</h3>
<button type="button" onclick="getcitycode()">获取城市代码</button>
<br />
<script>
 function getcitycode(){
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function(){
   if(xhr.readyState==4){
    //alert(xhr.responseText); 
    eval('var citycode='+xhr.responseText);
    alert(citycode.data.city);
   }
  }
  xhr.open('get','./getcityid.php');
  xhr.send(null);
 }


</script>
<span id="cityid"></span>




<h3>点击按钮获取天气信息</h3>
<button name="getinfo" onclick="getinfo()">获取</button>
<div>
<span>城市名称</span><span id="city"></span><br />
<span>城市代码</span><span id="cityid"></span><br />
<span>当前温度</span><span id="temp"></span><br />
<span>风向</span><span id="WD"></span><br />
<span>风速</span><span id="WS"></span><br />
<span>湿度</span><span id="SD"></span><br />
<span>更新时间</span><span id="time"></span><br />

</div>

</body>
</html>

总结

在自己的网站上添加一个天气预报功能,其实并不难。也许还有更为简单的方式,这里就算是一个抛砖引玉的过程吧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP个人网站架设连环讲(四)
Oct 09 PHP
php shell超强免杀、减少体积工具实现代码
Oct 16 PHP
使用PHP下载CSS文件中的图片的代码
Sep 24 PHP
分享下php5类中三种数据类型的区别
Jan 26 PHP
PHP date函数常用时间处理方法
May 11 PHP
php实现的农历算法实例
Aug 11 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
Jan 16 PHP
php基于dom实现的图书xml格式数据示例
Feb 03 PHP
详解Yii2 之 生成 URL 的方法
Jun 16 PHP
php实现的mongoDB单例模式操作类
Jan 20 PHP
购物车实现的几种方式优缺点对比
May 02 PHP
数据结构之利用PHP实现二分搜索树
Oct 25 PHP
PHP文件下载实例代码浅析
Aug 17 #PHP
PHP Ajax实现无刷新附件上传
Aug 17 #PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
Aug 17 #PHP
全面解析PHP验证码的实现原理 附php验证码小案例
Aug 17 #PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
Aug 17 #PHP
总结PHP中数值计算的注意事项
Aug 14 #PHP
示例详解Laravel的注册重构
Aug 14 #PHP
You might like
谈谈PHP语法(2)
2006/10/09 PHP
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
PHP cURL初始化和执行方法入门级代码
2015/05/28 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
2016/11/14 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
JQuery jsonp 使用示例代码
2009/08/12 Javascript
javascript中的继承实例代码
2011/04/27 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
简单实现js悬浮导航效果
2017/02/05 Javascript
微信小程序 开发MAP(地图)实例详解
2017/06/27 Javascript
Bootstrap4 gulp 配置详解
2019/01/06 Javascript
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
详解Vue的mixin策略
2020/11/19 Vue.js
对vue生命周期的深入理解
2020/12/03 Vue.js
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
Python合并字典键值并去除重复元素的实例
2016/12/18 Python
Python计时相关操作详解【time,datetime】
2017/05/26 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
Python实现App自动签到领取积分功能
2018/09/29 Python
浅谈Python脚本开头及导包注释自动添加方法
2018/10/27 Python
python实现飞机大战游戏
2020/10/26 Python
使用Django搭建一个基金模拟交易系统教程
2019/11/18 Python
基于python调用psutil模块过程解析
2019/12/20 Python
在 Pycharm 安装使用black的方法详解
2020/04/02 Python
Python批量将图片灰度化的实现代码
2020/04/11 Python
使用python处理题库表格并转化为word形式的实现
2020/04/14 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
巴西服装和鞋子购物网站:Marisa
2018/10/25 全球购物
行政助理岗位职责
2015/02/10 职场文书
2015年统战工作总结
2015/05/19 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书
干货:如何写好工作计划!
2019/05/17 职场文书
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js
Win11如何启用启动修复 ? Win11执行启动修复的三种方法
2022/04/08 数码科技
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python