[PYTHON] Jusqu'à ce que Django retourne quelque chose avec un robot de ligne!

Créez un robot en ligne avec Django!

Tout d'abord, connectez-vous avec votre compte de ligne pour obtenir un compte de développeur de ligne image.png

Créez un nouveau fournisseur à partir de la page d'accueil de la console en haut à gauche line.png

Sélectionnez créer un nouveau canal à partir du fournisseur et le type de canal est l'API de messagerie.

Après cela, effectuez chaque réglage. À ce stade, vous pouvez enregistrer votre propre bot de ligne avec le code qr. IMG_0891.jpg

Cette fois, j'appuie sur cette réservation de réunion et je souhaite que l'utilisateur envoie automatiquement la réservation et lui retourne quelque chose

Tout d'abord, connectez-vous ici et sélectionnez le compte que vous avez créé précédemment https://www.linebiz.com/jp/login/ Sélectionnez le menu riche dans le menu de gauche Cliquez sur le bouton Créer en haut à droite image.png Les paramètres d'affichage sont OK par défaut, sauf pour le titre image.png

Pour les paramètres de contenu ci-dessous, sélectionnez un modèle et collez une image, ou créez vous-même une image avec du texte. Si vous pouvez le faire, définissez le type sur texte dans l'action et faites une réservation. Si vous appuyez sur le menu que vous avez enregistré et réellement créé sur votre smartphone, vous recevrez un message indiquant que vous avez effectué une réservation.

Renvoyer un message en utilisant avec Django

Maintenant que j'ai fait cela, j'aimerais revenir sur le message de réservation envoyé par Django.

Cette fois, installez django en utilisant anaconda, qui est un système de gestion de version / package de python. https://www.anaconda.com/products/individual Si vous ne l'avez pas mis, veuillez le télécharger depuis le haut de ↑ image.png Quand anaconda est installé, lancez le navigateur anaconda Sélectionnez des environnements Sélectionnez créer en bas à gauche Nommez-le django37 etc. et sélectionnez python et la version 3.7 Sélectionnez créer en bas à droite pour terminer la construction de l'environnement Dans cet état, django n'est pas encore installé, alors ouvrez le terminal

$ conda activate django37

Lancez l'environnement avec ensuite

$ conda install django37

Installez Django avec Vous disposez maintenant d'un environnement.

Puis d'abord

$ django-admin startproject reception_line_bot

Créez un projet avec.

reception_line_bot/
    manage.py
    reception_line_bot/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

Je pense que je l'ai fait comme ça. Ensuite, créez une application.

$cd reception_line_bot

Après avoir entré reception_line_bot avec,

$ python manage.py startapp bot 

Puis

bot/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

Je pense que c'est devenu. Ensuite, modifiez reception_line_bot / urls.py avec un éditeur.

urls.py


"""reception_line_bot URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.0/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
import bot.views
urlpatterns = [
    path('admin/', admin.site.urls),

]

Je pense que c'est le cas, mais dans urlpatterns, spécifiez quelle fonction dans quel fichier la requête de bot de ligne reçue par django doit être envoyée.

Alors cette fois

urls.py


import bot.views
urlpatterns = [
#path('admin/', admin.site.urls),
 path('', bot.views.reception),
]

ça ira. la réception est une fonction que nous écrirons dans views.py.

Le secret de canal et le jeton d'accès émis lorsque j'ai créé le bot de ligne avant d'écrire le code dans views.py sont mauvais si je l'écris directement dans le code, je voudrais donc le rendre disponible dans views.py via json. Créez donc setting.json sous line_reception_bot en haut et image.png Sélectionnez un canal parmi les fournisseurs, émettez un jeton d'accès en haut de l'API de messagerie, puis copiez et collez. prochain image.png Obtenez le secret de canal dans les paramètres de base à côté de l'API de messagerie. Je vais copier ces deux dans le setting.json que j'ai fait plus tôt

setting.json


{

"LINE":{

"channel_secret":"fakfkajpdpaida132941",

"access_token":"a3nm7yOY7IoUt8blZ6QqK6RShadfsajdjfadfljfafdsdjsdfailfajjpqjpoejpqjpfjpqejiepqwifqpjdjidcS9yEBGieq+VMQs0EL+mQDtwdB04daft89/aad1O/w1cDnyilFU="

 }

}

Comme ça (channel_secret et access_token ont été modifiés de manière appropriée) Ensuite, ouvrez views.py et écrivez du code pour envoyer quelque chose au message envoyé par l'utilisateur.

views.py


from django.views.generic import TemplateView
from django.shortcuts import render
from django.http.response import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json
import urllib.request
from reception_line_bot.settings import BASE_DIR

# Create your views here.



@csrf_exempt

def reception(request):
    json_open = open('setting.json', 'r')
    json_load = json.load(json_open)
    channel_secret = json_load['LINE']['channel_secret']
    access = json_load['LINE']['access_token']
    request_body = request.body
    data = confirm_json_loads(request_body)
    request_body = request.body
    body = request.body.decode('utf-8')
    print(body)
    reply_token = data["events"][0]["replyToken"]
    reply_message(reply_token,access)
    return JsonResponse({"message":"OK"})

def confirm_json_loads(body:str)->dict:
    """
    json_Vérifiez si les charges fonctionnent

    Args:
        body str:
request json string
    
    Return:
        dict:
            Seccess:json.loads(body)Valeur de retour de
            Error:Message d'échec de connexion
            
        
    """
    try:
        return json.loads(body)
    except Exception as e:
        print("error")
        message = JsonResponse({'message': 'Login failure.'}, status=403)
        return message

def reply_message(token:str,access)->None:
    return False
    """
Envoyer un message de réponse à l'utilisateur

    Args:
        token str:
jeton de ligne

        message str:
            select_Le message renvoyé par la fonction de message
        
        user_id str:
ID utilisateur de la ligne de l'expéditeur du message

    """

    url = 'https://api.line.me/v2/bot/message/reply'
    print(url)
    data = {
        'replyToken': token,
        'messages':[
            {
                'type': 'text',
                'text': "hello world"
            },
        ]
    }
    print(f"data{data}")
    headers = {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer'+" "+access
    }
    print(f"headers:{headers}")
    req = urllib.request.Request(url, json.dumps(data).encode(), headers)
    print(req)
    with urllib.request.urlopen(req) as res:
        body = res.read()

C'est tout ce qu'on peut en dire.

Recommended Posts

Jusqu'à ce que Django retourne quelque chose avec un robot de ligne!
Créer un bot LINE avec Django
J'ai fait un robot de remplacement de tampon avec une ligne
J'ai créé un Bot LINE avec Serverless Framework!
[AWS] J'ai créé un BOT de rappel avec LINE WORKS
J'ai créé un bot de livre de compte de ménage avec LINE Bot
J'ai essayé de faire LINE BOT avec Python et Heroku
[AWS] J'ai créé un BOT de rappel avec LINE WORKS (implémentation)
[Python] [LINE Bot] Créer un robot LINE de retour de perroquet
J'ai fait une application WEB avec Django
J'ai essayé de créer un LINE BOT "Sakurai-san" avec API Gateway + Lambda
Créer un LINE BOT avec Minette pour Python
Démarrez Django dans un environnement virtuel à l'aide de Pipenv
Créez un environnement Django avec Vagrant en 5 minutes
Configurer un module avec plusieurs fichiers dans Django
Jusqu'à ce que vous créiez une nouvelle application dans Django
Créer un bot LINE WORKS avec Amazon Lex
Made Mattermost Bot avec Python (+ Flask)
En Python, j'ai créé un LINE Bot qui envoie des informations sur le pollen à partir des informations de localisation.
J'ai fait un Twitter BOT avec GAE (python) (avec une référence)
Faire un bot d'analyse morphologique de manière lâche avec LINE + Flask
Je veux faire la transition avec un bouton sur le ballon
Créer un robot LINE de retour de perroquet avec AWS Cloud9
Je veux travailler avec un robot en python.
Sortie d'une chaîne avec des sauts de ligne dans PyYAML
Impossible de manipuler l'iframe dans la page avec Selenium
[Super facile] Faisons un LINE BOT avec Python.
[LINE Messaging API] Créer un BOT de retour de perroquet avec Python
L'explication la plus simple au monde sur la création de LINE BOT (2) [Préparation de l'application Bot dans un environnement local avec Django de Python]
Essayez d'exécuter python dans l'environnement Django créé avec pipenv
J'ai fait un jeu de frappe simple avec tkinter de Python
[En une seule ligne] Visualisez comme une pelouse avec seulement des pandas
Créez un bot LINE avec GoogleAppEngine / py. Version nue simple
Créez une application d'apprentissage automatique avec ABEJA Platform + LINE Bot
Je veux créer un éditeur de blog avec l'administrateur de django
Créer une page d'accueil avec django
J'ai fait une commande pour générer un commentaire pour une table dans Django
Créer un LINE BOT (chat)
Je souhaite envoyer un message de Python à LINE Bot
Je n'arrive pas à me connecter à la page d'administration avec Django 3
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python
Création du LINE BOT Parrot Return
J'ai fait un robot discord
Je veux connaître la météo avec LINE bot avec Heroku + Python
Créez un fichier temporaire avec django sous forme de zip et renvoyez-le
J'ai créé un bot Twitter avec Go x Qiita API x Lambda
[LINE Messaging API] Créez un BOT qui se connecte à quelqu'un avec Python
[Introduction] Je veux créer un robot Mastodon avec Python! 【Débutants】
J'ai créé un environnement de développement pour Django 3.0 avec Docker, Docker-compose, Poetry
recharger dans le shell django avec ipython
J'obtiens un UnicodeDecodeError avec mecab-python3
J'ai fait un wikipedia gacha bot
J'obtiens une KeyError dans pyclustering.xmeans
Déployer l'application Django avec Docker
J'ai fait une loterie avec Python.
Django Tips-Créez un site de classement avec Django-
Créer une application Web avec Django
Créer un filtre avec un modèle django