Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Прогноз погоды (https://javascript.ru/forum/project/81557-prognoz-pogody.html)

ALFRED450 14.12.2020 22:53

Прогноз погоды
 
$monthes = array(
    1 => 'Января', 2 => 'Февраля', 3 => 'Марта', 4 => 'Апреля',
    5 => 'Мая', 6 => 'Июня', 7 => 'Июля', 8 => 'Августа',
    9 => 'Сентября', 10 => 'Октября', 11 => 'Ноября', 12 => 'Декабря'
);

$url = "https://api.openweathermap.org/data/2.5/weather?id=498817&units=metric&appid=42633145136a94711f8d879deade6bf1&lang=ru";

$contents = file_get_contents($url);
$weather=json_decode($contents);
*!*
$show_weather=$weather->main->temp."°C";
*/!*
$icon=$weather->weather[0]->icon.".png";
$today = date("j.m.Y");
$cityname = $weather->name;
$wind=$weather->wind->speed."м/с";
$humidity=$weather->main->humidity."%";

echo $today."<br />".
$cityname."<br />".
"Влажность: ".$humidity."<br />".
"Ветер: ".$wind."<br />".
*!*
$show_weather."<br />
<img src='http://openweathermap.org/img/wn/".$icon."' />";
*/!*


Прошу помочь сделать вывод погоды в целых числах.
И сломал голову как правильно выстроить: иконка ->далее температура (22 и 23 строка)
И если не затруднит месяц прописью как правильно реализовать

laimas 15.12.2020 00:12

Цитата:

Сообщение от ALFRED450
сделать вывод погоды в целых числах

Либо отбрасывать дробную часть, либо округлять в большую/меньшую сторону.

Цитата:

Сообщение от ALFRED450
иконка ->далее температура

Ну так выводите первой ее.

Цитата:

Сообщение от ALFRED450
месяц прописью

https://www.php.net/manual/ru/function.setlocale.php - пример 2. Либо берите его из $monthes по номеру месяца, для чего вы создавали этот массив?

ALFRED450 15.12.2020 00:52

Цитата:

Либо отбрасывать дробную часть, либо округлять в большую/меньшую сторону.
я понимаю, но реализовать не могу, смотрел доки по api на сайте, но так примера не нашел


Цитата:

Ну так выводите первой ее.
вывожу, но что то ломается и летят ошибки, где то я теряю какой то символ


Цитата:

https://www.php.net/manual/ru/function.setlocale.php - пример 2. Либо берите его из $monthes по номеру месяца, для чего вы создавали этот массив?
массив создан как раз для этих целей, но как и выше знаний не хватает

laimas 15.12.2020 00:59

Какое API, одну из функций PHP https://www.php.net/manual/ru/ref.math.php , какую, это не мне решать.

Цитата:

Сообщение от ALFRED450
массив создан как раз для этих целей, но как и выше знаний не хватает

Так если не читать о функциях, то откуда они появятся. Функция date('n') возвращает номер месяца без ведущего нуля. Как по его номеру из массива получить название месяца или вы и этого не знаете?

ALFRED450 15.12.2020 02:04

Первую задачу вроде выполнил до целого числа
$show_weather=$weather->main->temp."°C";
$icon=$weather->weather[0]->icon.".png";
$today = date("j.m.Y");
$cityname = $weather->name;
$url = 'http://openweathermap.org/img/wn/';
$wind=$weather->wind->speed."м/с";
$humidity=$weather->main->humidity."%";
*!*
$w_weather = ceil($show_weather);
*/!*

но как то странно повел ceil округлив 8,9 до 8
echo $today."<br />".
$cityname."<br />".
"Влажность: ".$humidity."<br />".
"Ветер: ".$wind."<br />".
*!*
$w_weather."<br />
*/!*
<img src='http://openweathermap.org/img/wn/".$icon."' />";

и как то странно потерял °C, теперь просто показывает число

laimas 15.12.2020 02:33

Цитата:

Сообщение от ALFRED450
странно повел ceil округлив 8,9 до 8

А вы уверены, что $show_weather это число? Ну-ка внимательно на свой код ...

ALFRED450 15.12.2020 02:56

Цитата:

Сообщение от laimas (Сообщение 531744)
А вы уверены, что $show_weather это число? Ну-ка внимательно на свой код ...

уверен что да
вот что получаю по запросу
"weather":[{"id":804,"main":"Clouds","description":"пасм рно","icon":"04n"}]
{"temp":-9.04,"feels_like":-14.09,"temp_min":-9.04,"temp_max":-9.04,....}
а $show_weather я же могу назвать как угодно $moya_pogoda
но значек впереди погоды не могу поставить, ломается все

спасибо за https://www.php.net/manual/ru/ref.math.php

laimas 15.12.2020 05:57

Цитата:

Сообщение от ALFRED450
уверен что да

А это что?

$show_weather=$weather->main->temp."°C";

ALFRED450 15.12.2020 08:41

Цитата:

Сообщение от laimas (Сообщение 531746)
А это что?

$show_weather=$weather->main->temp."°C";

сделал так:
$show_weather=$weather->main->temp;
$icon=$weather->weather[0]->icon.".png";
$today = date("j.m.Y, H:i");
$cityname = $weather->name;
$wind=$weather->wind->speed." м/с";
$humidity=$weather->main->humidity."%";
$w_weather = ceil($show_weather);
*!*
$sw_weather = $w_weather. "°C";
*/!*

по temp он получает число, а "°C" просто указываешь что это, хоть кг, я так понимаю, примеры с интернета по крайней мере так показывают.

laimas 15.12.2020 08:46

А зачем столько лишнего писать, что используется только раз?

$show_weather=$weather->main->temp;
$sw_weather = $w_weather. "°C";
$w_weather = ceil($show_weather);


и может все-таки round? И сразу при выводе, без создания не понятно для чего промежуточных переменных.

round($weather->main->temp) . '°C'


Часовой пояс GMT +3, время: 11:30.