Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Яндекс погода  (Прочитано 1880 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Cxms

  • Автор темы
  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Яндекс погода
« : 28 Январь 2016, 07:52:39 »
Вывод в zenity текущей погоды с доп. информацией:
Yandex_current_weather.sh
#!/bin/bash

# Просмотр текущей погоды от Яндекс в zenity

# Ссылка на Яндекс погоду для города
LINK="https://pogoda.yandex.ru/moscow"

#=======================================================================
{
DATA="$(wget -qO - "$LINK" | tr -d '\n|\r|\t' | grep -o '<div class="content">.*</div></div><div class="forecasts' | sed 's/></>\n</g')"
[ -z "$DATA" ] && { echo "Не удалось получить данные."; exit; }

CRNT_CITY="$(echo "$DATA" | grep '<h1 class="title title_level_1">' | sed -s 's/<[^>]*>//g;s/&nbsp;//')"
CRNT_TEMP="$(echo "$DATA" | grep '<div class="current-weather__thermometer current-weather__thermometer_type_now">' | sed -s 's/<[^>]*>//g')"
WEATHER="$(echo "$DATA" | grep '<span class="current-weather__comment">' | sed -s 's/<[^>]*>//g')"
DATA_UPD_INFO="$(echo "$DATA" | grep '<div class="current-weather__info-row current-weather__info-row_type_time">' | sed -s 's/<[^>]*>//g')"
OTHER_DATA="$(echo "$DATA" | grep '<span class="current-weather__info-label">' | sed -s 's/<[^>]*>//g;s/Закат/  Закат/')"
DAY_PARTS="$(echo "$DATA" | tr -d '\n' | grep -o '<span class="current-weather__thermometer-name">.*<span class="current-weather__col current-weather' \
| sed 's/<[^>]*>//g; s/днём/днём /; s/ночью/\nночью /; s/<span class="current-weather__col current-weather//')"

echo -e "\n$CRNT_CITY:\n(${DATA_UPD_INFO})\n\n$CRNT_TEMP\n$WEATHER\n\n$DAY_PARTS\n\n$OTHER_DATA\n" | sed 's/^/\t/g'

} | zenity --text-info --width=300 --height=400 --title="Яндекс погода"


cкрин:


Запуск:
(Нажмите, чтобы показать/скрыть)

Сохранение подробных прогнозов погоды Яндекс на 10 дней в файл:
Yandex_prognozi.sh
#!/bin/bash

# Сохранение подробных прогнозов погоды Яндекс на 10 дней в файл

# Ссылка на Яндекс погоду для города
LINK="https://pogoda.yandex.ru/moscow"

# Имя файла в котором будет сохранен прогноз
FILE="Прогноз погоды Яндекс от $(date +"%x").txt"

# Шапка таблицы
HDR=' "___" "Температура" "Погода" "Давление" "Влажность" "Ветер" "___" '

# Разделитель
SEP='============================================================================================================='

#=======================================================================
IFS=$'\n'
TMP_WEB_PAGE="/tmp/tmp_yandex_web_page"
TMP_FILE="/tmp/tmp_yandex_weather_file"
[ -f "$TMP_FILE" ] && rm "$TMP_FILE"
[ -f "$TMP_WEB_PAGE" ] && rm "$TMP_WEB_PAGE"

wget -qO - "$LINK" | tr -d '\n|\r|\t' \
| sed 's/<div class="weather-table__value">//g
s/<small class="forecast-detailed__key">Закат<\/small>//g
s/<small class="forecast-detailed__key">Восход<\/small>//g
s/<div class="forecast-detailed__value">//g' > "$TMP_WEB_PAGE"
[ ${PIPESTATUS[0]} = 0 ] || { echo "Ошибка загрузки страницы $LINK"; exit; }
TITLE="$(cat "$TMP_WEB_PAGE" | grep -o '<title>[^<]*</title>' | sed 's/<[^>]*>//g')"
echo "$HDR" > "$TMP_FILE"

for DAY in $(cat "$TMP_WEB_PAGE" \
| sed 's/<small class="forecast-detailed__weekday">/\n<small class="forecast-detailed__weekday">/g
s/<\/dd>/<\/dd>\n/g' | grep '<small class="forecast-detailed__weekday">'); do
    STRINGS="$(echo "$DAY" | sed 's/></>\n</g')"
    DAY_N="$(echo "$STRINGS" | grep '<strong class="forecast-detailed__day-number">' | sed 's/<[^>]*>//g')"
    WEEK_DAY_NAME="$(echo "$STRINGS" | grep '<small class="forecast-detailed__weekday">' | sed 's/<[^>]*>//g')"
    TEMPS_AR=($(echo "$STRINGS" | grep '<div class="weather-table__temp">' | sed 's/<[^>]*>//g;s/&hellip;/.../'))
    WEATHERS_AR=($(echo "$STRINGS" | grep '<td class="weather-table__body-cell weather-table__body-cell_type_condition">' | sed 's/<[^>]*>//g'))
    PRESSURES_AR=($(echo "$STRINGS" | grep '<td class="weather-table__body-cell weather-table__body-cell_type_air-pressure">' | sed 's/<[^>]*>//g'))
    HUMIDITIES_AR=($(echo "$STRINGS" | grep '<td class="weather-table__body-cell weather-table__body-cell_type_humidity">' | sed 's/<[^>]*>//g;s/%/ %/g'))
    WINDS_AR=($(echo "$STRINGS" | grep '<abbr class=" icon-abbr" title="Ветер:' | sed -r 's/.*"Ветер: (.*)".*/\1/g'))
    WIND_SPEEDS_AR=($(echo "$STRINGS" | grep '<span class="wind-speed">' | sed 's/<[^>]*>//g'))
    SUNRISE="$(echo "$STRINGS" | grep '<div class="forecast-detailed__sunrise">' | sed 's/<[^>]*>//g')"
    SUNSET="$(echo "$STRINGS" | grep '<div class="forecast-detailed__sunset">' | sed 's/<[^>]*>//g')"
    N=0; echo -e "$SEP\n$DAY_N ($WEEK_DAY_NAME)  Восход: $SUNRISE Закат: $SUNSET\n"
    for DAY_PART in Утром Днем Вечером Ночью; do
        echo -e " \"$DAY_PART\" \"${TEMPS_AR[N]}\" \"${WEATHERS_AR[N]}\" \"${PRESSURES_AR[N]}\" \"${HUMIDITIES_AR[N]}\"  \"${WINDS_AR[N]}\" \"${WIND_SPEEDS_AR[N]} М/с\""
        let N+=1
    done
    unset STRINGS TEMPS_AR WEATHERS_AR PRESSURES_AR HUMIDITIES_AR WINDS_AR WIND_SPEEDS_AR SUNRISE SUNSET
    echo
done >> "$TMP_FILE"
echo -e "$SEP\n$TITLE\n\n$SEP" > "$FILE"
cat "$TMP_FILE" | column -s '"' -te | sed -r 's/^ +/   /' >> "$FILE"
echo "$SEP" >> "$FILE"
rm "$TMP_FILE" "$TMP_WEB_PAGE"


cкрин:

(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 04 Февраль 2016, 13:24:24 от Cxms »

Punko

  • Гость
Re: Яндекс погода
« Ответ #1 : 28 Январь 2016, 09:51:16 »
Спасибо, надо будет попробовать, хотя сам больше доверяю сервису гисметео(не реклама).

Принцип работы - мы скачали файл на машину, потом распарсили нужную информацию из исходного кода (непосредственно html) и вывели, да?

И у меня вопрос по поводу запуска скриптов, давно уже интересно.

bash Yandex_current_weather.sh
Зачем писать bash, если указан шебанг в файле?

Я так понимаю, что если бы мы захотел запустить в zsh, sh, fish, а шебанг указывал на bash, тогда имеет смысл. А так же можно просто

./script_name?
Реально интересно и непонятно =)




Оффлайн Cxms

  • Автор темы
  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Re: Яндекс погода
« Ответ #2 : 28 Январь 2016, 10:02:39 »
Цитировать
мы скачали файл на машину, потом распарсили нужную информацию из исходного кода (непосредственно html) и вывели, да?
Да

Цитировать
Зачем писать bash, если указан шебанг в файле?
Иногда было что ./script_name вызывал sh несмотря на шабанг.

Оффлайн Cxms

  • Автор темы
  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Re: Яндекс погода
« Ответ #3 : 04 Февраль 2016, 13:26:10 »
Подправил, обновил.
Теперь разбор данных о текущей погоды идет без создания файлов и массивов.
+ Вывод в zenity.

Переписал и улучшил сбор погоды на 10 дней.

 

Страница сгенерирована за 0.057 секунд. Запросов: 25.