[PYTHON] Lebe ein typenloses Twitter-Leben mit Alexa

** Amazon Echo dot (3. Generation) ** war für 999 Yen erhältlich (219 Yen, wenn man nur den Hauptstückpreis betrachtet), also habe ich einen Twitter-Client mit der Absicht erstellt, Alexa zu entwickeln.

Einführung

Bei der Entwicklung von Alexa-Fertigkeiten können Sie zunächst die Sprache auswählen, die in ** Node.js **, ** Python **, ** Other ** (benutzerdefiniert) verwendet werden soll, aber ich selbst bin nur so anständig wie Python Da es nicht verwendet werden kann, werden wir dieses Mal mit dem in Python entwickelten fortfahren.

Ich denke, dass es viele Teile gibt, über die nur grob gesprochen werden kann, z. B. für Anfänger, die sich vorerst nur bewegen, aber bitte haben Sie Verständnis dafür.

In diesem Artikel werden keine Details zu Twitter-Vorgängen behandelt, z. B. das Twittern an Twitter über die API.

Als Voraussetzung, um fortzufahren

Wird benötigt.

Endziele

An Alexa, damit sie mit ihrem Account twittern kann.

Ich werde es tatsächlich schaffen

Wir werden von hier aus mit der Entwicklungsarbeit beginnen. Alle Arbeiten können mit einem Browser ausgeführt werden, sodass kein Editor erforderlich ist.

Erstelle eine Fertigkeit

Melden Sie sich an und greifen Sie auf die Alexa Developer Console zu (https://developer.amazon.com/alexa/console/ask "Alexa Developer Console"). Es gibt eine Schaltfläche namens Fertigkeit erstellen, also klicken Sie darauf.

Fähigkeitsname und Sprache

Wählen Sie den Namen Ihrer bevorzugten Fertigkeit und die Standardsprache. Der Name der Fertigkeit kann später nicht mehr geändert werden. Ich denke, es ist eine gute Idee, sie leicht verständlich zu machen.

Modellieren und Backend-Ressourcen

Wählen Sie ** Benutzerdefiniert ** für das Modell. Wenn Sie dies lesen und Smart-Home-Kenntnisse erwerben möchten, wählen Sie es bitte aus. Die Auswahl von Benutzerdefiniert ist wahrscheinlich eine grundlegende Voreinstellung.

Wählen Sie für die Backend-Ressource, wie eingangs erwähnt, diesmal ** Alexa-Hosted (Python) ** aus. Es ist einfach, da es das Hosting von AWS Lambda in der Alexa Developer Console verwaltet. Ich kann Node.js nicht erklären, weil ich es nicht berührt habe, weil ich es tun wollte. Es tut uns leid. Wenn Sie sich für Alexa-Hosted entscheiden, wird das Konto bei Amazon Developer angemeldet. Wenn Sie einkaufen, wird Ihnen die Rechnungsadresse auf demselben Konto in Rechnung gestellt.

modelandberesource.png

Ergänzung (OK, auch wenn Sie es überspringen)

Wenn Sie in der Backend-Ressource eine benutzerdefinierte Bereitstellung auswählen, können Sie den Code-Editor in der Alexa Developer Console übrigens nicht verwenden. Stattdessen erstellen Sie Ihr eigenes Lambda in Ihrem eigenen Amazon Web Services-Konto und schreiben den Code hier von Grund auf neu. Sie müssen auch die Endpunkte und IAM-Rollen festlegen, um über Alexa Skills und AWS Lambda miteinander zu kommunizieren. Da Sie die Backend-Seite selbst erstellen können, können Sie fortgeschrittenere Fähigkeiten erstellen, aber natürlich müssen Sie wissen, wie man alles verwendet, damit es für fortgeschrittene Benutzer ist.

Erstellung abgeschlossen

Nachdem Sie die oben genannten Optionen ausgewählt haben, klicken Sie oben rechts auf der Seite auf Fertigkeit erstellen. Es wird einige Minuten dauern, bis die Erstellung abgeschlossen ist, aber sagen wir Alexa "Alexa, spiele den empfohlenen Jazz" und warten Sie anmutig mit einer Tasse Kaffee.

Nach der Erstellung werden alle Einstellungen für Sie vorgenommen, einschließlich HelloWorld. Wenn es nur Hello World ist, können Sie dies einfach tun, indem Sie eine Fertigkeit erstellen (obwohl es einige Rollen gibt, mit denen Sie spielen können). Einfach!

Spitzname

Als erstes möchte ich den Anrufnamen ändern. Standardmäßig enthält es denselben Alexa Skill-Namen, den Sie zu Beginn festgelegt haben. Wenn Sie ihn jedoch aufrufen, möchten Sie ihn möglicherweise einfacher aufrufen. Als Ziel möchte ich in der Lage sein zu twittern, indem ich ** "Alexa, Tweet XX auf Twitter" sage. **. in diesem Fall

  1. Alexa
  2. Twitter
  3. ○○ (murmelnder Inhalt)
  4. Tweet.

Und in der Reihenfolge von oben

  1. Alexas Aktivierungswort
  2. Aktivierungswort für selbst gemachte Fähigkeiten
  3. Inhaltsvariablen
  4. Anweisung

Es wird sein.

Diesmal ist es also sinnvoll, "Twitter" als ** Namen für die Bezeichnung der Fertigkeit ** anzugeben. Natürlich können Sie Ihr Lieblingswort eingeben.

Dieser Rufname ist nur ein Rufname. Wenn Sie also einen Fehler machen, geben Sie nicht einfach "auf Twitter" ein. Dies wird wahrscheinlich interessant sein, da es erst startet, wenn Sie "auf Twitter" sagen. Wenn Sie ein Wort eingeben, entscheidet Alexa über das folgende Aktivierungswort. (Wenn Sie beispielsweise den Anrufnamen auf "Twitter" setzen, können Sie auch "Alexa, Twitter starten und XX twittern" wählen.) Es gibt andere Namensanforderungen, aber bitte lesen Sie diese so, wie sie auf der Seite für die Entscheidung über den Anrufnamen angegeben sind.

Weitere Informationen finden Sie im offiziellen Dokument Bestimmen des Anrufnamens der benutzerdefinierten Fertigkeit -skill.html) ist an Bord.

