Procédure de création d'un LineBot réalisé avec Python

Préface

De nombreux articles ont écrit sur la façon de créer un linebot, mais depuis que j'étais débutant, j'avais une pierre d'achoppement, alors j'ai compensé et facilité la compréhension. Puisqu'il s'agit d'un article que j'ai rédigé pour moi-même, de nombreux points sont difficiles à comprendre, mais faites de votre mieux en vous référant à d'autres articles.

Premise LineBot a été créé

スクリーンショット 2020-02-01 11.10.20.png #### Obtenir le secret de la chaîne ![スクリーンショット 2020-05-06 17.13.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517291/204af3f7-9656-3ddb-d799-e9ff025776b4.png)

Obtenir un jeton d'accès à la chaîne

Compte Heroku prérequis créé et crédit enregistré

  1. Démarrez le terminal 2、
$mkdir lineBotTest

$cd lineBotTest

Entrer 3, lancez l'édition de texte dans l'application 4, sélectionnez le format dans la barre supérieure, sélectionnez le texte standard, copiez et collez ce qui suit Pas besoin de changer "LINE_CHANNEL_SECRET "etc. Copier tel quel

import os
import sys
from argparse import ArgumentParser
from flask import Flask, request, abort
from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)

app = Flask(__name__)

"""
heroku config:set LINE_CHANNEL_SECRET="Secret de chaîne" --app Nom de l'application
Est entré dans le terminal, de sorte que le secret du canal est automatiquement entré dans le code suivant à chaque fois.
Le jeton d'accès est le même, il n'est donc pas nécessaire de le changer.
"""
channel_secret = os.getenv('LINE_CHANNEL_SECRET', None)
channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN', None)

"""
Secret de canal nul ou jeton d'accès(rien)Traitement en cas de
"""
if channel_secret is None:
    print('Specify LINE_CHANNEL_SECRET as environment variable.')
    sys.exit(1)
if channel_access_token is None:
    print('Specify LINE_CHANNEL_ACCESS_TOKEN as environment variable.')
    sys.exit(1)
    
"""
Obtenez des jetons, etc. à partir des variables Heroku
"""
line_bot_api = LineBotApi(channel_access_token)
handler = WebhookHandler(channel_secret)

"""
Webhook de LINE
Fonctions de base qui ne changent pas
"""
@app.route("/callback", methods=['POST'])
def callback():
    #Obtenez la valeur pour la vérification de la signature à partir de l'en-tête de la demande
    signature = request.headers['X-Line-Signature']

    #Obtenir le corps de la demande
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    #Validez la signature et appelez la fonction définie dans le handle s'il n'y a pas de problème
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:#Renvoie 400 lorsqu'une erreur se produit
        abort(400)
    return 'OK'

"""
Événement de massage en LIGNE(Lorsqu'un SMS est envoyé)Appelé quand
line_bot_api.reply_événement du premier argument du message.reply_le jeton est utilisé pour répondre aux événements
Le deuxième argument est linebot.Passer l'objet TextSendMessage pour la réponse définie dans les modèles
"""
@handler.add(MessageEvent, message=TextMessage)
def message_text(event):
    #Ce qui a été entré(event.message.text)Répondre selon
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text)
    )

if __name__ == "__main__":#Identifiez s'il fonctionne avec l'extension de fichier correcte
    port = int(os.getenv("PORT", 5000))
    app.run(host="0.0.0.0", port=port)
  1. Nommez-le main.py. Aussi, enregistrez-le dans lineBotTest À ce point スクリーンショット 2020-02-01 11.32.48.png Ça devrait être comme ça.

  2. Confirmez qu'il s'agit bien de lineBotTest user $ dans le terminal et entrez la commande suivante

$brew tap heroku/brew && brew install heroku

$heroku login
//Appuyez sur un bouton autre que q pour démarrer la connexion

$heroku créer le nom de l'application
//Utilisez des noms d'applications créés par d'autres et des noms uniques qui ne souffrent pas
//heroku create linetest0000 Utilisez linetest0000 cette fois

$heroku addons:create fixie:tricycle --app linetest0000
//Ajout du module complémentaire "Fixie"

$pipenv install flask
$pipenv install line-bot-sdk
//"Pipfile" et "Pipfile" dans le dossier."lock" est généré.

/*
Entrez lors du scraping Web
$pipenv install bs4
$pipenv install requests
*/

