Как раздражать своих друзей с помощью науки о данных
Парсинг погодных данных и использование TelegramBot для автоматизации процесса, чтобы вызвать зависть у ваших друзей.
Во время общения с другими эмигрантами во время моего пребывания в Мадриде, я столкнулся с многими людьми, которые сталкиваются с одной и той же проблемой: как лучше раздражать своих друзей дома?
Я считаю, что нашел отличный инструмент, чтобы сделать этот процесс проще. Помимо красивых площадей, паэльи, пива и футбола, погода, возможно, является самым замечательным, что может предложить Мадрид. Но как это можно использовать, чтобы вызвать зависть у ваших близких дома?
Отличный способ раздражать своих друзей дома - показывать им красивую погоду в вашем городе проживания, отправляя фотографии солнечного парка / террасы / видом из спальни. Однако это не так эффективно, когда погода дома тоже хорошая. Поэтому, чтобы достичь наибольшего эффекта, критически важно отправлять эти фотографии, когда погода дома находится в самом худшем состоянии.
В этой статье я покажу вам, как вы можете создать свой собственный скрипт на Python, который уведомит вас, когда наступает идеальный момент, чтобы вызвать зависть у всей вашей группы друзей дома. Скрипт парсит данные о погоде с Google и затем уведомляет вас через Telegram-бота, что пришло время сделать идеальную фотографию.
Учебник
Для настройки скрипта сначала нам нужно импортировать некоторые библиотеки Python. Если вы еще не установили эти библиотеки, вы можете сделать это с помощью pip.
from bs4 import BeautifulSoup
import requests
import telegram_send
Получение данных о погоде
Первый шаг программы - получить данные о погоде, парся Google погоду. Мы ищем в Google "Погода в Утрехте", находим элементы, которые отображают температуру и информацию о погоде (такую как солнечно, облачно или дождливо) и, наконец, сохраняем их в переменные "weather_info" и "temperature". Вам нужно только изменить домашний и текущий город в скрипте, чтобы убедиться, что скрипт работает для вас.
home_city = 'Утрехт'
current_city = 'Мадрид'headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}url1 = f'[https://www.google.com/search?q={home_city}+weather&oq={home_city}+weather&aqs=chrome.0.35i39l2j0l4j46j69i60.6128j1j7&sourceid=chrome&ie=UTF-8'](https://www.google.com/search?q=%7Bhome_city%7D+weather&oq=%7Bhome_city%7D+weather&aqs=chrome.0.35i39l2j0l4j46j69i60.6128j1j7&sourceid=chrome&ie=UTF-8%27)
url2 = f'[https://www.google.com/search?q={current_city}+weather&oq={current_city}+weather&aqs=chrome.0.35i39l2j0l4j46j69i60.6128j1j7&sourceid=chrome&ie=UTF-8'](https://www.google.com/search?q=%7Bcurrent_city%7D+weather&oq=%7Bcurrent_city%7D+weather&aqs=chrome.0.35i39l2j0l4j46j69i60.6128j1j7&sourceid=chrome&ie=UTF-8%27)res1 = requests.get(url1, headers=headers)
res2 = requests.get(url2, headers=headers)soup1 = BeautifulSoup(res1.text, 'html.parser')
soup2 = BeautifulSoup(res2.text, 'html.parser')weather_info1 = soup1.select('#wob_dc')[0].getText().strip()
weather_info2 = soup2.select('#wob_dc')[0].getText().strip()temperature1 = soup1.select('#wob_tm')[0].getText().strip()
temperature2 = soup2.select('#wob_tm')[0].getText().strip()
Для получения более подробной информации о шагах парсинга Google погоды, ознакомьтесь с этой статьей. Я использовал этот метод из-за его простоты, но если вы хотите быть более продвинутыми и также учитывать прогноз погоды на следующие дни, вы можете использовать более элегантные решения, такие как ClimaCell, Aerisweather и многие другие.
TelegramBot
Чтобы убедиться, что мы получаем уведомления на нашем телефоне, мы настроим Telegram-бота и заставим его отправлять нам сообщение, когда выполняется определенное условие. Есть несколько дополнительных шагов для настройки Telegram-бота, которые описаны здесь. Другие способы получения уведомлений на вашем телефоне - Pushbullet (для пользователей Android), Twillio (бесплатная пробная версия, если вы из США или Канады) и Slack.
def send_message():
difference = int(temperature2) - int(temperature1)
if difference >= 8 and ((weather_info1 == 'Nublado' or weather_info1 == 'Lluvia' or weather_info1 == 'Nieve') and weather_info2 == 'Soleado' or weather_info2 == 'Bruma'):
message = ("Погода сейчас прекрасная, а дома довольно плохая, идеальное время, чтобы отправить это фото!")
telegram_send.send(messages=[message])
else:
pass
send_message()
Вышеприведенная функция проверяет, превышает ли разница в температуре определенный порог (8℃), ясно ли или безоблачно в вашем текущем городе и является ли погода дома облачной, дождливой или снежной. Если эти условия выполняются, Telegram-бот отправляет вам сообщение, чтобы напомнить вам о прекрасной возможности сделать ваших друзей действительно ревнивыми.
Автоматизация!
Последний шаг в процессе - убедиться, что скрипт выполняется автоматически, что можно сделать самым простым способом с помощью встроенного планировщика задач в Windows. Проверьте эту страницу для полного руководства.
Наконец, нам нужно убедиться, что мы действительно получаем push-уведомление на нашем телефоне. К счастью, Telegram позволяет указать, какие сообщения пользователей будут вызывать push-уведомление, чтобы вас не беспокоили другие уведомления Telegram.
Мы готовы! Когда наступит подходящий момент, вы будете уведомлены о идеальной возможности отправить своим друзьям такие картинки, как следующие:
В то время как лучшее, что могут придумать ваши друзья дома, это такие фотографии:
Спасибо за чтение! Если вы хотите попробовать код самостоятельно, репозиторий на Github можно найти здесь. Если вы хотите быть в курсе моих последних статей и проектов, не стесняйтесь следовать за мной на Medium, Github или связаться со мной на Linkedin.