HelloWorld

Standardmäßig enthält die erstellte Alexa-Fähigkeit "HelloWorldIntent" und den entsprechenden Code. Vorerst werde ich dies nur für HelloWorld verwenden. Wenn Sie sich nicht für Hello World interessieren, überspringen Sie es bitte.

Öffnen Sie die Registerkarte Test und wählen Sie für den privaten Teil oben links Unter Entwicklung aus. Ich denke, es gibt ein Eingabefeld darunter, also geben Sie zuerst nur den Anrufnamen ein und senden Sie ihn dort. (Hier ist mein Rufname "Test Twitter")

HWtest1.png

Dann denke ich, dass englischer Text zurückgegeben wird. Um es ganz einfach auszudrücken: "Hallo oder Hilfe?"

Also lasst uns Hallo zurückgeben.

HWtest2.png

Dann kehrte Alexa zu Hello World zurück!

Es ist einfach! !!

Wenn Sie sich auf der Registerkarte "Erstellen" "HelloWorldIntent" ansehen, werden standardmäßig etwa 7 Arten von Äußerungen aufgelistet. Ich habe jetzt Hello eingegeben, aber wenn ich die Wörter in dieser Absicht spreche, wird auch Hello World! Zurückgegeben.

Übrigens können Sie Hallo Welt sagen! Ohne die Wörter zu teilen.

HWtest3.png

In der ersten Methode wurde es in das Aufrufen nach Namen → Ausgeben einer Anweisung unterteilt, in der anderen Methode wurde es aufgerufen und eine Anweisung ausgegeben.

Wenn Sie sich den Code-Editor ansehen und ihn mit der Antwort von Alexa und dem Intent-Namen vergleichen, können Sie sehen, wie er funktioniert.

Grundsätzlich wird die Klasse ausgeführt, die der registrierten Absicht entspricht, und die in der Funktion "handle" in der Klasse verarbeitete Klasse spricht mit return. In der Klasse "HelloWorldIntentHandler" enthält die Variable "speak_output" die Wörter, die Sie sprechen möchten, und die Rückgabe enthält die Variable.

Ich werde umsetzen

Ich werde mit der Implementierung beginnen, wenn ich irgendwie verstehe, wie es funktioniert.

Absicht

Eine Absicht schaffen

