(Python) Ich habe eine App von Trello erstellt, die regelmäßig über das Auslaufen von Aufgaben informiert, die bald ablaufen.

Präambel

Unser Team verwaltet mit Trello die Aufgaben, die jeder erledigen muss. (Aufgaben sind auf der Karte aufgeführt, persönliche Namen sind auf der Checkliste aufgeführt und ☑ wird zu denen hinzugefügt, die die Aufgabe abgeschlossen haben.)

Der Boss muss jedes Mal Trello öffnen und jede Karte öffnen, um den Fortschritt zu sehen. Absolut mühsam. Und mit Trello Alert können Sie eine Slack-Benachrichtigung senden, wenn Sie eine neue Karte ändern oder erstellen, ☑ zur Liste hinzufügen usw., aber jedes Mal, wenn Sie ☑ hinzufügen, werden Sie benachrichtigt und Sie können die vollständigen und unvollständigen Personen in der Liste sehen. Ist nicht. Grundsätzlich verschmutzen Benachrichtigungen den Slack Channel (meiner Meinung nach). Und es ist ärgerlich, dass Sie es nicht in der Liste sehen können.

Erstellen wir dann eine App, die Personen benachrichtigt, die ihre Aufgaben nicht regelmäßig erledigt haben (sofern sie den Kanal nicht verschmutzen). Wenn Sie dies tun, implementieren wir es mit AWS. Ich kam auf die Idee und versuchte sie zu machen.

Entwicklung von

Entwicklungsfluss

Der grobe Entwicklungsfluss ist

① Triff die API von Trello ② Code schreiben ③ Implementiert in AWS Lambda ④ Ereignisbrücke auslösen (Cloud Watch-Ereignisse) ⑤ Erstellen Sie eine Slack-App ⑥ Nachlassen Es ist wie es ist. Schauen wir uns jeden an.

Hit Trellos API

Gehen Sie zu hier. image.png

Trello API Keys Erstellen Sie oben eine Kopie des Schlüssels. (Wenn Sie es in einen Notizblock legen, ◎) Trello API Token Klicken Sie in ToKen auf den Link Token: unter Schlüssel :. Dann Would you like to give the following application access to your account? Wird gefragt, also scrollen und zulassen. image.png Wenn Sie zur obigen Seite wechseln, wird der Token-Schlüssel geschrieben. Kopieren Sie ihn daher ebenfalls.

Als nächstes installieren wir die Bibliothek (py-trello). Da wir diesmal Lambda verwenden möchten, installieren Sie die Bibliothek im selben Ordner wie der Python-Code (trello_alert). (Lassen Sie das Innere des Ordners schmutzig)

powershell


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

Jetzt können Sie die API aufrufen. Lassen Sie es uns tatsächlich treffen.

trello_api.py



from trello import TrelloClient
#API-Verbindung zu Trello
client=TrelloClient(
    api_key='Schreiben Sie hier den API-Schlüssel',
    api_secret='Schreiben Sie hier das API-Token'
)
print(client.list_boards())

Wenn Sie es ausführen und die Liste der Trello ausgegeben wird, ist die Aufgabe, die API zu treffen, abgeschlossen.

Code schreiben

Lassen Sie uns nun die Liste abrufen und die Personen ausgeben, die die Aufgabe nicht erledigt haben, die sich der Frist nähert. Grundsätzlich wird der Code der TrelloClient-Klasse in This GitHub veröffentlicht. Überprüfen Sie ihn daher gegebenenfalls. bitte versuche. Ich werde auf den Code verweisen, den ich geschrieben habe. (Da es auf lamda angehoben wird, ist es der Code für lamda)

lambda_function.py


#Get Task unvollständige Personen, deren Datum sich nähert
import re
import datetime
from trello import TrelloClient
import json

