Faisons quelques exemples de traitement des notifications en Python

Avec des alertes après avoir fait des jugements dans le traitement et des notifications en fin de traitement Il existe des cas occasionnels où vous souhaitez être averti par e-mail ou par un service spécifique. Cela devenait gênant de réfléchir à chaque fois, alors je l'ai résumé.

environnement

Réalisé au google cola boratory. La version Python est ci-dessous. image.png

Mail Tout d'abord, notification par e-mail au solide.

Le serveur SMTP suppose Gmail

import smtplib
from email.mime.text import MIMEText
from email.utils import formatdate

#Adresse e-mail, nom et mot de passe de l'expéditeur (dans le cas de Gmail, émettez et utilisez le mot de passe de l'application)
FROM_ADDRESS = '[email protected]'
FROM_NAME = 'XXXXXX'
MY_PASSWORD = 'xxxxx'

#Faire de la destination un type de liste
TO_ADDRESS = ['[email protected]', '[email protected]']

from_mail_addr = FROM_ADDRESS
_from_name = FROM_NAME
_from_addr = "{} <{}>".format(_from_name, from_mail_addr)


#Créer un message à envoyer
## https://docs.python.org/ja/3.5/library/email-examples.html
def create_message(list_to_addr, subject, body):
    msg = MIMEText(body)
    msg['Subject'] = subject
    # msg['From'] = _from_addr
    msg['From'] = _from_name
    msg['To'] = ','.join(list_to_addr)
    #Je ne sais pas, mais même si je le mets en BCC, il ne sera affiché que dans la colonne appelée BCC, alors arrêtez
    # msg['Bcc'] = ','.join(list_bcc_addrs)
    msg['Date'] = formatdate()
    return msg

#Envoyer à l'aide du serveur SMTP de Gmail
def send_gmail(list_to_addr, msg):
    smtpobj = smtplib.SMTP('smtp.gmail.com', 587)
    smtpobj.ehlo()
    smtpobj.starttls()
    smtpobj.ehlo()
    smtpobj.login(FROM_ADDRESS, MY_PASSWORD)
    smtpobj.sendmail(from_mail_addr, list_to_addr, msg.as_string())
    smtpobj.close()


#Processus à envoyer réellement
##Composition du message
list_to_addr = TO_ADDRESS
subject = "<Exemple de notification>"
import datetime
dt_now = datetime.datetime.now()
#Sauts de ligne\Juste réglé avec n
body = "C'est le contenu à envoyer\Les n sauts de ligne seront-ils reflétés?\n{}"
body = body.format(dt_now.strftime('%Y année%m mois%jour j%H:%M:%S'))

msg = create_message(list_to_addr, subject, body)

##Processus de transmission
send_gmail(list_to_addr, msg)

LINE Puis LINE. Si vous souhaitez notifier LINE, il existe deux types principaux. Dois-je simplement me notifier, ou devrais-je informer un utilisateur spécifique en tant que BOT?

Notifiez-vous

Émettre des jetons pour les salles ci-dessous https://notify-bot.line.me/ja/

import requests
line_notify_api = 'https://notify-api.line.me/api/notify'

payload = {'message': send_message}
headers = {'Authorization': 'Bearer ' + line_notify_token}
line_notify = requests.post(line_notify_api, data=payload, headers=headers)

Notifier par BOT

Vous pouvez également utiliser l'API LINE Bot pour pousser vers un utilisateur spécifique de vos amis

Il s'agit de créer un BOT à partir des éléments suivants https://developers.line.biz/console

import json
import requests

#Définir l'en-tête HTTP
header = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer ' + _access_token,
}

#Définir les données de transmission
send_data = {
  'to': to_user_id,
  'messages': [
      {
          'type': 'text',
          'text': send_message
      }
  ]
}

#Courir
url = 'https://api.line.me/v2/bot/message/push'
res = requests.post(url, headers=header, data=json.dumps(send_data))
if(res.status_code != 200):
  print("error : [{}]".format(res.text))

Slack

Est-ce une tendance récente à vouloir notifier les outils de chat?

Créez une URL sur le canal cible en tant que webhook entrant et lancez-la dans POST OK

import requests
import json
requests.post(slack_url, data=json.dumps({'text': send_message}))

Facile.

Teams

Fondamentalement avec Slack. Créez une URL sur le canal cible en tant que webhook entrant et lancez-la dans POST. C'est juste une fonctionnalité de Teams qui est différente de Slack, mais elle peut être intitulée

