J'ai créé une application qui vous avertira lorsqu'un nouvel article est publié sur le net news cible au centre de notification de Mac.
① De nouveaux articles sont publiés ② Le centre de notification vous informera (la notification disparaîtra dans quelques secondes) ③ ー a Cliquez sur l'icône de notification pour ouvrir l'article correspondant ③ ー b Les articles qui ne se sont pas ouverts sont stockés dans la fenêtre de notification même si le Mac ne remarque pas la notification.
Les outils qui répondent aux spécifications ci-dessus sont automatiquement exécutés au démarrage du système d'exploitation. De plus, même si l'outil s'arrête anormalement en raison d'une défaillance temporaire de la communication, etc., il sera redémarré.
Créé en 5 étapes.
A. Les conditions de détection des mises à jour d'URL ont été modifiées comme suit. ・ Existant Lorsque la date d'en-tête et le contenu de la page WEB ont changé depuis la dernière acquisition ·cette fois Lorsque seule la partie article de la page WEB a changé depuis la dernière acquisition
mdfmonitor.py
def _check_modify(self, url, o_rbody):
n_rbody = self._get_text(url)
if n_rbody == o_rbody:
return False
else:
return True
def _get_text(self, url):
try:
l=[]
title = urladrs = icon = []
for line in requests.get(url).iter_lines():
# get title
if line.find("<h2>") >= 0:
title = re.sub(".*html\">", "", line)
title = re.sub("</a>.*", "", title)
# get url
if line.find("<h2>") >= 0:
urladrs = re.sub(".*href=\"", "", line)
urladrs = re.sub("\">.*", "", urladrs)
# get icon
if re.search("<img src=.* class=\"pict.*\"", line):
icon = re.sub("\s.*<a.*img src=\"", "", line)
icon = re.sub("\" width.*", "", icon)
if title and urladrs and icon:
l.append([title, urladrs, icon])
title = urladrs = icon = []
return l
except requests.exceptions.ConnectionError:
raise ConnectionError("Monitor can't connect the server of url you added.")
Étant donné que la logique de détection de la nouvelle arrivée dépend de la page WEB à détecter, elle est inévitablement non générale. Si le nombre de cibles de détection augmente, il est préférable de créer un fichier externe pour les mots-clés de détection.
B. Le processus d'extraction des informations d'historique de mise à jour d'URL a été modifié comme suit. ・ Existant Processus d'extraction des informations d'historique de mise à jour d'URL ·cette fois Stockez uniquement le nouveau nom d'article, la nouvelle URL d'article et la nouvelle image d'en-tête d'article acquise dans A ci-dessus dans une liste multidimensionnelle.
mdfmoniter.py
def _diffgen(self):
l = []
for new in self.new_rbody:
if not new in self.old_rbody:
l.append(new)
return l
Exécution du terminal-notifier Je voulais l'exécuter tel quel après la création de l'instruction de commande, mais lorsque je l'exécute par démarrage automatique, le terminal-notifier se termine anormalement pour une raison quelconque. Par conséquent, la commande n'est pas exécutée ici, mais est exécutée par cron.
newsmoniter.py
#!/usr/bin/python
#coding: utf-8
import os
from mdfmonitor import URLModificationMonitor
# create Watcher instnce
monitor = URLModificationMonitor()
# append file to mdfmonitor instance
monitor.add_url("http://blog.esuteru.com")
for mdf in monitor.monitor():
for title, urladrs, icon in mdf.diff:
cmd = "/usr/local/bin/terminal-notifier -title new! -message {0} -open {1} -sound Submarine -appIcon {2}".format(title, urladrs, icon)
f2 = open("/usr/local/bin/news_cmd.sh", "w")
f2.write(cmd)
os.chmod("/usr/local/bin/news_cmd.sh", 0777)
f2.close()
3.newsmoniter.py Outil de surveillance de la vie et de la mort Le newsmoniter.py ci-dessus peut se terminer anormalement en raison d'une erreur de communication temporaire, etc., et le processus peut disparaître. Cet outil est un outil pour détecter la disparition et le redémarrer.
autorun.sh
#!/bin/sh
while true;
do
ps -ef | grep newsmoniter.py | grep -v grep
if [ $? = "1" ]; then
echo "restart newsmoniter.py"
/usr/local/bin/newsmoniter.py
fi
sleep 10
done
/Library/StartupItems/Newsmoniter
StartService()
{
/usr/local/bin/autorun.sh
}
cron
* * * * * /usr/local/bin/news_cmd.sh > /dev/null 2>&1; rm -f /usr/local/bin/news_cmd.sh > /dev/null 2>&1
Recommended Posts