[PYTHON] Vivez une vie Twitter sans saisie avec Alexa

** Amazon Echo dot (3e génération) ** était disponible pour 999 yens (219 yens si vous ne regardez que le prix unitaire principal), j'ai donc créé un client Twitter avec l'intention de développer Alexa.

introduction

Dans le développement des compétences Alexa, tout d'abord, vous pouvez choisir le langage à utiliser dans ** Node.js **, ** Python **, ** Other ** (personnalisé), mais je ne suis moi-même aussi décent que Python Puisqu'il ne peut pas être utilisé, nous allons procéder avec celui développé en Python cette fois.

Je pense qu'il y a beaucoup de parties dont on ne peut parler que grossièrement, comme pour les débutants et simplement bouger pour le moment, mais comprenez cela.

Dans cet article, nous n'aborderons pas les détails liés aux opérations Twitter comme le tweet sur Twitter via l'API.

Comme prémisse de procéder

Est requis.

buts finaux

À Alexa pour qu'elle puisse tweeter avec son compte.

Je vais vraiment le faire

Nous commencerons le travail de développement à partir d'ici. Tout le travail peut être fait avec un navigateur, donc aucun éditeur n'est requis.

Créer une compétence

Connectez-vous et accédez à Alexa Developer Console (https://developer.amazon.com/alexa/console/ask "Alexa Developer Console"). Il existe un bouton appelé Créer une compétence, alors cliquez dessus.

Nom et langue de la compétence

Choisissez le nom de votre compétence préférée et la langue par défaut. Le nom de la compétence ne peut pas être changé plus tard, donc je pense que c'est une bonne idée de le rendre facile à comprendre.

Modèles et ressources backend

Sélectionnez ** Personnalisé ** pour le modèle. Si vous lisez ceci et souhaitez développer des compétences en maison intelligente, veuillez le choisir. Choisir Personnalisé sera probablement un préréglage de base.

Pour la ressource backend, comme mentionné au début, cette fois, sélectionnez ** Alexa-Hosted (Python) **. C'est facile car il gère l'hébergement d'AWS Lambda au sein de l'Alexa Developer Console. Je ne peux pas expliquer Node.js parce que je ne l'ai pas touché parce que je voulais le faire. Pardon. De plus, en choisissant Alexa-Hosted, il semble que la facturation proviendra du compte connecté à Amazon Developer. Si vous utilisez les achats, vous serez facturé à partir de l'adresse de facturation du même compte.

modelandberesource.png

Supplément (OK même si vous l'ignorez)

En passant, si vous sélectionnez l'approvisionnement défini par l'utilisateur dans la ressource backend, vous ne pourrez pas utiliser l'éditeur de code sur la console développeur Alexa. Au lieu de cela, vous allez créer votre propre Lambda sur votre propre compte Amazon Web Services et écrire le code ici à partir de zéro. Vous devrez également définir les points de terminaison et les rôles IAM pour communiquer entre eux sur Alexa Skills et AWS Lambda. Étant donné que vous pouvez créer vous-même le backend, vous pouvez créer des compétences plus avancées, mais vous devez bien sûr savoir comment tout utiliser, c'est donc pour les utilisateurs avancés.

Création terminée

Après avoir sélectionné ce qui précède, appuyez simplement sur Créer une compétence en haut à droite de la page. Cela prendra quelques minutes pour terminer la création, mais attendons gracieusement tout en buvant du café en disant à Alexa "Alexa, joue le jazz recommandé".

Une fois créé, il effectuera ** tous les paramètres ** pour vous, y compris HelloWorld. S'il ne s'agit que de Hello World, vous pouvez le faire simplement en créant une compétence (bien qu'il y ait certaines parties avec lesquelles jouer). Facile!

Nom d'appel

La première chose que je veux faire est de changer le nom de l'appel. Par défaut, il contient le même nom de compétence Alexa que vous avez défini au début, mais lorsque vous l'appelez, vous souhaiterez peut-être l'appeler plus facilement. Comme objectif, je veux pouvoir tweeter en disant ** "Alexa, tweetez XX sur Twitter." **. dans ce cas

  1. Alexa
  2. Twitter
  3. ○○ (contenu marmonnant)
  4. Tweet.

Et dans l'ordre du haut

  1. Mot d'activation d'Alexa
  2. Mot d'activation pour les compétences personnelles
  3. Variables de contenu
  4. Instruction

Ce sera.

Donc, cette fois, il est raisonnable d'inclure "Twitter" comme ** nom pour appeler la compétence **. Bien sûr, vous pouvez entrer votre mot préféré.

Ce nom d'appel n'est qu'un nom d'appel, donc même si vous faites une erreur, n'entrez pas "sur Twitter" tel quel. Ce sera probablement intéressant car il ne démarrera que si vous dites "sur Twitter". Si vous entrez un mot, Alexa décidera du mot d'activation qui suit. (Par exemple, si vous définissez le nom de l'appel sur "Twitter", vous pouvez également utiliser "Alexa, lancez Twitter et tweetez XX".) Il existe d'autres exigences de dénomination, mais veuillez les lire telles qu'elles sont écrites sur la page pour décider du nom de l'appel.

Pour plus de détails, consultez le document officiel [Déterminez le nom d'appel de la compétence personnalisée](https://developer.amazon.com/en/docs/custom-skills/choose-the-invocation-name-for-a-custom -skill.html) est à bord.

HelloWorld

Par défaut, la compétence Alexa créée a HelloWorldIntent et le code correspondant. Pour le moment, je n'utiliserai cela que pour HelloWorld. Si vous ne vous souciez pas de Hello World, veuillez l'ignorer.

Ouvrez l'onglet Test et sélectionnez Sous Développement pour la partie privée en haut à gauche. Je pense qu'il y a un champ de saisie en dessous, alors entrez d'abord et envoyez uniquement le nom de l'appel. (Ici, mon nom d'appel est "Test Twitter")

HWtest1.png

Ensuite, je pense que le texte anglais sera renvoyé. Pour le dire très simplement, "Bonjour ou aidez-vous?"

Alors revenons Bonjour.

HWtest2.png

Puis Alexa est retournée Hello World!

C'est facile! !!

Si vous regardez HelloWorldIntent sur l'onglet de construction, il y a environ 7 types d'énoncés répertoriés par défaut. J'ai tapé Hello maintenant, mais lorsque je prononce les mots dans cette intention, cela renvoie également Hello World!.

Soit dit en passant, vous pouvez dire Hello World sans couper les mots.

HWtest3.png

Dans la première méthode, elle était divisée en appel par nom → émission d'une instruction, mais dans l'autre méthode, elle était appelée et en émettant une instruction.

Si vous regardez l'éditeur de code et le comparez avec la réponse d'Alexa et le nom de l'intention, vous pouvez voir comment cela fonctionne.

Fondamentalement, la classe correspondant à l'intention enregistrée est exécutée et celle traitée dans la fonction handle de la classe parle avec return. Dans la classe HelloWorldIntentHandler, la variable speak_output contient les mots que vous voulez prononcer et le retour contient la variable.

Je vais implémenter

Je commencerai à l'implémenter quand je comprendrai comment cela fonctionne.

Intention

Créer un intent

Dans l'onglet Générer, appuyez sur le bouton Ajouter à côté de l'intention. Choisissez Créer une intention personnalisée, choisissez un nom de votre choix et créez-le. Ici, j'ai nommé l'intention «EchoTweetIntent».

Ensuite, entrez l'énoncé pour exécuter cette intention, mais avant cela, il y a du travail nécessaire, alors faisons-le.

Ajout du type de slot

Appuyez sur le bouton d'ajout à côté du type de logement. Sélectionnez Utiliser le type de slot existant dans la bibliothèque intégrée d'Alexa. Appuyez sur le bouton Ajouter un type d'emplacement à droite de ʻAMAZON.SearchQuery` parmi les nombres, les dates et les heures.

Les machines à sous sont désormais utilisées pour écouter ce que vous voulez tweeter et le traiter comme une variable. D'autres bibliothèques intégrées ne reconnaissent que les noms de lieux, les noms de personnes, les numéros, etc., donc j'ai pensé que cela ne conviendrait pas pour tweeter avec mes mots préférés, alors j'ai choisi ʻAMAZON.SearchQuery`. .. Il semble que tout peut être fait car il contient des mots à rechercher. (Veuillez me dire toute autre bonne méthode ou erreur)

Ajout d'un emplacement d'intention

Après avoir ajouté le type de slot, je reviendrai sur l'intention que j'ai faite précédemment. Créez un emplacement d'intention qui ressemble à une variable avant de saisir l'énoncé.

Entrez un nom que vous aimez et appuyez sur le bouton + à côté pour l'ajouter. (J'ai utilisé msg.)

Une fois créé, cliquez sur "Choose Slot Type" et sélectionnez la ʻAMAZON.SearchQuery` que vous venez d'ajouter. Vous pouvez maintenant le traiter comme une variable.

Ajout de la parole d'appel

Dans le champ de saisie de l'exemple d'énoncé, entrez l'énoncé de quoi dire à tweeter. Cette fois

Nous ajouterons trois types à titre d'exemple. Le contenu du murmure (msg) est entré dans 〇〇.

Pour utiliser ce que vous avez préparé comme emplacement, placez le nom de l'emplacement d'intention dans {}. Si vous entrez le premier {, les candidats de prédiction apparaîtront, mais comme un seul est créé, appuyez sur la touche TAB telle quelle insérera automatiquement l'emplacement d'intention.

intentresult1.png

Je pense que ce sera comme ça si vous pouvez ajouter correctement 3 types.

Cette fois, il n'y a que ces trois types, mais je pense que cela seul ne rendra probablement pas votre vie Twitter confortable, alors veuillez ajouter divers énoncés originaux le cas échéant.

Lorsque vous avez terminé, appuyez sur Enregistrer le modèle pour créer votre modèle. La construction prendra un certain temps.

Ecrire le code

Maintenant que l'intention est prête, il est temps d'écrire le code correspondant en Python. A partir de là, nous utiliserons l'éditeur de code. Il dit qu'il n'a ni l'original ni l'enfant, mais en gros c'est une modification de copier-coller du code qui existe par défaut.

J'écrirai désormais le code Twitter à ma manière, donc si vous avez votre propre chemin, lisez-le comme vous le souhaitez.

Ajouter un module

Ajoutez ce qui suit pour utiliser l'API Twitter. Puisque les 1ère et 2ème lignes datent du début, seule la 3ème ligne est ajoutée.

requirements.txt


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

Si vous souhaitez utiliser un nouveau module, vous pouvez l'installer en écrivant dans ce fichier texte.

Ajoutez également l'importation au code python. L'importation sur la deuxième ligne est nécessaire pour obtenir le contenu parlé (dans l'emplacement) obtenu à partir de l'intention créée plus tôt dans le code.

lambda_function.py


from requests_oauthlib import OAuth1Session
from ask_sdk_core.utils import get_slot_value

Faire un cours

Créez une classe en imitant une classe existante. Le nom d'intention que j'ai créé était ʻEchoTweetIntent, donc je voudrais nommer la classe ʻEchoTweetIntentHandler. Pour le moment, j'ai créé une nouvelle classe sous la classe HelloWorldIntentHandler.

Puisque nous n'écrivons le processus que dans la fonction handle, nous écrivons également le processus pour publication sur 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 d'Alexa)"}
            post_response = twitter.post(URL, params=params)
            if post_response.status_code == 200:
                speak_output = tweetmsg + "Tweeté."
            else:
                speak_output = "Je suis désolé. Échec de l'envoi du tweet."
        else:
            speak_output = "Je suis désolé. Je ne savais pas quoi dire."
        return handler_input.response_builder.speak(speak_output).response

Pour le code permettant d'obtenir la valeur de l'emplacement, je me suis référé à celui du document officiel. [Traiter les demandes envoyées par Alexa | Alexa Skills Kit](https://developer.amazon.com/en/docs/custom-skills/handle-requests-sent-by-alexa.html#get-slot- valeurs)

twitter contient des jetons pour OAuth. Veuillez ajouter votre propre jeton, etc. à chaque variable. tweetmsg contient le contenu du slot (ce que vous avez dit) qui peut être obtenu avec ʻask.utils.get_slot_value. Modifiez la partie msg de slot_name =" msg "` à la fin de la ligne pour qu'elle corresponde au nom de l'emplacement que vous avez créé. Le message publié sur Twitter contient «\ n (tweet d'Alexa)», mais tel qu'il est écrit, il est facile de comprendre qu'il s'agit d'un tweet d'Alexa.

Après cela, je le mets dans la variable speak_output pour que si je POST et que 200 est retourné, je dirai que j'ai tweeté.

Inscrivez-vous (?) Classe

Une fois le processus de classe et de post terminé, nous devons l'ajouter pour que la classe fonctionne. Au bas de l'éditeur de code, vous trouverez beaucoup de choses similaires à sb.add_request_handler (LaunchRequestHandler ()).

J'ajouterai sb.add_request_handler (nom de classe que j'ai fait ()) près de cela.

lambda_function.py


sb.add_request_handler(EchoTweetIntentHandler())

Veuillez noter que la classe que vous avez créée doit être écrite ** au-dessus de sb.add_request_handler (IntentReflectorHandler ()) **. Ce soi-disant réflecteur a déclenché l'intention de XX par les mots prononcés. Sera retourné en réponse. Donc, si cela vient en premier, tout le code qui a été récupéré et écrit précédemment ne sera pas exécuté.

Une fois le processus terminé, appuyez sur Enregistrer, puis déployez.

Essai

Utilisez l'onglet de test qui a également été utilisé pour Hello World.

Dans mon cas, ** Test Twitter ** est le nom d'appel Entrez et envoyez "Test avec test Twitter et tweet" dans le formulaire de saisie.

Si vous obtenez une réponse d'Alexa disant "J'ai tweeté un test" et qu'elle est publiée sur la timeline Twitter, c'est un succès! !! !!

Essayez la méthode que vous avez essayée pendant Hello World ou essayez d'autres énoncés d'intention de déclenchement.

Lorsque vous parlez réellement à Alexa, il dit "Alexa, testez avec Twitter et tweetez".

Cela ne bouge-t-il pas différemment? Si vous pensez que oui, veuillez consulter le code ou revoir l'espace ou l'indentation.

Achevée!

Avec Développement sélectionné dans l'onglet Tests, vous êtes libre d'utiliser vos compétences uniquement avec Alexa, qui est liée à votre compte Amazon. S'il est en cours de développement, il ne sera pas divulgué à d'autres. (Un autre travail est nécessaire pour publier) En plus de taper dans l'onglet de test, essayez de parler à un écho qui contient réellement Alexa.

Tout ce que vous avez à faire maintenant est de faire le même travail qu'avant et d'affiner les intentions et les emplacements à votre guise. C'est facile.

Vous pouvez désormais travailler à la maison sur Twitter tout en lisant des dessins animés grondants! !! !! ** allons! Twitter! !! ** **

À la fin

Ce que je tweet souvent à Alexa est soit «somnolent» soit «affamé», mais c'est amusant. Surtout, vous pouvez tweeter avec "Alexa, tweetez que vous avez faim sur Twitter"! ?? agréable.

J'ai d'abord touché le kit de compétences Alexa, mais au début j'étais confus car il n'y avait que des mots que je ne comprenais pas. Qu'est-ce qu'une intention? Quand je l'ai essayé, c'était étonnamment facile de faire diverses choses, donc c'était amusant.

Tout peut être exécuté en écrivant le processus dans la poignée émoussée, donc je pense qu'Alexa peut gérer autre chose que Twitter, comme Discord et Slack, qui a une API ouverte. Je pense que les choses qui peuvent être exploitées par programme sans API peuvent être traitées comme une évidence. Si vous faites de votre mieux, jouer à Jarvis d'Ironman n'est pas un rêve.

Pouvoir accéder à Internet et faire quelque chose sans le processus de «manipulation» était vraiment satisfaisant car je sentais que les temps avaient progressé en moi.

Merci d'avoir lu jusqu'ici. Je ne pourrais pas en parler grosso modo, mais je vous serais reconnaissant de bien vouloir commenter si vous avez des suggestions.

Recommended Posts

Vivez une vie Twitter sans saisie avec Alexa
Vivez une vie de Haml avec Django1.8 + Jinja2 + hamlish-jinja (Python3)
J'ai fait un jeu de vie avec Numpy
Faisons un bot Twitter avec Python!
Créer un bot Twitter Trend avec heroku + Python
Désactivez les tendances Twitter et ayez une vie confortable sur Twitter! !!
Essayez de dessiner une courbe de vie avec python
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
Étapes pour créer un bot Twitter avec Python
Comment vivre une vie décente avec Windows 2017
J'ai fait un Twitter BOT avec GAE (python) (avec une référence)
[Piyopiyokai # 1] Jouons avec Lambda: créez un compte Twitter
Format A4 avec python-pptx
Twitter OAuth avec Django
Décorer avec un décorateur
Créez un jeu de vie mis à jour manuellement avec tkinter
Créez un Twitter BOT avec le SDK GoogleAppEngine pour Python