gpt4 book ai didi

php - Google Weather API - 解析和修改数据

转载 作者:数据小太阳 更新时间:2023-10-29 02:50:30 32 4
gpt4 key购买 nike

这个问题不再是最新的——谷歌在 2012 年关闭了非官方的天气 API


我想把一些天气预报放到 friend 的网页上。当我为

http://www.google.com/ig/api?weather=koprivnica,croatia&hl=hr

浏览器返回正确的内容,我想用这段代码解析为 PHP:

<?php
$xml = simplexml_load_file('http://www.google.com/ig/api?weather=koprivnica,croatia&hl=hr');
$information = $xml->xpath("/xml_api_reply/weather/forecast_information");
$current = $xml->xpath("/xml_api_reply/weather/current_conditions");
$forecast_list = $xml->xpath("/xml_api_reply/weather/forecast_conditions");
?>
<!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>VREMENSKA PROGNOZA</title>
</head>
<body>
<h1><?= print $information[0]->city['data']; ?></h1>
<h2>Danas</h2>
<div class="weather">
<img src="<?= 'http://www.google.com' . $current[0]->icon['data']?>" alt="weather"?>
<span class="condition">
<?= $current[0]->temp_f['data'] ?>&deg; F,
<?= $current[0]->condition['data'] ?>
</span>
</div>
<h2>Prognoza</h2>
<?php foreach ($forecast_list as $forecast) : ?>
<div class="weather">
<img src="<?= 'http://www.google.com' . $forecast->icon['data']?>" alt="weather"?>
<div><?= $forecast->day_of_week['data']; ?></div>
<span class="condition">
<?= $forecast->low['data'] ?>&deg; F - <?= $forecast->high['data'] ?>&deg; F,
<?= $forecast->condition['data'] ?>
</span>
</div>
<?php endforeach ?>
</body>
</html>

但是上面的代码不起作用,因为我使用了“hr”而不是“en”(hr = 克罗地亚语):

$xml = simplexml_load_file('http://www.google.com/ig/api?weather=koprivnica,croatia&hl=en')

是工作语法,但返回的数据是英文的,温度是华氏度。

我想这是错误的 UTF-8 编码属性的问题。

我不知道如何获取准确的克罗地亚语文本并将华氏度转换为摄氏度。


  1. 后来我找到了指向 F-to-C solution 的链接并更改了第 19 行:

    <?= $current[0]->temp_f['data'] ?>&deg; F,

    <?= $current[0]->temp_c['data'] ?>&deg; C,

    (我没有在当前版本中使用它,因为 API 似乎处理摄氏度。)

  2. 要在将语言设置为“en”的同时保持 C 中的学位,您可以使用 en-gb .

最佳答案

编码问题:

出于某种原因,Google 返回没有正确编码声明的 XML 内容。人们会期待这样的事情:

<?xml version='1.0' encoding='ISO-8859-2'?>

但是他们跳过了 header 中的编码属性。这使得 simplexml_load_file 函数假定默认编码为 UTF-8。我认为这是他们 API 实现中的一个错误,因为 XML spec defines UTF-8 as the fallback default encoding .

为了弥补这一点,尝试类似的东西:

<?php
$URL = "http://www.google.com/ig/api?weather=koprivnica,croatia&hl=hr";
$dataInISO = file_get_contents($URL);
$dataInUTF = mb_convert_encoding($dataInISO, "UTF-8", "ISO-8859-2");
$xml = simplexml_load_string($dataInUTF);
...

这似乎有效。 ISO-8859-2 值纯属猜测。

华氏度/摄氏度:

在这个 API 中,我没有看到请求以摄氏度而不是华氏度提供温度数据的简单方法(我找不到官方文档,我是瞎子吗?)。然而,从 F 到 C 的转换一点也不难。

试试这个公式:

(°F  -  32)  x  5/9 = °C

您可以在数以千计的地方找到它。我从 http://www.manuelsweb.com/temp.htm 拿来的

关于php - Google Weather API - 解析和修改数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5135030/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com