[Python] Utilisation de l'API Line [1ère création de Beauty Bot]

motivation

Je n'ai pas fait la queue avec une fille ces derniers temps ... N'y a-t-il pas une jolie fille qui vous répondra immédiatement? N'est-il pas possible d'y parvenir en utilisant linebot?

Je vais créer un linebot pour une raison si terrible.

environnement

・ Mac Catalina ・ Version Docker 19.03.13 ・ Flacon 1.1.2 ・ Python 3.8.3 ・ Docker-compose la version 1.27.4 ・ Heroku 7.45.0 ・ Bash

Que créer cette fois

Tout d'abord, en tant que construction d'environnement, déplacez le conteneur de docker vers heroku et démarrez-le. LINE BOT crée un beau bot qui reviendra bonjour quand vous dites bonjour. Notez que ce n'est pas le cas car il est non arrière!

couler

Le déroulement de la première fois est décrit.

** 1. Enregistrement des développeurs LINE ** ** 2. Création d'un fichier python ** ** 3. Créez Dockerfile et docker-compose.yml ** ** 4. Télécharger sur heroku **

La structure finale du fichier est la suivante.

bijobot ├── Dockerfile ├── app.py ├── docker-compose.yml └── requirements.txt

1. Enregistrement des développeurs LINE

Accédez au site à partir de ce qui suit. LINE Developers

スクリーンショット 2020-11-15 21.56.14.png

Tout d'abord, connectez-vous et sélectionnez créer à partir des fournisseurs. Je m'en fiche s'il y a déjà une notification disny.

Il dira Créer un nouveau fournisseur, alors donnez-lui le nom que vous voulez, comme une notification disny. Je l'ai nommé "Free Image Child".

Ensuite, "Ce fournisseur n'a pas encore de canaux" apparaît. Sélectionnez donc Créer un canal d'API de messagerie.

スクリーンショット 2020-11-15 21.59.43.png

Après cela, vous serez redirigé vers l'écran ci-dessous, alors remplissez chacun comme il convient. L'icône de chaîne est souvent utilisée dans les images gratuites, et j'ai personnellement adopté un type enfant.

スクリーンショット 2020-11-15 22.03.18.png

Si vous acceptez les conditions et vérifiez Admin, vous pouvez voir que de nouvelles chaînes ont été ajoutées comme indiqué ci-dessous.

スクリーンショット 2020-11-15 22.06.36.png

Accédez à la chaîne que vous avez créée ici et dans les paramètres de base

Channnel secret

Dans l'API de messagerie

Channel access token

Quant à, il est nécessaire, alors prenez-en note.

2. Création d'un fichier python

Messaging API SDKs Étant donné que la procédure de création d'un fichier à l'aide de flask est décrite à partir des SDK officiels de, nous l'appliquerons pour le créer.

Commencez par créer un répertoire de travail pour créer une application. Bijo irait bien.

terminal


mkdir bijo
cd bijo

Ensuite, créez un fichier python.

Le fichier python créé est le suivant. Assurez-vous de le nommer app.py.

app.py



from flask import Flask, request, abort

#Bibliothèque qui gère l'environnement dans OS
import os

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)



#Obtenir des variables d'environnement

YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"]
YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"]

line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)


app = Flask(__name__)



@app.route("/")
def hello_world():
    return "hello!"

@app.route("/callback", methods=['POST'])
def callback():
    # get X-Line-Signature header value
    signature = request.headers['X-Line-Signature']

    # get request body as text
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    # handle webhook body
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        print("Invalid signature. Please check your channel access token/channel secret.")
        abort(400)

    return 'OK'


@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text))


if __name__ == "__main__":
    app.run()

YOUR_CHANNEL_ACCESS_TOKEN YOUR_CHANNEL_ACCESS_TOKEN Je me suis abstenu de Channnel secret Channel access token Utiliser. Utilisez os pour récupérer des informations à partir des variables d'environnement heroku. Cela sera défini plus tard dans heroku.