def lambda_handler(event, context):
    result = {}
    
    #Holen Sie sich Termine für heute und nächste Woche
    today = datetime.date.today()
    next_week = today + datetime.timedelta(weeks=1)
    
    #API-Verbindung zu Trello
    client = TrelloClient(
        api_key='Schreiben Sie hier den API-Schlüssel',
        api_secret='Schreiben Sie hier das API-Token'
    )
    
    #Holen Sie sich eine Trello-Karte
    board = client.get_board(`Hinweis ①:Schreiben Sie hier die Board-ID`) #Hol das Brett
    target_list = board.get_list(`Hinweis ②:Schreiben Sie hier die Listen-ID`) #Liste abrufen
    cards = target_list.list_cards() #Holen Sie sich eine Liste der Karten auf der Liste
    
    #Erhalten Sie unvollständige Aufgabe und Frist für jede Karte
    #Benachrichtigen Sie die Frist eine Woche später und heute
    for c in cards:
        #Holen Sie sich eine Karte
        card = client.get_card(c.id)
        card.fetch()
        #Kartenablauf erhalten
        due = re.match("[0-9]{4}-[0-9]{2}-[0-9]{2}", c.due).group()
        #Holen Sie sich eine Checkliste mit den heutigen und einwöchigen Fristen
        if(str(due) == str(today) or str(due) == str(next_week)):
            #Holen Sie sich eine Checkliste nach der anderen
            for checklist in card.checklists:
                not_finish = []
                for i, item in enumerate(checklist.items):
                    #Ausgabeaufgabe unvollständige Person
                    if(item["checked"]== False):
                        not_finish.append(item["name"])
            #Speichern Sie den Namen der Karte und die unvollständige Person der Aufgabe im Wörterbuchformat
            result[c.name] = not_finish
    return {
        'statusCode': 200,
        'body': json.dumps(result, ensure_ascii=False)
    }

Hinweis 1: Die Board-ID steht in der URL nach b, wenn das Trello-Board geöffnet wird. https://trello.com/b/board id / board name Hinweis 2: Da die Board-Klasse eine all_list-Funktion enthält, geben Sie sie aus, um die Listen-ID zu ermitteln. print(board.all_list())

Mit diesem Gefühl konnte ich Aufgaben bekommen, die kurz vor dem Termin standen, und solche, die die Aufgaben nicht erledigt haben. (Wenn Sie es lokal ausführen möchten, können Sie dies tun, indem Sie "8. Zeile, 45. bis 48. Zeile" auskommentieren und am Ende "Druck (Ergebnis)" hinzufügen.) Bitte beachten Sie, dass wenn Sie die Datei 'lambda_function' nicht benennen, sie beim Hochladen auf lamda nicht funktioniert.

Der Code ist vorerst fertig. Ich werde es zu Lambda erheben.

Implementiert in AWS Lambda

zip-Datei

Ich muss eine Zip-Datei erstellen, um den Code auf Lambda hochzuladen Wählen Sie alles im Ordner trello_alert aus, komprimieren Sie es und machen Sie es zu einer Zip-Datei. Der Name der Zip-Datei sollte trello sein.

Melden Sie sich bei AWS an

Wenn Sie in Find Services nach Lambda suchen, wird AWS Lambda als Kandidat angezeigt. Wählen Sie es daher aus. image.png

Klicken Sie nach dem Wechseln auf diese Seite auf "Funktion erstellen". image.png

Wählen Sie auf der nächsten Seite ganz links aus und scrollen Sie nach unten. image.png

Füllen Sie so aus. (Trello_alert schreibt rote Zahlen, weil gesagt wird, dass es bereits existiert) Klicken Sie dann auf Funktion erstellen. image.png

Trello_alert wird zu Lambda hinzugefügt. Klicken Sie auf trello_alert, um den Code hochzuladen. image.png

Klicken Sie nach dem Wechseln zu dieser Seite unten rechts auf den Aktionsteil. image.png

Wählen Sie "ZIP-Datei hochladen" und laden Sie die zuvor erstellte Trello-ZIP-Datei hoch. image.png

Die Datei wird folgendermaßen hochgeladen. (Wenn die standardmäßig bereitgestellte Lambda-Funktion im Weg steht, löschen Sie sie.) image.png

Drücken Sie danach auf dem obigen Bildschirm auf Speichern, um den Test auszuführen. Wenn Sie auf Test drücken, wird der folgende Bildschirm angezeigt. Legen Sie daher den Ereignisnamen zum Testen und Erstellen fest. image.png Sie kehren zum vorherigen Bildschirm zurück. Führen Sie den Test erneut aus.

Wenn im Ausführungsergebnis 200 Antworten zurückgegeben werden, ist das Hochladen auf Lambda abgeschlossen.

Einstellung der Umgebungsvariablen (optional)

Für diejenigen, die API-Schlüssel und API-Token roh in den Code schreiben möchten. Da es unter dem Funktionscode Umgebungsvariablen gibt, Legen Sie die Umgebungsvariable dort und im Code fest. api_key=os.environ['API_KEY'] Wenn Sie schreiben, wird es ohne Probleme ausgeführt.

