Création d'un BOT «Présentation non officielle du produit remis à neuf par Apple» avec l'API de messagerie LINE (v2) + API Gateway + lambda (python)

introduction

Bot Crawler Advent Calendar 2016 probablement parce que j'ai participé au Crawler / Web Scraping Advent Calendar 2016 J'ai été invité à (/ advent-calendar / 2016 / bot), alors j'ai décidé d'écrire quelque chose, alors j'ai fait un LINE BOT avec un sentiment que j'ai laissé derrière en 2016.

Quel genre de BOT

J'ai créé un BOT pour présenter les produits reconditionnés d'Apple.

LINE_developers.png

Il présente les caractéristiques suivantes.

IMG_2687.PNG

Si vous avez la gentillesse d'essayer de l'utiliser, veuillez essayer "Ajouter un ami" à partir du code QR ci-dessous. QRコード.png

Implémentation de lambda (python)

Le code final ressemble à ceci:

from __future__ import print_function
import requests
import json
import os
import boto3
import random

print('Loading function')

LINE_API_ENDPOINT = 'https://api.line.me/v2/bot/message/reply'

LINE_API_HEADERS = {
    'Authorization': 'Bearer ' + os.environ['LINE_CHANNEL_ACCESS_TOKEN'],
    'Content-type': 'application/json'
}


def lambda_handler(event, context):

    for event in event['events']:
        reply_token = event['replyToken']
        message = event['message']

        payload = {
            'replyToken': reply_token,
            'messages': []
        }

        items = get_items_by_keyword(message['text'])
        if len(items) == 0:
            payload['messages'].append({
                'type': 'text', 'text': message['text']
            })
        else:
            item = items[0]
            payload['messages'].append({
                'type': 'text', 'text': item['title'] + item['price'] + item['link']
            })

        response = requests.post(LINE_API_ENDPOINT, headers=LINE_API_HEADERS, data=json.dumps(payload))
        print(response.status_code)


def get_items_by_keyword(keyword=None):

    key = 'items.json'
    s3 = boto3.client('s3')
    response = s3.get_object(Bucket='apple-refurbished', Key=key)
    items = json.load(response['Body'])

    result = []
    for item in items:
        if item['title'].find(keyword) != -1:
            result.append(item)

    random.shuffle(result)
    return result

Messageing API -> Reply Message Définissez le point de terminaison, l'en-tête, etc. en vous référant à la Référence API.

Jeton d'accès au canal obtenu à partir de la variable d'environnement

Le jeton d'accès au canal est défini comme une variable d'environnement à partir de l'écran des paramètres Lambda.

Lambda_Management_Console.png

Puisque requests n'est pas installé, il est fourni avec le fichier ZIP et téléchargé.

Installez requests directement dans le répertoire du projet.

$ cd /path/to/project
$ pip install requests -t .

L'arborescence des répertoires ressemble à ceci:

.
├── lambda_function.py
├── requests
│   ├── __init__.py
│   ├── ...
└── requests-2.12.4.dist-info
    ├── ...

Compressez le code source et les bibliothèques externes requises dans un fichier ZIP et téléchargez-le depuis la console Web AWS Lambda.

Référence) Créer un package de déploiement (Python) --AWS Lambda

Le résultat de l'exploration est enregistré séparément dans S3 au format JSON.

Le résultat de l'exploration de l'URL suivante doit être enregistré régulièrement dans S3 au format JSON et le fichier JSON doit être lu à partir de la fonction lambda.

en conclusion

Je ne pense pas que ce soit possible avec cette histoire, mais si vous avez de bonnes idées, j'aimerais les mettre en œuvre et les inscrire dans LINE BOT AWARDS. ..

À bientôt.

Recommended Posts

Création d'un BOT «Présentation non officielle du produit remis à neuf par Apple» avec l'API de messagerie LINE (v2) + API Gateway + lambda (python)
LINE BOT avec Python + AWS Lambda + API Gateway
[LINE Messaging API] Créer un BOT de retour de perroquet avec Python
J'ai essayé de créer LINE-bot avec Python + Flask + ngrok + LINE Messaging API
[LINE Messaging API] Créez un BOT qui se connecte à quelqu'un avec Python
J'ai essayé de créer un LINE BOT "Sakurai-san" avec API Gateway + Lambda
Essayez d'implémenter un robot Cisco Spark avec AWS Lambda + Amazon API Gateway (Python)
J'ai essayé de faire LINE BOT avec Python et Heroku
Prenez rapidement une chaîne de requête avec API Gateway-> Lambda (Python)
[API LINE Messaging] Émettre un jeton d'accès au canal v2.1 en Python
Créez rapidement une API avec Python, lambda et API Gateway à l'aide d'AWS SAM
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
J'ai créé un bot Twitter avec Go x Qiita API x Lambda
J'ai essayé ChatOps avec Slack x API Gateway x Lambda (Python) x RDS
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
[AWS] Créer une API avec API Gateway + Lambda
Python appelant l'API Google Cloud Vision depuis LINE BOT via AWS Lambda
Comment créer un bot LINE à intelligence artificielle avec l'API de messagerie Flask + LINE
Client API Slack simple réalisé avec Python
API de reconnaissance faciale sans serveur conçue avec Python
API REST facile avec API Gateway / Lambda / DynamoDB
Système d'aide à la décision pour les personnes âgées réalisé avec LINE Messaging API + Serverless Framework
[Python] Une histoire sur la création d'un bot LINE avec une fonction humaine pratique sans utiliser Salesforce [API de messagerie]
J'ai fait un robot de remplacement de tampon avec une ligne
[AWS SAM] Créer une API avec DynamoDB + Lambda + API Gateway
Afficher les images sur S3 avec API Gateway + Lambda
Créer un LINE BOT avec Minette pour Python
J'ai créé un Bot LINE avec Serverless Framework!
[AWS] Essayez de tracer API Gateway + Lambda avec X-Ray
Bot LINE sans serveur conçu avec IBM Cloud Functions
Version Amazon API Gateway et AWS Lambda Python
Made Mattermost Bot avec Python (+ Flask)
Divers mémorandums lors de l'utilisation du sdk de l'API de messagerie LINE avec Python (2.7.9) + Google App Engine