** 3. Créez Dockerfile et docker-compose.yml **

Créer Procfile etc. avec heroku est gênant, et je voulais utiliser la technologie moderne si possible, alors j'utilise docker. Créez le Dockerfile et docker-compose.yml dans le répertoire bijo comme indiqué ci-dessous.

Il semble que je doive créer une version heroku de docker-compose.yml appelée heroku.yml, mais cela semble gênant, alors j'ai passé cette fois.

docker-compose.yml


#Pour le travail local:Ne fonctionne pas dans heroku.

#Pour le travail local:Ne fonctionne pas dans heroku.

version: '3'

services:
  app:
    build: .
    container_name: bijobot
    tty: true
    ports:
      - 5000:5000
    environment:
        FLASK_ENV: 'development'    #Mode de débogage activé
        FLASK_APP:  "app.py"        #app.Démarrer py
        YOUR_CHANNEL_ACCESS_TOKEN:Une copie du jeton d'accès
        YOUR_CHANNEL_SECRET:Secret de chaîne retenu
    volumes:
      - ./:/code/
    command: flask run -h 0.0.0.0
    # command: gunicorn -b 0.0.0.0:$PORT app:app --log-file=-

En définissant FLASK_ENV: 'development', le fichier sera automatiquement reflété sur le serveur lors de l'enregistrement.

Dockerfile


FROM python:3.7-alpine

#Créez un répertoire appelé code et utilisez-le comme dossier de travail
WORKDIR /code

#Mode de débogage activé
ENV FLASK_ENV: 'development'   

#magie alpine
RUN apk add --no-cache gcc musl-dev linux-headers

# requirements.Déplacez le txt dans le code
COPY requirements.txt requirements.txt
# requirements.Installez la bibliothèque en txt
RUN pip install -r requirements.txt

#Montez tous les fichiers dans le code.
COPY . .

# $Notez que cela ne fonctionnera que si PORT est spécifié.
CMD gunicorn -b 0.0.0.0:$PORT app:app --log-file=-

De plus, créez requirements.txt.

Cela peut être décompressé en appuyant sur la commande squid, mais cette fois, nous allons suivre la procédure créée à l'avance.

terminal


pip freeze > requirements.txt

Entrez ce qui suit dans requirements.txt.

certifi==2020.11.8
chardet==3.0.4
click==7.1.2
Flask==1.1.2
future==0.18.2
gunicorn==20.0.4
idna==2.10
itsdangerous==1.1.0
Jinja2==2.11.2
line-bot-sdk==1.17.0
MarkupSafe==1.1.1
requests==2.25.0
urllib3==1.26.2
Werkzeug==1.0.1

requirements.txt consiste à écrire la bibliothèque python à l'avance afin qu'elle puisse être installée.

pip install gunicorn flask line-bot-sdk

Vous n'avez pas besoin de ce que vous n'êtes pas allé.

terminal


touch requirements.txt

Ensuite, tapez la commande suivante pour lancer le conteneur Docker.

terminal


docker-compose build
docker-compose up -d

Accédez maintenant à localhost: 5000 et vérifiez que bonjour! S'affiche.

4. Déployer avec heroku

Nous vous recommandons d'enregistrer heroku à l'avance. Tout d'abord, connectez-vous à heroku.

terminal


heroku  login
heroku container:login

Ensuite, créez une application dans heroku. Vous pouvez utiliser heroku create comme nom de l'application que vous souhaitez ajouter. Cette fois, je lui ai donné un nom d'application approprié de bijobijo. Si vous obtenez une erreur ici, vous devez la renommer car il s'agit d'un nom d'application existant.

heroku create bijobijo

Ensuite, il est nécessaire de lier le git local et le git distant. La liaison est possible avec la commande suivante.

terminal


heroku git:remote -un nom d'application

