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将会员数据导入到ucenter的代码
Jul 18 PHP
关于php mvc开发模式的感想
Jun 28 PHP
destoon整合ucenter后注册页面不跳转的解决方法
Jun 21 PHP
PHP使用xmllint命令处理xml与html的方法
Dec 15 PHP
PHP使用array_fill定义多维数组的方法
Mar 18 PHP
PHP调用.NET的WebService 简单实例
Mar 27 PHP
PHP6新特性分析
Mar 03 PHP
PHP正则表达式匹配替换与分割功能实例浅析
Feb 04 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
Mar 14 PHP
PHP中模糊查询并关联三个select框
Jun 19 PHP
PHP实现正则表达式分组捕获操作示例
Feb 03 PHP
PHP unset函数原理及使用方法解析
Aug 14 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
Laravel 5框架学习之Laravel入门和新建项目
2015/04/07 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
使用js修改客户端注册表的方法
2013/08/09 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
IE下Ajax缓存问题的快速解决方法(get方式)
2014/01/09 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
学习JavaScript设计模式之责任链模式
2016/01/18 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
详解JavaScript按概率随机生成事件
2017/08/02 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
nodejs中各种加密算法的实现详解
2019/07/11 NodeJs
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
[33:42]LGD vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
深入理解Django的自定义过滤器
2017/10/17 Python
获取Django项目的全部url方法详解
2017/10/26 Python
Python+PIL实现支付宝AR红包
2018/02/09 Python
Python File readlines() 使用方法
2018/03/19 Python
如何通过Python实现标签云算法
2019/07/02 Python
django 使用全局搜索功能的实例详解
2019/07/18 Python
python模块常用用法实例详解
2019/10/17 Python
详解python 中in 的 用法
2019/12/12 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
python爬虫使用正则爬取网站的实现
2020/08/03 Python
css3实现图片遮罩效果鼠标hover以后出现文字
2013/11/05 HTML / CSS
优衣库台湾官网:UNIQLO台湾
2019/02/01 全球购物
Lancer Skincare官方网站:抗衰老皮肤护理
2020/11/20 全球购物
2014年财务个人工作总结
2014/12/08 职场文书
团员个人总结
2015/02/26 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
机关干部正风肃纪心得体会
2016/01/15 职场文书
商业计划书如何写?关键问题有哪些?
2019/07/11 职场文书