参数:

city,城市ID,详细请见下表,比如:212为重庆

type,输出格式,json或xml,默认为json

charset,输出字符编码,utf-8或utf8或gbk,默认为utf-8

datetype,日期输出类型,unix或other,默认为unix时间戳 如:getweather.php?

type=xml&

city=212

原理:

读取http://weather.news.qq.com/inc/07_dc' . $city . '.htm的HTML代码,通过正则检索出结果。

城市列表:

1 香港

2 澳门

17 哈尔滨

28 乌鲁木齐

56 西宁

57 兰州

69 呼和浩特

78 银川

82 石家庄

84 太原

103 长春

115 沈阳

125 北京

127 天津

140 济南

150 拉萨

166 成都

179 昆明

186 西安

189 郑州

211 武汉

212 重庆

218 长沙

227 贵阳

232 桂林

244 南京

248 合肥

252 上海

255 杭州

264 南昌

276 福州

280 台北

287 厦门

292 广州

295 南宁

296 深圳

303 海口

1.[图片] snap0000183.png

2.[代码]getweather.php

include('./include/encode.func.php');

$city = $_GET['city'] ? intval($_GET['city']) : 212; //cq

$type = $_GET['type'] ? strtolower(trim($_GET['type'])) : 'json'; //json

$charset = $_GET['charset'] ? strtolower(trim($_GET['charset'])) : 'utf-8'; //charset

$dateType = $_GET['datetype'] ? strtolower(trim($_GET['datetype'])) : 'unix'; //dateType

if($city < 1)

exit();

/*Get Weather*/

$content = '';

$fp = fopen('http://weather.news.qq.com/inc/07_dc' . $city . '.htm','r');

while(!feof($fp))

$content .= fread($fp,1024);

fclose($fp);

$content = str_replace(array("\t","\r","\n"),'',$content);

$content = anystring2utf8($content);

$weather = array();

$a = array();

preg_match('/class="px14\stred">(.[^\&]*)\ (.[^/i',$content,$a);

$weather['area'] = trim($a[2]);

$weather['now']['date'] = parseDate($a[1]);