Comme il est généré en HTML, il ne sera pas interrompu \ n, donc si vous souhaitez le combiner avec d’autres notifications, vous devez ajouter un traitement de remplacement.

import requests
import json
send_message = send_message.replace('\n', '<BR>')
requests.post(teams_webhook_url, data=json.dumps({'title': subject, 'text': send_message}))

IFTTT

À la fin, j'essaierai de passer au Webhook d'IFTTT pour pouvoir accéder à n'importe quoi

Parce que je ne décrirai que brièvement une procédure un peu compliquée Si vous n'avez jamais créé de webhook avec IFTTT, vous devez abandonner et aller sur une autre page.

    1. Spécifiez les Webhooks comme déclencheur dans la nouvelle applet. image.png
  1. Webhooks n'a que Recevoir une requête Web, alors sélectionnez-la.

    1. Je vais vous donner un nom d'événement. (Notez que ce nom sera également inclus dans l'URL du webhook)
  2. Choisissez l'action que vous aimez Pour le moment, définissez le contenu de sortie en supposant qu'il s'agit de LINE

  3. Décidez du nom de la pomme et appuyez sur Terminer.

A tendance à être déroutant d'ici 6. Sélectionnez Mes services en haut à droite pour afficher le service Webhooks

  1. Appuyez sur Paramètres
  1. Puisque l'URL est décrite, entrez l'URL dans le navigateur. Cet écran est l'écran de configuration IFTTT Webhook. image.png

L'URL du webhook IFTTT est déterminée par la clé affichée sur cet écran de réglage et le nom de l'événement mentionné précédemment.

Https://maker.ifttt.com/trigger/ <nom de l'événement> / avec / key /

Si vous arrivez à ce point, vous pouvez simplement le jeter dans l'URL par POST comme le Webhook de Slack ou TEAMS. Il existe trois paramètres, valeur1, valeur2 et valeur3.

import requests
requests.post(url_ifttt, data={'value1': subject, 'value2': send_message, 'value3': ''})

Si je peux passer par IFTTT, je pense que la destination ne sera pas pertinente, donc je pense que je peux notifier ma destination de notification préférée.

Résumé

Si vous mettez tout ensemble et que vous les informez tous en même temps, cela ressemblera à ceci.


import smtplib
from email.mime.text import MIMEText
from email.utils import formatdate
import requests
import json

#Adresse e-mail, nom et mot de passe de l'expéditeur (dans le cas de Gmail, émettez et utilisez le mot de passe de l'application)
FROM_ADDRESS = '[email protected]'
FROM_NAME = 'XXXXXX'
MY_PASSWORD = 'xxxxx'

#Faire de la destination un type de liste
TO_ADDRESS = ['[email protected]', '[email protected]']

def create_message(list_to_addr, subject, body):
    msg = MIMEText(body)
    msg['Subject'] = subject
    msg['From'] = FROM_NAME 
    msg['To'] = ','.join(list_to_addr)
    #Je ne sais pas, mais même si je le mets en BCC, il ne sera affiché que dans la colonne appelée BCC, alors arrêtez
    # msg['Bcc'] = ','.join(list_bcc_addrs)
    msg['Date'] = formatdate()
    return msg

def send_gmail(list_to_addr, msg):
    smtpobj = smtplib.SMTP('smtp.gmail.com', 587)
    smtpobj.ehlo()
    smtpobj.starttls()
    smtpobj.ehlo()
    smtpobj.login(FROM_ADDRESS, MY_PASSWORD)
    smtpobj.sendmail(FROM_ADDRESS, list_to_addr, msg.as_string())
    smtpobj.close()

def Notice_Mail(subject, send_message):
  list_to_addr = TO_ADDRESS
  msg = create_message(list_to_addr, subject, send_message)
  send_gmail(list_to_addr, msg)

line_notify_token = 'xxxxxxxxxxx'
def Notice_LINE_Self(send_message):
  line_notify_api = 'https://notify-api.line.me/api/notify'

  payload = {'message': send_message}
  headers = {'Authorization': 'Bearer ' + line_notify_token}
  line_notify = requests.post(line_notify_api, data=payload, headers=headers)

_access_token ='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
def Notice_LINE_push(to_user_id, send_message):

  #Définir l'en-tête HTTP
  header = {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer ' + _access_token,
  }

  #Définir les données de transmission
  send_data = {
      'to': to_user_id,
      'messages': [
          {
              'type': 'text',
              'text': send_message
          }
      ]
  }

  #Courir
  url = 'https://api.line.me/v2/bot/message/push'
  res = requests.post(url, headers=header, data=json.dumps(send_data))
  if(res.status_code != 200):
    print("error : [{}]".format(res.text))