Ausgelöst durch Event Bridge (Cloud Watch Events)

Ich möchte es regelmäßig ausführen, daher verwende ich CloudWatch-Ereignisse.

Wählen Sie im Lambda-Bildschirm (trello_alert) die Option Trigger hinzufügen. image.png

Füllen Sie den Einstellungsbildschirm wie folgt aus und fügen Sie ihn hinzu. image.png

Dieses Mal wollte ich an Wochentagen regelmäßig um 9 Uhr posten, also cron(0 9 ? * MON-FRI *) Und schreiben Sie einen Zeitplanausdruck. Wenn du jede Minute willst rate(1 minute) Wenn Sie es als OK einstellen!

Slack App erstellen

Ich habe die Slack-App unter Bezugnahme auf den folgenden Artikel erstellt. [Version 2020] Erstellung / Einstellung von Bot-Anwendungen zum Posten von Nachrichten mit Slack-API (ausführliche Erläuterung der Gültigkeitsbereichsberechtigung)

Post zu locker

lambda_function.py Fügen Sie den folgenden Code hinzu.

lambda_function.py


import requests

#Post zu locker
url = "https://slack.com/api/chat.postMessage"
msg = {
   "token": "Schreiben Sie hier ACCESS TOKEN",
   "channel": "Schreiben Sie die Kanal-ID, die Sie hier veröffentlichen möchten",
   "text": result
}
requests.post(url, data=msg)

Zusammenfassung

Es war eine gute Erfahrung, AWS verwenden, APIs aufrufen und Verbesserungen im Geschäft erwarten zu können.

Recommended Posts

(Python) Ich habe eine App von Trello erstellt, die regelmäßig über das Auslaufen von Aufgaben informiert, die bald ablaufen.
[Python] Ich habe eine App erstellt, um die feine Sprachunterscheidung von englischen Wörtern zu üben.
Ich habe einen schlaffen Bot gemacht, der mich über die Temperatur informiert
Ich habe einen Appdo-Befehl erstellt, um Befehle im Kontext der App auszuführen
Mit LINEBot habe ich eine Anwendung erstellt, die mich über die "Buszeit" informiert.
Ich habe in Python ein Programm erstellt, das die 1-Minuten-Daten von FX auf eine beliebige Zeit (1 Stunde usw.) ändert.
[Python] Poesie Ich habe angefangen & Eindruck, dass ich von Pipenv zu Poesie gewechselt bin
Ich möchte viele Prozesse von Python aus starten
[Python3] Liste der Websites, auf die ich beim Starten von Python verwiesen habe
Post von Python nach Slack
Ich habe versucht, ein Schätzmodell für Artikeltitel zu erstellen, die wahrscheinlich mit Qiita in Einklang stehen
Ich habe einen Linienbot erstellt, der das Geschlecht und das Alter einer Person anhand des Bildes errät
Ich möchte mit Python eine beliebige URL aus der Zeichenfolge der HTML-Quelle extrahieren
Ich habe einen verstümmelten Generator erstellt, der Ihre Lieblingssätze von UTF-8 bis Shift-JIS (cp932) in Python codiert
Ich habe eine App erstellt, um herauszufinden, wie die Mitglieder der Strohhut-Piraten aussehen
[Python] Ich habe versucht, Wörter, die für Anfänger schwer zu verstehen sind, auf leicht verständliche Weise zu erklären.
Erstellen Sie eine App, die LINE jeden Morgen über das Wetter informiert
Verschiedene Möglichkeiten, um in Python ein Array von Zahlen von 1 bis 10 zu erstellen.
Heroku-Bereitstellung der ersten Django-App, von der Anfänger abhängig sind
[Python] Ich habe einen Dekorateur gemacht, der keinen Nutzen zu haben scheint.
Ich habe eine Webanwendung in Python erstellt, die Markdown in HTML konvertiert
Ich möchte einen Teil der Excel-Zeichenfolge mit Python einfärben
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
[Lambda] Ich habe versucht, ein externes Python-Modul über S3 zu integrieren
Ich habe eine Funktion erstellt, um die Bewegung eines zweidimensionalen Arrays (Python) zu sehen.
[Python] Ich habe ein Skript erstellt, das Dateien auf dem lokalen PC automatisch ausschneidet und auf eine externe SSD einfügt.
Erstellt einen Slack-Bot, der AWS Lambda über das Ablaufdatum eines SSL-Zertifikats bestätigt und benachrichtigt