prochain heroku config: set Nom de la variable d'environnement que vous voulez ajouter =" Chaîne de caractères de la variable d'environnement à définir "--app Nom de votre application Vous pouvez définir la variable d'environnement dans heroku en faisant.

Par conséquent, définissez les paramètres suivants.

heroku config:set YOUR_CHANNEL_SECRET="Chaîne secrète de canal" --app le nom de votre application
heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="Chaîne de jeton d'accès" --app le nom de votre application

En ce qui concerne la configuration, vous pouvez également vérifier les paramètres de configuration à partir de votre propre application sur le site d'heroku comme suit.

スクリーンショット 2020-11-16 0.24.58.png

La variable d'environnement définie est

heroku config

Vous pouvez également vérifier avec.

Maintenant que les variables d'environnement ont été définies, nous les téléchargerons.

L'endroit où je suis resté coincé ici

Tout le monde facilement

heroku container:push web

Je pensais que c'était le nom de docker-compose.yml

heroku container:push app

Mais ça n'a pas bien commencé.

Lorsque je cherchais quelque chose, la réponse a été écrite dans l'article suivant.

Container Registry & Runtime (Docker Deploys)

heroku container:push <process-type>

To push multiple images, rename your Dockerfiles using Dockerfile.:

En d'autres termes, si vous le nommez Dockerfile.web, vous pouvez le démarrer.

Réécrivez immédiatement le Dockerfile dans Dockerfile.web et appuyez sur les commandes suivantes dans l'ordre.

terminal


heroku container:push web
heroku container:release web

L'application est maintenant disponible.

Si vous appuyez sur la commande suivante ici et passez à la page qui dit bonjour!, C'est ok.

terminal


heroku open

Vous pouvez vérifier le conteneur qui s'exécute réellement à partir de Resources à partir de votre propre application à partir du fonctionnaire heroku. Si c'est le cas, vous pouvez voir que le Web est en cours d'exécution.

スクリーンショット 2020-11-16 1.19.33.png

Enfin, passez à votre propre chaîne depuis LINE Developer et depuis l'API de messagerie Sélectionnez les paramètres du Webhook, https: // {nom de l'application} .herokuapp.com / callback Si vous définissez, vous avez terminé. Notez également que linebot ne fonctionnera que si vous activez Utiliser le webhook comme indiqué ci-dessous. スクリーンショット 2020-11-16 1.28.27.png

Vous pouvez désormais échanger des messages avec de belles personnes tous les jours! !!

S__116711449.jpg

Il semble qu'un message fixe arrive, alors je vais m'en occuper.

Sélectionnez "Messages de relecture automatique" dans l'API de messagerie. スクリーンショット 2020-11-16 1.30.34.png

Paramètres de réponse → Paramètres avancés → Message de réponse → Paramètres du message de réponse → Désactivé Cela sera résolu.

スクリーンショット 2020-11-16 1.34.52.png

À bientôt,

S__116711452.jpg

Vous êtes bien rentré.

Mon cœur est vide.

Il semble que les affaires peuvent être automatisées en utilisant linebot, alors j'aimerais continuer à relever des défis.

Article de référence

Vue d'ensemble

C'est facile même pour les débutants! Créons un bot de chat LINE avec Python!

** Comment définir l'environnement dans heroku **

J'ai créé un LINE BOT avec Python + Heroku

** Gestion des exigences.txt **

Consultez la liste des packages installés avec Python, pip list / freeze

** pousser docker vers heroku **

Container Registry & Runtime ↑ C'était le plus utile lors de la sortie.