Klicken Sie auf der Registerkarte Erstellen auf die Schaltfläche Hinzufügen neben der Absicht. Wählen Sie Benutzerdefinierte Absicht erstellen, wählen Sie einen Namen Ihrer Wahl und erstellen Sie ihn. Hier habe ich die Absicht "EchoTweetIntent" genannt.

Geben Sie als nächstes die Äußerung ein, um diese Absicht auszuführen, aber vorher gibt es die notwendige Arbeit, also lass es uns tun.

Hinzufügung des Steckplatztyps

Drücken Sie die Hinzufügen-Taste neben dem Steckplatztyp. Wählen Sie Vorhandenen Steckplatztyp verwenden aus der integrierten Bibliothek von Alexa. Klicken Sie auf die Schaltfläche Slot Type hinzufügen rechts neben "AMAZON.SearchQuery" (Zahlen, Daten und Zeiten).

Slots werden jetzt verwendet, um zu hören, was Sie twittern möchten, und es wie eine Variable zu behandeln. Andere integrierte Bibliotheken erkennen nur Ortsnamen, Personennamen, Nummern usw., daher dachte ich, dass es nicht zum Twittern mit meinen Lieblingswörtern geeignet ist, und entschied mich daher für "AMAZON.SearchQuery" .. Es scheint, dass alles getan werden kann, weil es Wörter für die Suche enthält. (Bitte sagen Sie mir eine andere gute Methode oder einen Fehler)

Hinzufügen eines Intent-Slots

Nach dem Hinzufügen des Slot-Typs werde ich zu der Absicht zurückkehren, die ich zuvor gemacht habe. Erstellen Sie einen Intent-Slot, der wie eine Variable aussieht, bevor Sie die Äußerung eingeben.

Geben Sie einen gewünschten Namen ein und drücken Sie die + -Taste daneben, um ihn hinzuzufügen. (Ich habe "msg" verwendet.)

Klicken Sie nach dem Erstellen auf "Slot Type auswählen" und wählen Sie die gerade hinzugefügte "AMAZON.SearchQuery" aus. Jetzt können Sie es wie eine Variable behandeln.

Anrufrede hinzugefügt

Geben Sie im Eingabefeld der Beispieläußerung die Äußerung ein, was zu twittern gesagt werden soll. Diesmal

Wir werden als Beispiel drei Typen hinzufügen. Der Inhalt des Murmelns (msg) wird in 〇〇 eingegeben.

