Écrivez un script dans Shell et Python pour vous avertir dans Slack lorsque le processus est terminé

Contexte

Fréquemment au travail, l'acquisition, le traitement et l'exécution des analyses de données sont traités dans l'environnement Linux du serveur. Vérifiez avec ps sur le terminal pour voir si le processus est terminé, mais il est difficile de vérifier à chaque fois. Je souhaite agir rapidement lorsque le traitement est interrompu. Une méthode courante consiste à détecter en POSTANT un message par e-mail ou SNS. La communication dans Slack est la norme sur mon lieu de travail.

Objectif

POSTER un message dans Slack pour déterminer si c'est fait.

supposition

On suppose que le compte Slack a déjà été créé.

environnement

Applications et intégrations aux messages POST vers Slack

Slack semble avoir plusieurs Apps & Integrations. Cette fois, je vais résumer les méthodes de POST de messages par les deux méthodes suivantes qui sont souvent vues sur le net. Personnellement, j'aime "Incoming Web Hooks" car il a moins d'éléments requis et un code plus court.

Nom Fonctionnalités simples
Slack Web API Vous pouvez faire diverses choses
Incoming WebHooks Publication facile des chaînes

Comment obtenir un jeton

Très facile. Connectez-vous pour vous détendre sur le WEB et suivez les étapes ci-dessous.

Nom Méthode d'acquisition
Slack Web API Create tokenpousser.
・パスワード入力後、押したところにトークンが表示される。
Incoming WebHooks Sélectionnez Publier sur la chaîne et ajouter l'intégration des WebHooks entrantspousser.
・Webhook URLの横にトークンが表示される。

Essayez de POSTER le message

Essayez de POSTER un message avec Shell et Python

