CoderCastrov logo
CoderCastrov
Питон

Как раздражать своих друзей с помощью науки о данных

Как раздражать своих друзей с помощью науки о данных
просмотров
4 мин чтение
#Питон

Парсинг погодных данных и использование 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. Проверьте эту страницу для полного руководства.

Automate the execution of your python script using Windows built-in Task Scheduler

Наконец, нам нужно убедиться, что мы действительно получаем push-уведомление на нашем телефоне. К счастью, Telegram позволяет указать, какие сообщения пользователей будут вызывать push-уведомление, чтобы вас не беспокоили другие уведомления Telegram.

Perfect! The Telegram notification works and you’ll never miss an opportunity to annoy your friends anymore

Мы готовы! Когда наступит подходящий момент, вы будете уведомлены о идеальной возможности отправить своим друзьям такие картинки, как следующие:

В то время как лучшее, что могут придумать ваши друзья дома, это такие фотографии:

Спасибо за чтение! Если вы хотите попробовать код самостоятельно, репозиторий на Github можно найти здесь. Если вы хотите быть в курсе моих последних статей и проектов, не стесняйтесь следовать за мной на Medium, Github или связаться со мной на Linkedin.