Um das, was Sie vorbereitet haben, als Slot zu verwenden, fügen Sie den Namen des Intent-Slots in {} ein. Wenn Sie das erste {eingeben, werden Vorhersagekandidaten angezeigt. Da jedoch nur einer erstellt wird, wird durch Drücken der TAB-Taste automatisch der Intent-Slot eingefügt.

intentresult1.png

Ich denke, es wird so sein, wenn Sie 3 Typen richtig hinzufügen können.

Dieses Mal gibt es nur diese drei Typen, aber ich denke, dass dies allein Ihr Twitter-Leben wahrscheinlich nicht angenehm machen wird. Fügen Sie daher gegebenenfalls verschiedene Originaläußerungen hinzu.

Wenn Sie fertig sind, klicken Sie auf Modell speichern, um Ihr Modell zu erstellen. Der Build wird einige Zeit dauern.

Code schreiben

Nachdem die Absicht fertig ist, ist es Zeit, den entsprechenden Code in Python zu schreiben. Ab hier verwenden wir den Code-Editor. Es heißt, dass es weder das Original noch das Kind hat, aber im Grunde ist es eine ziemliche Änderung des Codes, die standardmäßig vorhanden ist.

Ich werde den Twitter-Code von nun an auf meine eigene Weise schreiben. Wenn Sie also Ihre eigene Art haben, lesen Sie ihn nach Ihren Wünschen.

Modul hinzufügen

Fügen Sie Folgendes hinzu, um die Twitter-API zu verwenden. Da die 1. und 2. Zeile von Anfang an sind, wird nur die 3. Zeile hinzugefügt.

requirements.txt


boto3==1.9.216
ask-sdk-core==1.11.0
requests_oauthlib

Wenn Sie ein neues Modul verwenden möchten, können Sie es installieren, indem Sie in diese Textdatei schreiben.

Fügen Sie dem Python-Code auch den Import hinzu. Der Import in der zweiten Zeile ist erforderlich, um den gesprochenen Inhalt (im Steckplatz) zu erhalten, der aus der zuvor im Code erstellten Absicht erhalten wurde.

lambda_function.py


from requests_oauthlib import OAuth1Session
from ask_sdk_core.utils import get_slot_value

Mach eine Klasse

Erstellen Sie eine Klasse, indem Sie eine vorhandene Klasse imitieren. Da der erstellte Absichtsname "EchoTweetIntent" war, möchte ich die Klasse "EchoTweetIntentHandler" nennen. Vorerst habe ich eine neue Klasse unter der Klasse "HelloWorldIntentHandler" erstellt.

Da wir den Prozess nur in der Funktion "handle" schreiben, schreiben wir auch den Prozess zum Posten auf Twitter.

lambda_function.py


class EchoTweetIntentHandler(AbstractRequestHandler):
    def can_handle(self, handler_input):
        return ask_utils.is_intent_name("EchoTweetIntent")(handler_input)

    def handle(self, handler_input):
        URL = 'https://api.twitter.com/1.1/statuses/update.json'
        CK = 'key' # Consumer Key
        CS = 'key' # Consumer Secret
        AT = 'token' # Access Token
        ATS = 'token' # Access Token Secret
        twitter = OAuth1Session(CK, CS, AT, ATS)
        tweetmsg = ask_utils.get_slot_value(handler_input=handler_input, slot_name="msg")
        if tweetmsg:
            params = {'status': tweetmsg + "\n(Tweet von Alexa)"}
            post_response = twitter.post(URL, params=params)
            if post_response.status_code == 200:
                speak_output = tweetmsg + "Getwittert."
            else:
                speak_output = "Es tut mir Leid. Fehler beim Senden des Tweets."
        else:
            speak_output = "Es tut mir Leid. Ich wusste nicht, was ich sagen sollte."
        return handler_input.response_builder.speak(speak_output).response

Damit der Code den Wert des Steckplatzes erhält, habe ich auf den im offiziellen Dokument verwiesen. [Von Alexa | Alexa Skills Kit gesendete Anfragen bearbeiten](https://developer.amazon.com/de/docs/custom-skills/handle-requests-sent-by-alexa.html#get-slot- Werte)

twitter enthält Token für OAuth. Bitte fügen Sie jeder Variablen Ihr eigenes Token usw. hinzu. tweetmsg enthält den Inhalt des Slots (was Sie gesagt haben), der mit ask.utils.get_slot_value abgerufen werden kann. Ändern Sie den Nachrichtenteil von "slot_name =" msg "" am Ende der Zeile so, dass er mit dem von Ihnen erstellten Steckplatznamen übereinstimmt. Die auf Twitter gepostete Nachricht enthält "\ n (Tweet von Alexa)", aber wie geschrieben, ist es leicht zu verstehen, dass es sich um einen Tweet von Alexa handelt.

Danach habe ich es in die Variable "speak_output" eingefügt, sodass ich sagen werde, dass ich getwittert habe, wenn ich POST und 200 zurückgegeben habe.

Klasse registrieren (?)

Sobald der Klassen- und Nachbearbeitungsprozess abgeschlossen ist, müssen wir ihn hinzufügen, damit die Klasse funktioniert. Am Ende des Code-Editors finden Sie viele ähnliche Dinge wie "sb.add_request_handler (LaunchRequestHandler ())".

Ich werde "sb.add_request_handler (Klassenname, den ich gemacht habe ())" in der Nähe hinzufügen.

lambda_function.py


sb.add_request_handler(EchoTweetIntentHandler())

Bitte beachten Sie, dass die von Ihnen erstellte Klasse ** über sb.add_request_handler (IntentReflectorHandler ()) ** geschrieben werden sollte. Dieser sogenannte Reflektor löste durch die gesprochenen Worte die Absicht von XX aus. Wird als Antwort zurückgegeben. Wenn dies zuerst eintritt, wird der gesamte Code, der zuvor aufgenommen und geschrieben wurde, nicht ausgeführt.

Wenn der Vorgang bisher abgeschlossen ist, klicken Sie auf Speichern und dann auf Bereitstellen.

Testen

Verwenden Sie die Registerkarte Test, die auch für Hello World verwendet wurde.

In meinem Fall ist ** Test Twitter ** der Rufname Geben Sie im Eingabeformular "Test mit Test Twitter und Tweet" ein und senden Sie es.

Wenn Sie von Alexa die Antwort "Ich habe einen Test getwittert" erhalten und diese auf der Twitter-Timeline veröffentlicht wird, ist dies ein Erfolg! !! !!

Probieren Sie die Methode aus, die Sie während Hello World ausprobiert haben, oder versuchen Sie es mit anderen auslösenden Äußerungen.

Wenn Sie tatsächlich mit Alexa sprechen, heißt es "Alexa, Test mit Test Twitter und Tweet".

Bewegt es sich nicht anders? Wenn Sie dies glauben, überprüfen Sie bitte den Code oder das Leerzeichen oder die Einrückung.

Komplett!

Wenn auf der Registerkarte "Tests" die Option "Entwicklung" ausgewählt ist, können Sie Ihre Fähigkeiten nur mit Alexa verwenden, das mit Ihrem Amazon-Konto verknüpft ist. Wenn es sich in der Entwicklung befindet, wird es nicht an andere weitergegeben. (Eine weitere Arbeit ist erforderlich, um zu veröffentlichen) Versuchen Sie nicht nur, die Registerkarte "Test" einzugeben, sondern auch mit einem Echo zu sprechen, das tatsächlich Alexa enthält.

Alles, was Sie jetzt tun müssen, ist die gleiche Arbeit wie zuvor zu erledigen und die Absichten und Slots nach Ihren Wünschen abzustimmen. Es ist einfach.

Jetzt können Sie zu Hause arbeiten, während Sie rumpelnde Cartoons lesen! !! !! **Lasst uns! Twitter! !! ** **.

Am Ende

Was ich oft über Alexa twittere, ist entweder "schläfrig" oder "hungrig", aber es macht Spaß. Vor allem können Sie mit "Alexa, Tweet, dass Sie auf Twitter hungrig sind" twittern! ?? angenehm.

Ich habe zuerst das Alexa Skills Kit berührt, aber zuerst war ich verwirrt, weil es nur Wörter gab, die ich nicht verstand. Was ist eine Absicht? Als ich es ausprobierte, war es überraschend einfach, verschiedene Dinge zu tun, also hat es Spaß gemacht.

Alles kann ausgeführt werden, indem der Prozess in das stumpfe Handle geschrieben wird. Ich denke also, dass Alexa alles andere als Twitter verarbeiten kann, wie Discord und Slack, das eine offene API hat. Ich denke, dass Dinge, die programmgesteuert ohne API betrieben werden können, selbstverständlich gehandhabt werden können. Wenn Sie Ihr Bestes geben, ist es kein Traum, Ironman's Jarvis zu spielen.

Es war wirklich befriedigend, auf das Internet zugreifen und etwas tun zu können, ohne "manipulieren" zu müssen, weil ich das Gefühl hatte, dass die Zeiten in mir fortgeschritten waren.

Vielen Dank, dass Sie so weit gelesen haben. Ich konnte nicht grob darüber sprechen, aber ich würde es begrüßen, wenn Sie Kommentare abgeben könnten, wenn Sie Vorschläge haben.

Recommended Posts

Lebe ein typenloses Twitter-Leben mit Alexa
Lebe ein Haml-Leben mit Django1.8 + Jinja2 + hamlish-jinja (Python3)
Ich habe ein Lebensspiel mit Numpy gemacht
Machen wir einen Twitter-Bot mit Python!
Machen Sie Twitter Trend Bot mit Heroku + Python
Stummschalten Sie Twitter-Trends und haben Sie ein angenehmes Twitter-Leben! !!
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
Ich habe versucht, mit Python einen Twitter-Blocker für faule Mädchen zu machen
Schritte zum Erstellen eines Twitter-Bots mit Python
Wie man mit 2017 Windows ein anständiges Leben führt
Ich habe einen Twitter BOT mit GAE (Python) gemacht (mit einer Referenz)
[Piyopiyokai # 1] Lass uns mit Lambda spielen: Holen Sie sich einen Twitter-Account
A4 Größe mit Python-Pptx
Twitter OAuth mit Django
Mit Dekorateur dekorieren
Erstellen Sie ein Lebensspiel, das manuell mit tkinter aktualisiert wird
Erstellen Sie einen Twitter-BOT mit dem GoogleAppEngine SDK für Python