Slack Web API Cliquez ici pour une liste des méthodes API (https://api.slack.com/methods). Cette fois, je veux POSTER le message, j'utilise donc la méthode "chat.postMessage".

Liste des paramètres

La liste des paramètres est ici. Les éléments requis sont les suivants.

Le nom du paramètre La description
token jeton
text Texte à publier
channel Nom du canal
ID codé pour les messages directs

Cette fois, nous allons créer un échantillon en utilisant "token", "text", "channel", "username" et "link_names".

※ Mise en garde Si vous voulez POSTER un message sur le canal, il n'y a pas de problème avec "# ", mais si vous voulez POSTER avec un message direct, si vous utilisez "@ <nom d'utilisateur>", il sera POSTÉ à slackbot. Comme solution, vous devez spécifier "ID encodé". Pour l '"ID d'encodage" de votre liste de messages directs Slack, appuyez sur "Méthode de test" à ici pour afficher la liste. L '"id" de la réponse correspond à l' "ID encodé".

Shell

#Réglage
TOKEN='<Jeton obtenu>'
CHANNEL='<Nom du canal>'
USERNAME='test_username'
LINK_NAMES='1'
URL='https://slack.com/api/chat.postMessage'

# post
curl="curl -XPOST -d \"token=${TOKEN}\" \
    -d \"text=${TEXT}\" \
    -d \"channel=${CHANNEL}\" \
    -d \"username=${USERNAME}\" \
    -d \"link_names=${LINK_NAMES}\" \
    ${URL}"
eval ${curl}

Python

#Importation de bibliothèque
import requests

#Réglage
TOKEN='<Jeton obtenu>'
CHANNEL='<Nom du canal>'
TEXT='test'
USERNAME='test_username'
URL='https://slack.com/api/chat.postMessage'

# post
post_json = {
    'token': TOKEN,
    'text': TEXT,
    'channel': CHANNEL,
    'username': USERNAME,
    'link_names': 1
}
requests.post(URL, data = post_json)

Incoming WebHooks Notez que la méthode POST est légèrement différente de celle de l'API Web Slack.

Liste des paramètres

Les paramètres sont les suivants. Cette fois, créez un échantillon en utilisant "text", "username" et "link_names".

Le nom du paramètre Article requis La description
text Texte à publier
username Publier le nom d'utilisateur
icon_url URL de l'image de profil du message
icon_emoji Pictogrammes à mettre dans l'image de profil du message
link_names Mention
channel Nom du canal
attachments AttachmentsRemplissez le formulaire

Shell

#Réglage
URL='<Jeton obtenu>'
TEXT='test_text'
USERNAME='test_username'
LINK_NAMES='1'

# post
curl="curl -X POST --data '{ \
    \"text\": \"${TEXT}\" \
    ,\"username\": \"${USERNAME}\" \
    ,\"link_names\" : ${LINK_NAMES}}' \
    ${URL}"
eval ${curl}

Python

#Importation de bibliothèque
import requests
import json

#Réglage
URL='<Jeton obtenu>'
TEXT='test'
USERNAME='test_username'

# post
post_json = {
    'text': TEXT,
    'username': USERNAME,
    'link_names': 1
}
requests.post(URL, data = json.dumps(post_json))

Autre

--La liste des pictogrammes est répertoriée ici [http://qiita.com/koukun/items/ae673f2bae8f1525b6af)

référence

Recommended Posts

Écrivez un script dans Shell et Python pour vous avertir dans Slack lorsque le processus est terminé
Notification Slack lorsqu'un mot spécifique est murmuré sur Twitter en utilisant Heroku avec python
Notifier Slack lorsque le processus d'apprentissage automatique en cours d'exécution sur GCP est terminé
Traitez les fichiers du dossier dans l'ordre avec le script shell
Que faire si vous obtenez l'erreur RuntimeError: Python n'est pas installé en tant que framework lorsque vous essayez d'utiliser matplitlib et pylab dans Python 3.3
[OCI] Script Python pour obtenir l'adresse IP d'une instance de calcul dans Cloud Shell
Obtenez de manière récursive la liste Excel dans un dossier spécifique avec python et écrivez-la dans Excel.
[Python] Lorsque vous souhaitez importer et utiliser votre propre package dans le répertoire supérieur
Créez un script shell pour exécuter le fichier python plusieurs fois
Utilisons AWS Lambda pour créer un mécanisme pour notifier Slack lorsque la valeur surveillée par CloudWatch est dépassée sur Python
Que faire lorsque le type de valeur est ambigu en Python?
Ecrire le test dans la docstring python
Exécuter l'interpréteur Python dans le script
Créer un script shell pour écrire un journal
Comment utiliser is et == en Python
Comment écrire quand on veut mettre un nombre après le numéro de groupe à remplacer par une expression régulière dans re.sub de Python
[Introduction à Python] Quelle est la différence entre une liste et un taple?
Comment écrire le bon shebang dans les scripts Perl, Python et Ruby
Comment écrire une chaîne de caractères lorsqu'il y a plusieurs lignes en python
Un script shell pour se souvenir à nouveau du shell pipenv
Notifier à l'aide du Centre de notifications lorsque l'environnement d'exécution est macOS en Python
python Comment notifier automatiquement par téléphone lorsque le système tombe en panne
[Python] Que faire en cas de violation de PEP8 lors du processus d'importation à partir du répertoire ajouté à sys.path
Comment saisir une chaîne de caractères en Python et la sortir telle quelle ou dans la direction opposée.
À propos de la différence entre "==" et "is" en python
Conseils pour rédiger un aplatissement concis en python
Comment notifier les canaux Discord en Python
Lancez le shell pendant que le script Python est en cours d'exécution
[Python] Lancer un message sur le canal Slack
Utilisez libsixel pour générer Sixel en Python et générer le graphe Matplotlib vers le terminal.
La synchronisation de la sortie est incorrecte lorsque la sortie standard (erreur) est convertie en fichier en Python
[Python] Choses à vérifier lorsqu'une erreur de décodage Unicode apparaît dans Django
Notifier slack lorsque la page de vente du commutateur est mise à jour ~ développement de bot slack avec python ③ ~
Je n'ai pas eu besoin d'écrire décorateur en classe Merci contextmanager
J'ai créé un script pour vérifier si l'anglais est entré dans la position spécifiée du fichier JSON en Python.
Script Python qui explore le flux RSS du statut Azure et le publie sur Hipchat
Lorsqu'un fichier est placé dans le dossier partagé de Raspberry Pi, le processus est exécuté.
Prise en compte du moment où vous pouvez faire du bon travail en 10 ans avec Python3 et Scala3.
Comprenons ensemble les entrées / sorties standard de bash et écrivons un script shell.
Différences de comportement entre les opérateurs append () et "+ =" lors de l'ajout de données à une liste en Python
Création d'une bibliothèque Python pour écrire des inclusions complexes et les réduire de manière facile à lire
Je veux écrire en Python! (2) Écrivons un test
Créez un script python pour vérifier si le lien à l'URL spécifiée est valide
Que faire lorsque seule la fenêtre est affichée et que rien ne s'affiche dans le pygame
Un mémorandum pour exécuter un script python dans un fichier bat
Un mémo de fonction utile lorsque vous souhaitez entrer dans le débogueur si une erreur se produit lorsque vous exécutez un script Python.
Choses à noter lors de l'initialisation d'une liste en Python
Que contient cette variable (lorsque le script Python est en cours d'exécution)
Écrire des tests en Python pour profiler et vérifier la couverture
Je veux écrire en Python! (3) Utiliser des simulacres
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
Ecrire un histogramme à l'échelle logarithmique sur l'axe des x en python
[Mac] Un moyen très simple d'exécuter des commandes système en Python et de générer les résultats
Lorsque vous voulez plt.save dans l'instruction for
Il est facile d'exécuter SQL avec Python et de générer le résultat dans Excel