包含php免费调用天气的词条

发布时间:2022-11-24

本文目录一览:

  1. php获取天气预报的代码
  2. PHP 页面调用天气预报web服务 我想在一个PHP页面直接调用现成的webservice
  3. 百度首页的天气预报显示用php怎么实现
  4. php的socket调用可以实现查天气吗
  5. 怎么用php抓取天气预报?先说下思路,再举个例子。

php获取天气预报的代码

<?php
$URLStyle = "";
$chinaURL = sprintf($URLStyle, "china");
$chinaStr = file_get_contents($chinaURL);
$chinaObj = simplexml_load_string($chinaStr);
$chinaObjLen = count($chinaObj->city);
echo "chinaObjLen = " . $chinaObjLen . "\n";
for ($i = 0; $i < $chinaObjLen; $i++) {
    //遍历省一级节点,共37个
    $level1 = $chinaObj->city[$i]["pyName"];
    $shengjiURL = sprintf($URLStyle, $level1);
    $shengjiStr = file_get_contents($shengjiURL);
    $shengjiObj = simplexml_load_string($shengjiStr);
    $shengjiObjLen = count($shengjiObj->city);
    for ($j = 0; $j < $shengjiObjLen; $j++) {
        //遍历市一级节点
        $level2 = $shengjiObj->city[$j]["pyName"];
        $shijiURL = sprintf($URLStyle, $level2);
        $shijiStr = file_get_contents($shijiURL);
        $shijiObj = simplexml_load_string($shijiStr);
        //直辖市和海南、台湾、钓鱼岛等没有县级节点
        if (!$shijiObj) {
            echo "WARNNING: not exsit next level node. - " . $level1 . "-" . $shijiURL . "\n";
            echo '   "' . $shengjiObj->city[$j]["cityname"] . '" = ';
            echo $shengjiObj->city[$j]["url"] . ",\n";
            continue;
        }
        $shijiObjLen = count($shijiObj->city);
        for ($k = 0; $k < $shijiObjLen; $k++) {
            //遍历县一级节点
            $xianji_code = $shijiObj->city[$k]["url"];
            echo '   "' . $shijiObj->city[$k]["cityname"] . '" = ';
            echo $shijiObj->city[$k]["url"] . ",\n";
        }
    }
}
?>

通过XML接口根节点递归获得全国几千个县以上城市code code的代码

PHP 页面调用天气预报web服务 我想在一个PHP页面直接调用现成的webservice

完全可以。前提是要打开soap扩展,调用方法如下:

<?php
$client = new SoapClient('');
$parm = array('theCityCode' => '三亚', 'theUserID' => '');
$result = $client->getWeather($parm);
print_r($result);
?>

百度首页的天气预报显示用php怎么实现

方式一、你可以去气象局的网站使用php(python)爬虫抓取网页HTML内容提取其中的信息即可。 方式二、气象局的网站一般提供了免费的API接口,可以得到一个封装好的JSON数据包,拆开就能得到很多信息。

php的socket调用可以实现查天气吗

本文分享下,php调用yahoo与sina的天气api,实现实时显示天气预报的代码,有兴趣的朋友研究下吧。

yahoo 天气预报

地址 代码:

<?php
header('Content-Type: text/html; charset=utf-8');
class weather {
    static $url = ';w=';
    static $city = 'Beijing'; //默认城市北京 这里要注意的是 city 要填拼音 我试过用中文有好几个地区都调用不到
    static $weatherXML = '';
    static $woeid_file = "woeid";
    static $file_path = "data/";
    /**
     * 获得远程xml并缓存到本地
     */
    static public function getXML($city = null) {
        if ($city != null){
            self::$city = $city;
        }
        self::$weatherXML = self::$file_path . md5(self::$city) . '-weather.xml';
        if (file_exists(self::$weatherXML)) {
            $fileTime = filemtime(self::$weatherXML);
            $stater = time() - $fileTime - 60 * 60 * 2;
            if ($stater > 0) {
                return true;
            }
        }
        //获取woeid
        $woeid = self::getWOEID();
        self::$url = self::$url . $woeid[0];
        //获取当天 天气
        $XML = self::vget(self::$url);
        //保存当天 天气到文件
        self::cacheXML($XML);
        self::analysisXML($XML);
    }
    static public function analysisXML($simple) {
        $p = xml_parser_create();
        xml_parse_into_struct($p, $simple, $vals, $index);
        xml_parser_free($p);
        //本周天气
        $weekindex = $index['YWEATHER:FORECAST'];
        $week = array();
        foreach ($weekindex as $k => $v) {
            $week[$k] = $vals[$v]['attributes'];
        }
        unset($index);
        unset($vals);
        print_r($week);
        /*
        yweather:forecast day="Wed" date="18 Sep 2013" low="20" high="32" text="Sunny" code="32"/
        * day 星期
        * date 日期
        * low 最低温度
        * high 最高温度
        * test 天气状态
        * code 天气图标
        */
    }
    /*
     * 取得地区WOEID码
     */
    static private function getWOEID(){
        static $woeid = array();
        if (isset($woeid[self::$city])) {
            return $woeid[self::$city];
        }
        if (file_exists(self::$file_path . self::$woeid_file)) {
            $woeidSTR = file_get_contents(self::$file_path . self::$woeid_file);
            $woeid = json_decode($woeidSTR, true);
            if (isset($woeid[self::$city])) {
                return $woeid[self::$city];
            }
        }
        $geoPlaces = "'" . self::$city . "%20CH'";
        $XML = simplexml_load_file($geoPlaces);
        if (isset($XML->results->place[0])) {
            $rs = $woeid[self::$city] = $XML->results->place[0]->woeid;
            //保存到文件
            $woeidSTR = json_encode($woeid);
            file_put_contents(self::$file_path . self::$woeid_file, $woeidSTR);
            return $rs;
        } else {
            //如果找不到城市 woeid 默认城市就改为 北京
            self::$city = "Beijing";
            return self::getWOEID();
        }
    }
    /**
     * 创建xml缓存
     * @param $contents 要缓存的内容
     */
    static private function cacheXML($contents) {
        $contents = str_ireplace('?xml version="1.0"?', "?xml version=\"1.0\"? \n", $contents);
        $contents = mb_convert_encoding($contents, 'utf-8', 'gbk');
        file_put_contents(self::$weatherXML, $contents) or die('没有写权限');
    }
    /**
     * 模拟获取内容函数
     * @param type $url
     * @return type
     */
    static private function vget($url) {
        $user_agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)";
        $curl = curl_init(); // 启动一个CURL会话
        curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
        curl_setopt($curl, CURLOPT_USERAGENT, $user_agent); // 模拟用户使用的浏览器
        @curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
        curl_setopt($curl, CURLOPT_HTTPGET, 1); // 发送一个常规的Post请求
        curl_setopt($curl, CURLOPT_TIMEOUT, 120); // 设置超时限制防止死循环
        curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
        $tmpInfo = curl_exec($curl); // 执行操作
        if (curl_errno($curl)) {
            curl_close($curl); // 关闭CURL会话
            die('Errno' . curl_error($curl));
        }
        curl_close($curl); // 关闭CURL会话
        return $tmpInfo; // 返回数据
    }
}
weather::getXML("Changsha");
?>

怎么用php抓取天气预报?先说下思路,再举个例子。

我昨天刚做了个,本来打算自己用,你既然问,就分享了吧! PS:因为我是菏泽人,所以,如果你什么都不填,就显示菏泽天气。 如果想显示别的,直接输入就行,比如"香港",然后提交就OK了 不知道是否合乎楼主的意愿(不用JS)