(Python) J'ai créé une application de Trello qui notifie périodiquement le relâchement des tâches sur le point d'expirer.

Préambule

Notre équipe utilise Trello pour gérer les tâches que chacun doit faire. (Les tâches sont répertoriées sur la carte, les noms personnels sont répertoriés sur la liste de contrôle et ☑ est ajouté à ceux qui ont terminé la tâche)

Le boss doit ouvrir Trello à chaque fois et ouvrir chaque carte pour voir la progression. Absolument gênant. Et avec Trello Alert, vous pouvez envoyer une notification de relâche lorsque vous modifiez ou créez une nouvelle carte, ajoutez ☑ à la liste, etc., mais chaque fois que vous ajoutez ☑, vous serez averti et vous pourrez voir les personnes terminées et incomplètes dans la liste. N'est pas. En gros, les notifications polluent le canal mou (à mon avis). Et c'est ennuyeux que vous ne puissiez pas le voir dans la liste.

Ensuite, créons une application qui avertit les personnes qui n'ont pas terminé les tâches de manière régulière (à condition qu'elle ne pollue pas le canal). Et si vous le faites, implémentons-le à l'aide d'AWS. J'ai eu l'idée et j'ai essayé de la réaliser.

développement de

Flux de développement

Le flux de développement approximatif est

① Hit API de Trello ② Ecrire le code ③ Implémenté dans AWS lambda ④ Pont d'événement de déclenchement (événements Cloud Watch) ⑤ Créez une application Slack ⑥ Publier sur Slack C'est comme ça. Regardons chacun d'eux.

Hit API de Trello

Allez sur ici. image.png

Trello API Keys Faites une copie de la clé en haut. (Si vous le mettez dans un bloc-notes, ◎) Trello API Token Cliquez sur le lien Token dans ToKen: sous Clé:. Puis Would you like to give the following application access to your account? Sera demandé, alors faites défiler et autorisez. image.png Lorsque vous passez à la page ci-dessus, la clé de jeton est écrite, alors copiez-la également.

Ensuite, installons la bibliothèque (py-trello). Puisque nous prévoyons d'utiliser Lambda cette fois, installez la bibliothèque dans le même dossier que le code python (trello_alert). (Laisser l'intérieur du dossier sale)

powershell


mkdir trello_alert
cd trello_alert
pip install py-trello --target .

Vous êtes maintenant prêt à accéder à l'API. Frappons-le réellement.

trello_api.py



from trello import TrelloClient
#Connexion API à trello
client=TrelloClient(
    api_key='Écrivez la clé API ici',
    api_secret='Écrivez le jeton API ici'
)
print(client.list_boards())

Si vous exécutez ceci et que la liste de trello est sortie, la tâche de frapper l'API est terminée.

Ecrire le code

Maintenant, obtenons la liste et sortons les personnes qui n'ont pas terminé la tâche qui approche de la date limite. Fondamentalement, le code de la classe TrelloClient est disponible dans This GitHub, alors vérifiez-le si nécessaire. s'il vous plaît essayez. Je vais me référer au code que j'ai écrit. (Puisqu'il est élevé à lamda, c'est le code pour lamda)

lambda_function.py


#Obtenir des personnes incomplètes dont la date approche
import re
import datetime
from trello import TrelloClient
import json

def lambda_handler(event, context):
    result = {}
    
    #Obtenez des dates pour aujourd'hui et la semaine prochaine
    today = datetime.date.today()
    next_week = today + datetime.timedelta(weeks=1)
    
    #Connexion API à trello
    client = TrelloClient(
        api_key='Écrivez la clé API ici',
        api_secret='Écrivez le jeton API ici'
    )
    
    #Obtenez une carte trello
    board = client.get_board(`Remarque ①:Écrivez l'identifiant du tableau ici`) #Obtenez la planche
    target_list = board.get_list(`Remarque ②:Écrivez l'identifiant de la liste ici`) #Obtenir la liste
    cards = target_list.list_cards() #Obtenez une liste de cartes sur la liste
    
    #Obtenez la tâche incomplète et la date limite pour chaque carte
    #Notifier la date limite une semaine plus tard et aujourd'hui
    for c in cards:
        #Obtenez une carte
        card = client.get_card(c.id)
        card.fetch()
        #Obtenir l'expiration de la carte
        due = re.match("[0-9]{4}-[0-9]{2}-[0-9]{2}", c.due).group()
        #Obtenez une liste de contrôle des délais d'aujourd'hui et d'une semaine
        if(str(due) == str(today) or str(due) == str(next_week)):
            #Obtenez la liste de contrôle une par une
            for checklist in card.checklists:
                not_finish = []
                for i, item in enumerate(checklist.items):
                    #Tâche de sortie personne incomplète
                    if(item["checked"]== False):
                        not_finish.append(item["name"])
            #Stocker le nom de la carte et la personne incomplète de la tâche au format dictionnaire
            result[c.name] = not_finish
    return {
        'statusCode': 200,
        'body': json.dumps(result, ensure_ascii=False)
    }

Remarque 1: l'id de la carte se trouve après b dans l'URL lorsque la carte trello est ouverte. https://trello.com/b/id du tableau / nom du tableau Remarque 2: Puisqu'il existe une fonction all_list dans la classe de la carte, affichez-la pour trouver l'identifiant de la liste. print(board.all_list())

