X-Post от Schollz.com
Я долго ждал, чтобы взять гончарный класс. В городе почти 1 миллиона человек удивительно мало гончарных классов, и есть еще меньше классов керамики, которые происходят вне рабочего времени. Один из классов, которые я знал о том, что имели только 12 доступных сидений, которые мгновенно распроданы при открытии регистрации. На самом деле, я уже пропустил регистрацию на этот класс несколько раз.
Я узнал, что спрос был настолько велик для этого класса CATELY, что сопровождающие сайта должны были выбрать случайное время, чтобы открыть регистрацию, чтобы предотвратить разбойник серверов. Поскольку я не мог провести весь день освежающий веб-сайт гончарни, чтобы увидеть, была ли доступна регистрация, я решил написать программу, чтобы помочь подписаться на этот класс.
Скрипт для предупреждения Когда веб-сайт меняется
Я позаботился, не пропустил регистрацию на этот раз, написав сценарий, который следит за веб-сайтом регистрации и отправляет оповещение на мой телефон, когда он меняется (когда открывается регистрация). Их тонны онлайн-сервисов, которые делают это, но они стоят денег, если вы хотите проверить сайт чаще, чем раз каждые 15 минут. Тем не менее, написание этого кода невероятно легко и удовлетворяет.
Сценарий, который я написал, находится в Python, который делает обработку изображений и оповещение. Снимки веб-сайта принимаются с помощью скрипта узла (используя uppeteeter ), который запускается из сценария Python.
Я узнал несколько тонких вещей о отслеживании веб-сайта при выполнении этого – а именно Scraping веб-сайта проще, если вы можете заблокировать рекламу, и что SMTP – лучшая бесплатная служба уведомления. Больше на этом ниже, но если вы просто хотите, чтобы код, скрипт и инструкции по использованию его находятся на моем GitHub: https://github.com/schollz/websitechanges Отказ
Блокируйте рекламу, прежде чем делать снимок
Скриншот сайта загружается с помощью Кукла , что очень легко сделать (его один из примеры !).
Однако одна тонкость вот что мне нужно сравнить два скриншота вовремя для изменений. Поскольку реклама может меняться каждый раз, когда вы перезагрузите страницу, я понял, что важно удалить рекламу, чтобы получить воспроизводимый вид на сайт. Это действительно легко сделать с Кукла Отказ Сначала скачайте Хостых файлов а затем загрузить его в скрипт узла:
const fs = require('fs');
hosts = {};
//now we read the host file
var hostFile = fs.readFileSync('hosts', 'utf8').split('\n');
var hosts = {};
for (var i = 0; i < hostFile.length; i++) {
if (hostFile[i].charAt(0) == "#") {
continue
}
var frags = hostFile[i].split(' ');
if (frags.length > 1 && frags[0] === '0.0.0.0') {
hosts[frags[1].trim()] = true;
}
}
А потом в Кукла Вы можете заблокировать все запросы на все в файле Hosts:
/* ... puppeteer setup omitted */
await page.setRequestInterception(true)
page.on('request', request => {
var domain = null;
var frags = request.url().split('/');
if (frags.length > 2) {
domain = frags[2];
}
// just abort if found
if (hosts[domain] === true) {
request.abort();
} else {
request.continue();
}
});
Таким образом, все объявления удаляются, и вы просто получаете пустое место или нет места, где они были.
SMTP – самый простой, самый дешевый способ отправить уведомления
Регистрация веб-сайта гончарни может произойти в любое время в середине ночи (оно закончилось в 4:43 утра). Мне нужен способ, которым изменение сайта может сообщить мне, а именно, отправив текстовое сообщение. Я могу использовать свой телефон, чтобы сыграть громкий звук, когда приходит сообщение. Но как отправить текстовое сообщение?
Оказывается очень просто! Чтобы отправить уведомление на свой телефон, вы просто отправьте электронное письмо! Ваш телефонный провайдер обычно снабжает адрес электронной почты для вашего телефона. Вот те, о которых я знаю:
- Verizon:
Phonenumber@vtext.com. - Спринт:
Phonenumber@messaging.sprintpcs.com.
Но тогда как вы отправляете электронную почту из программы? Вы можете использовать службу электронной почты API. Однако некоторые из них, как MailGun, побуждают вас предложением свободного уровня только на Позже удалите свободный уровень Отказ Но альтернатива легко, быстро и бесплатно.
Альтернатива – использовать SMTP который снабжен практически любой бесплатной электронной почтой. Например, вы можете использовать новую учетную запись Gmail со случайным именем пользователя и паролем. Чтобы включить SMTP в Gmail:
- Если вы используете удаленный сервер, прочитайте предостережение внизу этой страницы.
- Перейдите в «Настройки», например Нажмите на значок «Gears» и выберите «Настройки».
- Нажмите на «Переадресация и POP/IMAP».
- Включить «доступ к IMAP» и/или «POP скачать»
- ГОТО https://myaccount.google.com/lessSecureapps и повернуть «Разрешить менее безопасные приложения» на «на».
Вот и все! Теперь вы можете отправлять электронные письма в Python, используя такую функцию:
import os
import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
def send_email(smtpemail, smtppass, to, subject, body, attachment):
img_data = open(attachment, "rb").read()
msg = MIMEMultipart()
msg["Subject"] = subject
msg["From"] = smtpemail
msg["To"] = to
text = MIMEText(body)
msg.attach(text)
image = MIMEImage(img_data, name=os.path.basename(attachment))
msg.attach(image)
s = smtplib.SMTP("smtp.gmail.com", "587")
s.ehlo()
s.starttls()
s.ehlo()
s.login(smtpemail, smtppass)
s.sendmail(msg["From"], msg["To"], msg.as_string())
s.quit()
Теперь вы можете получить свою программу отправить уведомление на свой телефон, с изображением изменений.
Вернуться к керамике
Я написал этот скрипт накануне вечером до того, как была установлена регистрация класса Coatedy. Точное время регистрация была открыта, была случайной. Но потом, в 4:43 утра я получил уведомление:
Я проверил веб-сайт и увидел, что это действительно открылась регистрация, и я зарегистрировался!
Интересно, хотя я думал, что я буду первым, что было уже два других людей, зарегистрированных в то время, когда я сделал регистрацию! Это означает, что я не первый, кто сделает этот тип вещи для этого конкретного класса. Но мой код – это открытый источник в https://github.com/schollz/websitechanges. Поэтому я надеюсь, что у всех будет шанс тоже попробовать.
Gmail SMTP заблокирован
Есть предостережение об использовании SMTP с Gmail. Gmail будет иметь тенденцию заблокировать доступ SMTP, если вы создаете учетную запись на одном компьютере, а затем используете его на удаленном сервере (например, цифровой океан).
Чтобы обойти это, обязательно создайте учетную запись на удаленном сервере, если именно здесь вы планируете использовать его.
Сделать это, SSH на удаленный сервер, используя
ssh -D 8123 -C -N user@remoteserver
-D Параметр свяжет носковый порт для 8123 Отказ Теперь перейдите на настройки Firefox и измените порт носков в 8123 Отказ Теперь Firefox будет использовать ваш удаленный сервер, и вы можете настроить SMTP удаленно. Затем измените его назад, когда закончите!
Оригинал: “https://dev.to/schollz/a-python-script-to-register-for-a-pottery-class-172k”