$heroku config:set LINE_CHANNEL_SECRET="Secret de chaîne" --app linetest0000
//Entrez le premier secret de chaîne acquis

$heroku config:set LINE_CHANNEL_ACCESS_TOKEN="Jeton d'accès (long terme)" --app linetest0000
//Entrez le premier jeton d'accès que vous avez obtenu

$echo web: python main.py > Procfile
//Création de profil

$heroku git:remote --app linetest0000

$git init

$git add -A

$git commit -m "Entrez un commentaire"

$git push heroku master

git add -A Les commandes suivantes sont les commandes à saisir pour refléter le changement de code.

paramètres de webhook
スクリーンショット 2020-02-01 12.53.56.png Entrez "https://appname.herokuapp.com/callback"

Mise en garde

Si vous utilisez l'importation dans votre code, utilisez Procfile

$nom de la bibliothèque d'installation pipenv

Entrer Entrez Procfile avec une commande au lieu de l'ouvrir

Quand ça ne bouge pas

$heroku logs -t

Vous pouvez voir le journal sur. Cela fonctionne généralement.

Ceci complète スクリーンショット 2020-02-01 13.42.47.png

Recommended Posts

Procédure de création d'un LineBot réalisé avec Python
Commandes pour créer un environnement python3 avec virtualenv
Procédure de création d'un environnement d'isolation Python (environnement venv)
[GCP] Procédure de création d'une application Web avec Cloud Functions (Python + Flask)
J'ai fait un Line-bot avec Python!
J'ai fait une loterie avec Python.
J'ai créé un démon avec Python
Procédure d'installation pour Python et Ansible avec une version spécifique
Créer un fichier power simple avec Python
J'ai fait un compteur de caractères avec Python
J'ai fait une carte hexadécimale avec Python
J'ai fait un jeu rogue-like avec Python
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
Un manuel pour les débutants réalisé par des débutants Python
J'ai fait un simulateur de neurones avec Python
J'ai créé beaucoup de fichiers pour la connexion RDP avec Python
J'ai créé un fichier de dictionnaire python pour Neocomplete
J'ai créé une application graphique avec Python + PyQt5
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
Un mémo lors de la création d'un environnement python avec miniconda
Notes sur la création d'un environnement python par les débutants
J'ai fait un jeu de cueillette avec Python
Made Mattermost Bot avec Python (+ Flask)
Procédure de création d'une application avec Django avec Pycharm ~ Préparation ~
J'ai fait un Twitter BOT avec GAE (python) (avec une référence)
J'ai fait un jeu d'éclairage de sapin de Noël avec Python
J'ai créé une fenêtre pour la sortie du journal avec Tkinter
Créez un environnement python pour chaque répertoire avec pyenv-virtualenv
J'ai créé une application de notification de nouvelles en ligne avec Python
J'ai créé une VM qui exécute OpenCV pour Python
J'ai créé un environnement Python3 sur Ubuntu avec direnv.
Problèmes lors de la création d'un outil de conversion csv-json avec python
J'ai essayé de faire LINE BOT avec Python et Heroku
Création de la méthode ρ pour décrypter une courbe elliptique avec python
Procédure de création d'un environnement CDK sous Windows (Python)
Créer une couche pour AWS Lambda Python dans Docker
[Python] J'ai créé un classificateur pour les iris [Machine learning]
Procédure de création d'un Line Bot sur AWS Lambda
[Piyopiyokai # 1] Jouons avec Lambda: création d'un script Python
Procédure d'installation de Python 3.6 [pour Windows]
J'ai fait un blackjack avec du python!
Créer un œuf avec python
Faites une loterie avec Python
J'ai fait un texte Python
Fait une commande pour FizzBuzz
J'ai fait un blackjack avec Python.
Créer un répertoire avec python
Othello fait avec python (comme GUI)
J'ai créé wordcloud avec Python.
J'ai fait un jeu de frappe simple avec tkinter de Python
kabu Station® API-I a créé un wrapper Python pour l'API REST
J'ai créé un package pour filtrer les séries chronologiques avec python
Recommandation de django, wagtail ~ Pourquoi développer un site web avec python ~
[VSCode] J'ai créé un extrait d'utilisateur pour Python print f-string
Créer un compte enfant de connect with Stripe en Python
J'ai essayé de créer LINE-bot avec Python + Flask + ngrok + LINE Messaging API
Expérimentez pour créer un PDF indépendant pour Kindle avec Python
J'ai créé une application de livre simple avec python + Flask ~ Introduction ~