slack_url = 'https://hooks.slack.com/services/xxxxxxxx/xxxxxxxx/xxxxxx'
def Notice_Slack(send_message):
  requests.post(slack_url, data=json.dumps({'text': send_message}))

teams_webhook_url = 'https://outlook.office.com/webhook/xxxxxxx/IncomingWebhook/xxxxxxx/xxxxxx'
def Notice_TEAMS(subject, send_message):
  send_message = send_message.replace('\n', '<BR>')
  requests.post(teams_webhook_url, data=json.dumps({'title': subject, 'text': send_message}))

url_ifttt = 'https://maker.ifttt.com/trigger/eventid/with/key/xxxxx'
def Notice_IFTTT(subject, send_message):
  requests.post(url_ifttt, data={'value1': subject, 'value2': send_message, 'value3': ''})

def Notice(subject, body):
  #Traitement des notifications: Email
  Notice_Mail(subject, body)

  #Traitement des notifications: LINE_Notify
  Notice_LINE_Self(body)

  #Traitement des notifications: LINE_push
  userid = 'xxxxxxxxxx'
  Notice_LINE_push(userid, body)

  #Traitement des notifications: Slack
  Notice_Slack(body)

  #Traitement des notifications: TEAMS
  Notice_TEAMS(subject, body)

  #Traitement des notifications: IFTTT (vers LINE via)
  Notice_IFTTT(subject, body)


import datetime
dt_now = datetime.datetime.now()

#Sauts de ligne\Juste réglé avec n
body = "C'est le contenu à envoyer\Les n sauts de ligne seront-ils reflétés?\n{}"
body = body.format(dt_now.strftime('%Y année%m mois%jour j%H:%M:%S'))

subject = "<Exemple de notification: {}>".format(dt_now.strftime('%Y%m%d %H%M%S'))

#notification
Notice(subject, body)

Recommended Posts

Faisons quelques exemples de traitement des notifications en Python
Faisons un calcul de combinaison avec Python
Traitement de fichiers en Python
Traitement multithread en python
Traitement de texte avec Python
Traitement des requêtes en Python
Voyons comment utiliser def en python
Traitement de texte UTF8 avec python
Traitement asynchrone (threading) en python
Ne faites pas test.py en Python!
Créer un bookmarklet en Python
Rendre Opencv disponible en Python
Segfo python en 2 lignes
Collection de traitement d'image en Python
Trouvons le rapport de circonférence avec Python
Utilisation du mode Python dans le traitement
Faisons un service de vente au comptant 4 (en Python mini Hack-a-thon)
Segfo python en une ligne
Traitement du signal en Python (1): transformée de Fourier
100 Language Processing Knock Chapitre 1 en Python
Faisons une interface graphique avec python.
Essayons Fizz Buzz avec Python
Rendre la sortie standard non bloquante en Python
Voyons voir l'utilisation de l'entrée en python
Segfo python en trois lignes
Faisons un graphe avec python! !!
J'ai essayé la notification de ligne en Python
Faisons la voix lentement avec Python
[Python] Rendons matplotlib compatible avec le japonais
Traitez facilement des images en Python avec Pillow
Créez un framework Web avec Python! (1)
Exécuter régulièrement des tâches de type cron en Python
Faisons un bot Twitter avec Python!
Traitement des interdictions en double dans la banque de données GAE / Python
Créez un framework Web avec Python! (2)
Statut de chaque système de traitement Python en 2020
Traitement asynchrone en Python: référence inverse asyncio
Analysons le journal de validation git en Python!
Afficher le résultat du traitement de la géométrie en Python
J'ai étudié en détail le traitement des variables en python
Jugons les émotions à l'aide de l'API Emotion en Python
Implémentons le dialogue vocal anglais en Python [hors ligne]
Créez un jeu Janken en une seule ligne (python)
Python: apprentissage profond du traitement du langage naturel: principes de base
Remplaçons UWSC par Python (5) Faisons un robot
Créez un tracé de R semblable à un joyplot avec python
Traitement Y / n avec bash, Python et Go
Traitement parallèle sans signification profonde en Python
Faisons un module pour Python en utilisant SWIG
Comment apporter des modifications à l'interpréteur Python dans Pycharm
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
traitement d'image python
Méta-analyse en Python
Unittest en Python