热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP获取当天和72小时天气预报,并生成接口-PHP源码

PHP获取当天和72小时天气预报,并生成接口
参数:

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 海口

getweather.php

(.[^\&]*)\&#160;(.[^<]*)<\/strong>/i&#39;,$content,$a);
    $weather[&#39;area&#39;] = trim($a[2]);
    $weather[&#39;now&#39;][&#39;date&#39;] = parseDate($a[1]);
     
    preg_match(&#39;/(.[^<]*)
(.[^<]*)<\/td>/i&#39;,$content,$a); $weather[&#39;now&#39;][&#39;weather&#39;] = trim($a[1]); $weather[&#39;now&#39;][&#39;temp&#39;] = trim($a[2]); preg_match(&#39;/class="explain\sblues">(.[^<]*)
\s*(.[^<]*)
\s*(.[^<]*)(.[^<]*)<\/td>(.[^-]*)bgcolor="#EEF3F8">(.[^<]*)
(.[^<]*)
(.[^<]*)/i&#39;,$content,$a); foreach($a[0] as $k => $v){ $weather[&#39;future72&#39;][$k] = array( &#39;date&#39; => $dateType == &#39;unix&#39; ? strtotime(trim($a[1][$k])) : trim($a[1][$k]), &#39;weather&#39; => trim($a[3][$k]), &#39;temp&#39; => trim($a[4][$k]), &#39;wind&#39; => trim($a[5][$k]), &#39;pic&#39; => parsePic($a[2][$k]) ); } /*Get exponent*/ $weather[&#39;exponent&#39;] = array(); $cOntent= &#39;&#39;; $fp = fopen(&#39;http://weather.news.qq.com/inc/07_zs&#39; . $city . &#39;.htm&#39;,&#39;r&#39;); while(!feof($fp)) $content .= fread($fp,1024); fclose($fp); $cOntent= str_replace(array("\t","\r","\n"),&#39;&#39;,$content); $cOntent= anystring2utf8($content); preg_match_all(&#39;/(.[^<]*)<\/strong>:(.[^<]*)<\/span>.[^:]*width="180">(.[^<]*)<\/td>/i&#39;,$content,$a); foreach($a[0] as $k => $v) { $weather[&#39;exponent&#39;][$k] = array( &#39;name&#39; => trim($a[1][$k]), &#39;value&#39; => trim($a[2][$k]), &#39;memo&#39; => trim($a[3][$k]) ); } /*Print Result*/ if ($charset != &#39;utf-8&#39; && $charset != &#39;utf8&#39;) $weather = any2gbk($weather); switch($type) { case &#39;json&#39;: echo json_encode($weather); break; case &#39;xml&#39;: header("content-type:text/xml"); $ax = new array2xml($weather,$charset); echo $ax->getXML(); break; default: echo &#39;
&#39;;
            print_r($weather);
            echo &#39;
&#39;; break; } function parseDate($date) { $str = $date; $str = preg_replace(&#39;/([^\d])/&#39;,&#39; &#39;,$str); $str = trim($str); $str = str_replace(&#39; &#39;,&#39;-&#39;,$str); return $dateType == &#39;unix&#39; ? strtotime($str) : $str; } function parseMore($str){ $str = trim($str); $tmp = explode(iconv(&#39;gbk&#39;,&#39;UTF-8&#39;,&#39;:&#39;),$str); return $tmp[1]; } function parsePic($str) { $a = array(); preg_match_all(&#39;/src="(.[^"]*)"/i&#39;,$str,$a); $result = $a[1]; return $result; } class array2xml { var $xml; function array2xml($array,$encoding=&#39;gbk&#39;) { $this->xml=&#39;&#39;; if(count($array) > 1) { $array = array(&#39;catalog&#39; => $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.= "<$key>"; $xml.= is_array($val) ? $this->_array2xml($val) : $val; list($key,) = explode(&#39; &#39;,$key); $xml .= ""; } return $xml; } } ?>

encode.func.php

 $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;
}
?>

推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
author-avatar
mobiledu2502860093
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有