[Local Development with Docker Compose] (https://devcenter.heroku.com/articles/local-development-with-docker-compose) Les débutants en Python créeront LINEbot avec Flask (édition Heroku + ClearDB)

Recommended Posts

[Python] Utilisation de l'API Line [1ère création de Beauty Bot]
[Question] À propos de la conversion API du chat bot à l'aide de Python
LINE BOT avec Python + AWS Lambda + API Gateway
Création récente de classement à l'aide de l'API Qiita avec Python
Téléchargement anonyme d'images à l'aide de l'API Imgur (à l'aide de Python)
[Python] Résumé de la méthode de création de table utilisant DataFrame (pandas)
[LINE Messaging API] Créer un BOT de retour de perroquet avec Python
Divers mémorandums lors de l'utilisation du sdk de l'API de messagerie LINE avec Python (2.7.9) + Google App Engine
python: principes de base de l'utilisation de scikit-learn ①
Création du LINE BOT Parrot Return
Diffusion sur LINE en utilisant python
Exécutez LINE Bot implémenté en Python (Flask) "sans utiliser Heroku"
[Python] J'ai essayé de collecter des données en utilisant l'API de wikipedia
Traitement asynchrone avec LINE BOT: RQ (Redis Queue) en Python
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
Démo facile à comprendre de Imagemap Message de l'API de messagerie LINE [PHP] [Ruby] [Python]
[Python] Créez votre propre bot LINE
Capture d'image de Firefox en utilisant Python
Acquisition de données à l'aide de l'API googlemap de python
Suppression de la brume à l'aide de Python detailEnhanceFilter
[Python] Notification LINE des dernières informations à l'aide de la recherche automatique Twitter
Essayez d'utiliser l'API de Pleasant (python / FastAPI)
[LINE Messaging API] Créez un BOT qui se connecte à quelqu'un avec Python
Implémentation des notifications de bureau à l'aide de Python
Essayez d'utiliser l'API d'action de Python argparse
Création de graphique Excel à l'aide de python xlwings
Exécutez Ansible à partir de Python à l'aide de l'API
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
Création d'interface graphique en python avec tkinter 2
L'histoire de la création d'un robot LINE pour le petit-déjeuner d'une université de 100 yens avec Python
Python appelant l'API Google Cloud Vision depuis LINE BOT via AWS Lambda
Développement et déploiement de l'API REST en Python à l'aide de Falcon Web Framework
Obtenez des images d'excellentes trouvailles / 47 sites en utilisant Python (1/2: Jusqu'à la création de la liste cible)
Python: principes de base de la reconnaissance d'image à l'aide de CNN
Fonctionnement de la souris à l'aide de l'API Windows en Python
Collecte automatique des cours boursiers à l'aide de python
À propos de la création de l'interface graphique à l'aide de TKinter de Python
Essayez d'utiliser l'API Wunderlist en Python
Création d'interface graphique en python à l'aide de tkinter partie 1
Pratique d'utilisation de ceci en Python (mauvais)
Essayez d'utiliser l'API Kraken avec Python
Création d'animation flexible à l'aide de l'animation.FuncAnimation de matplotlib
Python: Application de la reconnaissance d'image à l'aide de CNN
[Python] [LINE Bot] Créer un robot LINE de retour de perroquet
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
Développement de slack bot avec python en utilisant chat.postMessage
Création d'un classificateur négatif / positif à l'aide de BERT
Étude sur Tokyo Rent en utilisant Python (3-1 sur 3)
Créer une feuille de calcul Google à l'aide de l'API Python / Google Data
Connaissance de l'utilisation de l'API de données Aurora Severless
J'ai créé un LINE BOT qui renvoie une image de riz terroriste en utilisant l'API Flickr
Ajouter une fonction de conversation au robot slack (créé par python) à l'aide de l'API Talk de Recruit
Laisser Python mesurer le score moyen d'une page à l'aide de l'API PageSpeed Insights
[Python] Totale automatiquement le nombre total d'articles publiés par Qiita à l'aide de l'API
LINE Bot m'a envoyé le résultat du scraping des informations de tendance informatique [LINE Messaging API]
[Python] Une histoire sur la création d'un bot LINE avec une fonction humaine pratique sans utiliser Salesforce [API de messagerie]