Avec ce genre de sentiment, j'ai pu obtenir des tâches qui sont proches de l'échéance et celles qui n'ont pas terminé les tâches. (Si vous voulez l'exécuter localement, vous pouvez le faire en commentant 8e ligne, 45e à 48e lignes et en ajoutant` print (résultat) à la fin.) Veuillez noter que si vous ne nommez pas le fichier "fonction_lambda", il ne fonctionnera pas lorsque vous le téléverserez sur lamda.

Pour le moment, le code est prêt. Je vais l'élever à lambda.

Implémenté dans AWS lambda

fichier zip

J'ai besoin de créer un fichier zip pour télécharger le code sur lambda, donc Sélectionnez tout dans le dossier trello_alert, compressez-le et créez-en un fichier zip. Le nom du fichier zip doit être trello.

Connectez-vous à AWS

Si vous recherchez lambda à partir de Find Services, AWS Lambda apparaîtra comme candidat, alors sélectionnez-le. image.png

Après avoir accédé à cette page, cliquez sur créer une fonction. image.png

Sur la page suivante, sélectionnez l'extrême gauche et faites défiler vers le bas. image.png

Remplissez comme ça. (Trello_alert est dans le rouge car on dit qu'il existe déjà) Cliquez ensuite sur créer une fonction. image.png

Trello_alert est ajouté à Lambda. Cliquez sur trello_alert pour télécharger le code. image.png

Après avoir accédé à cette page, cliquez sur la partie Action en bas à droite. image.png

Sélectionnez ʻUpload a .zip file` et téléchargez le trello.zip que vous avez créé précédemment. image.png

Le fichier sera téléchargé comme ceci. (Si la fonction lambda fournie par défaut vous gêne, supprimez-la) image.png

Après cela, appuyez sur Enregistrer sur l'écran ci-dessus pour exécuter le test. Lorsque vous appuyez sur test, l'écran suivant apparaît, alors définissez le nom de l'événement pour tester et créer. image.png Vous serez renvoyé à l'écran précédent, alors relancez le test.

Si 200 réponses sont renvoyées dans le résultat de l'exécution, le téléchargement vers lambda est terminé.

Paramètre de variable d'environnement (facultatif)

Pour ceux qui souhaitent écrire une clé API et un jeton API bruts dans le code. Puisqu'il y a des variables d'environnement sous le code de fonction, Définissez la variable d'environnement ici, et dans le code, api_key=os.environ['API_KEY'] Si vous écrivez, il sera exécuté sans aucun problème.

Déclenché par Event Bridge (Cloud Watch Events)

Je veux l'exécuter régulièrement, j'utilise donc CloudWatch Events.

Sélectionnez Ajouter un déclencheur dans l'écran Lambda (trello_alert). image.png

Remplissez l'écran de réglage comme suit et ajoutez-le. image.png

Cette fois, je voulais publier régulièrement à 9 heures du matin en semaine, alors cron(0 9 ? * MON-FRI *) Et écrivez une expression de planification. Si tu veux chaque minute rate(1 minute) Si vous le définissez comme OK!

Créer une application Slack

J'ai créé l'application Slack en me référant à l'article suivant. [Version 2020] Création / paramétrage de l'application Bot pour publier des messages avec l'API slack (explication détaillée de l'autorité de portée)

Publier sur Slack

lambda_function.py Ajoutez le code suivant.

lambda_function.py


import requests

#Publier sur Slack
url = "https://slack.com/api/chat.postMessage"
msg = {
   "token": "Écrivez le JETON D'ACCÈS ici",
   "channel": "Écrivez l'ID de chaîne que vous souhaitez publier ici",
   "text": result
}
requests.post(url, data=msg)

Résumé

Ce fut une bonne expérience de pouvoir utiliser AWS, accéder aux API et espérer des améliorations dans les affaires.

Recommended Posts

(Python) J'ai créé une application de Trello qui notifie périodiquement le relâchement des tâches sur le point d'expirer.
[Python] J'ai créé une application pour pratiquer la délicate distinction vocale des mots anglais.
J'ai fait un bot mou qui m'informe de la température
J'ai créé une commande appdo pour exécuter des commandes dans le contexte de l'application
Avec LINEBot, j'ai fait une application qui m'informe de "l'heure du bus"
J'ai créé un programme en Python qui change les données de 1 minute de FX en une heure arbitraire (1 heure, etc.)
[Python] Poésie que j'ai commencé & Impression que j'ai passé de Pipenv à la poésie
Je veux démarrer beaucoup de processus à partir de python
[Python3] Liste des sites auxquels j'ai fait référence lorsque j'ai lancé Python
Publier de Python vers Slack
J'ai essayé de construire un modèle d'estimation des titres d'articles susceptibles de faire le buzz avec Qiita
J'ai créé un robot Line qui devine le sexe et l'âge d'une personne à partir de l'image
Je souhaite extraire une URL arbitraire de la chaîne de caractères de la source html avec python
J'ai créé un générateur brouillé qui encode vos phrases préférées de UTF-8 à Shift-JIS (cp932) en Python
J'ai créé une application pour découvrir à qui ressemblent les membres des Pirates du Chapeau de Paille
[Python] J'ai essayé d'expliquer des mots difficiles à comprendre pour les débutants d'une manière facile à comprendre.
Créez une application qui informe LINE de la météo tous les matins
Différentes façons de créer un tableau de nombres de 1 à 10 en Python.
Déploiement Heroku de la première application Django à laquelle les débutants sont accros
[Python] J'ai fait un décorateur qui ne semble pas avoir d'utilité.
J'ai créé une application Web en Python qui convertit Markdown en HTML
Je veux colorer une partie de la chaîne Excel avec Python
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
[Lambda] J'ai essayé d'incorporer un module externe de python via S3
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
[Python] J'ai créé un script qui coupe et colle automatiquement les fichiers du PC local sur un SSD externe.
Création d'un bot Slack qui confirme et notifie à AWS Lambda la date d'expiration d'un certificat SSL