preg_match('/

$weather['now']['pic'] = trim($a[1]);

preg_match('/bgcolor="#EDF2F8" class="blues">(.[^(.[^/i',$content,$a);

$weather['now']['weather'] = trim($a[1]);

$weather['now']['temp'] = trim($a[2]);

preg_match('/class="explain\sblues">(.[^\s*(.[^\s*(.[^

$weather['now']['wind'] = parseMore($a[1]);

$weather['now']['uv'] = parseMore($a[2]);

$weather['now']['air'] = parseMore($a[3]);

preg_match_all('/bgcolor="#EEEEEE">(.[^(.[^-]*)bgcolor="#EEF3F8">(.[^(.[^(.[^

foreach($a[0] as $k => $v){

$weather['future72'][$k] = array(

'date' => $dateType == 'unix' ? strtotime(trim($a[1][$k])) : trim($a[1][$k]),

'weather' => trim($a[3][$k]),

'temp' => trim($a[4][$k]),

'wind' => trim($a[5][$k]),

'pic' => parsePic($a[2][$k])

);

}

/*Get exponent*/

$weather['exponent'] = array();

$content = '';

$fp = fopen('http://weather.news.qq.com/inc/07_zs' . $city . '.htm','r');

while(!feof($fp))

$content .= fread($fp,1024);

fclose($fp);

$content = str_replace(array("\t","\r","\n"),'',$content);

$content = anystring2utf8($content);

preg_match_all('/(.[^:(.[^.[^:]*width="180">(.[^/i',$content,$a);

foreach($a[0] as $k => $v) {

$weather['exponent'][$k] = array(

'name' => trim($a[1][$k]),

'value' => trim($a[2][$k]),

'memo' => trim($a[3][$k])

);

}

/*Print Result*/

if ($charset != 'utf-8' && $charset != 'utf8')

$weather = any2gbk($weather);

switch($type) {

case 'json':

echo json_encode($weather);

break;

case 'xml':

header("content-type:text/xml");

$ax = new array2xml($weather,$charset);

echo $ax->getXML();

break;

default:

echo '

';

print_r($weather);

echo '

';

break;

}

function parseDate($date) {

$str = $date;

$str = preg_replace('/([^\d])/',' ',$str);

$str = trim($str);

$str = str_replace(' ','-',$str);

return $dateType == 'unix' ? strtotime($str) : $str;

}

function parseMore($str){

$str = trim($str);

$tmp = explode(iconv('gbk','UTF-8',':'),$str);

return $tmp[1];

}

function parsePic($str) {

$a = array();

preg_match_all('/src="(.[^"]*)"/i',$str,$a);

$result = $a[1];

return $result;

}

class array2xml {

var $xml;

function array2xml($array,$encoding='gbk') {

$this->xml='<?xml version="1.0" encoding="'.$encoding.'"?>';

if(count($array) > 1) {

$array = array('catalog' => $array);

}

$this->xml .= $this->_array2xml($array);

}

function getXml() {

return $this->xml;

}

function _array2xml($array) {

foreach($array as $key=>$val) {

is_numeric($key) && $key = "item id=\"$key\"";

$xml.= "";

$xml.= is_array($val) ? $this->_array2xml($val) : $val;

list($key,) = explode(' ',$key);

$xml .= "$key>";

}

return $xml;

}

}

?>

3.[代码]encode.func.php

/**

* 任何编码字符串转换为utf-8

*

* @param string $str 输入字符串

* @return string 输出utf-8编码字符串

*/

function anystring2utf8($str) {

$encode = mb_detect_encoding($str,"ASCII,UNICODE,UTF-8,GBK,CP936,EUC-CN,BIG-5,EUC-TW");

return ($encode != 'UTF-8' && $encode != 'ASCII' ? iconv($encode,'UTF-8',$str) : $str);

}

/**

* 任何编码字符串转换为gbk

*

* @param string $str 输入字符串

* @return string 输出gbk编码字符串

*/

function anystring2gbk($str) {

$encode = mb_detect_encoding($str,"ASCII,UNICODE,UTF-8,GBK,CP936,EUC-CN,BIG-5,EUC-TW");

return ($encode != 'CP936' && $encode != 'ASCII' && $encode != 'GBK' ? iconv($encode,'GB18030',$str) : $str);

}

/**

* 任何编码字符串(数组)转换为utf-8

*

* @param mixed $string 输入字符串(数组)

* @return mixed 输出utf-8编码字符串(数组)

*/

function any2utf8($string) {//通过递归转换字符串编码

if(is_array($string)) {

foreach($string as $key => $val) {

$string[$key] = any2utf8($val); //递归

}

} else {

$string = anystring2utf8($string);

}

return $string;

}

/**

* 任何编码字符串(数组)转换为gbk

*

* @param mixed $string 输入字符串(数组)

* @return mixed 输出gbk编码字符串(数组)

*/

function any2gbk($string) {//通过递归转换字符串编码

if(is_array($string)) {

foreach($string as $key => $val) {

$string[$key] = any2gbk($val); //递归

}

} else {

$string = anystring2gbk($string);

}

return $string;

}

?>

php获取当天 天气预报,PHP获取当天和72小时天气预报,并生成接口相关推荐

  1. 请利用SAX编写程序解析Yahoo的XML格式的天气预报,获取天气预报——python学习笔记

    1. 题目: 请利用SAX编写程序解析Yahoo的XML格式的天气预报,获取天气预报: 题目是廖雪峰老师的python教程中XML的练习. 本篇博文只是针对这一题目,没有做详细的介绍,如果看不懂可以在 ...

  2. java 获取当前时分_java实现获取当前年、月、日 、小时 、分钟、 秒、 毫秒

    package com.app.test; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util ...

  3. java 获取当前小时 分钟_java实现获取当前年、月、日 、小时 、分钟、 秒、 毫秒...

    package com.app.test; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util ...

  4. php获取天气组件,php获取中国天气,中国天气插件说明,根据IP获取天气情况

    PHP » 编程开发 » php获取中国天气,中国天气插件说明,根据IP获取天气情况 php获取中国天气,中国天气插件说明,根据IP获取天气情况 今天客户端需要获取天气情况,于是查询了一下! 看一下要 ...

  5. 获取this_小程序获取微信运动步数并集成echarts报表显示

    需求 现在运动计步非常的火,大家常用的计步工具一般有keep.咕咚.微信运动和其他移动设备等,本文是基于微信小程序获取用户的微信运动数据并可视化呈现出来. 先看一下最终实现效果: 微信运动规则 在开发 ...

  6. python使用np.argsort对一维numpy概率值数据排序获取倒序索引、获取的top索引(例如top2、top5、top10)索引二维numpy数组中对应的原始数据:原始数据概率最大的头部数据

    python使用np.argsort对一维numpy概率值数据排序获取倒序索引.获取的top索引(例如top2.top5.top10)索引二维numpy数组中对应的原始数据:原始数据概率最大的头部数据 ...

  7. python使用np.argsort对一维numpy概率值数据排序获取升序索引、获取的top索引(例如top2、top5、top10)索引二维numpy数组中对应的原始数据:原始数据概率最小的头部数据

    python使用np.argsort对一维numpy概率值数据排序获取升序索引.获取的top索引(例如top2.top5.top10)索引二维numpy数组中对应的原始数据:原始数据概率最小的头部数据 ...

  8. java 日期和字符串互转,根据当天整天时间 得到当天最后一秒的日期时间

    2019独角兽企业重金招聘Python工程师标准>>> java 日期和字符串互转,根据当天整天时间   得到当天最后一秒的日期时间 package com.hi;import ja ...

  9. 【Android 电量优化】电量优化 ( 网络状态获取 | 主动获取 WIFI 状态 | 被动获取 WIFI 状态 )

    文章目录 一.获取 WIFI 状态 二.主动获取 WIFI 状态 三.被动获取 WIFI 状态 参考 Google 官方文档 : 优化电池续航时间 一.获取 WIFI 状态 在应用中执行某些操作 , ...

最新文章

  1. 剑网三缘起的云端游戏,千呼万唤终于出来,有玩家不知道怎么玩?
  2. python counter_教你Python的collections.Counter类型
  3. linux平台C++开发基本知识
  4. CAShapeLayer的使用[1]
  5. C语言,利用一维数组交换法排序,使学生成绩高低排序(要求输入为负值时输入结束)
  6. String Primitive和String Object
  7. AngularJS创建应用- HTML5 移动框架
  8. 语言编出的程序怎么实装_程序员小白:编程语言到底该怎么选?
  9. SpringMVC学习(八)Ajax异步请求
  10. 求助wpe封包遇到动态验证怎么办
  11. shell脚本教程--Bash shell--4.流控、循环
  12. matlab茎叶图命令,[转载]转载:Stata命令(转自人大论坛)
  13. 程序员壁纸推荐,高清无码无水印地址已奉上!
  14. 浅谈CNN里的Lasso
  15. 两种取汉字拼音首字母的方法.--函数为转抄而来.
  16. Locust + Boomer In Docker
  17. ViewPage2简单使用
  18. 国产开源操作系统OpenCloudOS新进展:装机量超1000万节点,合作伙伴超500家
  19. uniapp图片不显示 - 变量动态修改图片地址不生效 - 图片src路径错误
  20. 相机多少万像素和几K图片之间关系

热门文章

  1. 文件系统04 - 零基础入门学习Delphi37
  2. 带有数据库的动态级联菜单
  3. vs2015打开慢的解决方法
  4. mysql主从复制及问题解决
  5. 上传文件时$_FILES为空,可能的原因及解决方法
  6. classification、part segmentation、semantic segmentation、instance segmentation
  7. The Turn Model for Adaptive Routing中的west-first算法
  8. leetcode力扣347. 前 K 个高频元素
  9. 2021 互联网公司时薪排行榜出炉!微软、美团很不错
  10. 跨境电子商务独立站如何找到热门的利基市场