Même si je suis ingénieur, je pense toujours aux vêtements parce que je sors, mais je fais souvent des erreurs parce que je suis une personne qui ne vérifie pas les prévisions météorologiques. Par conséquent, je voudrais enseigner à LINE bot la météo (température). Nous vous recommandons de commencer par créer et tester avec un retour de perroquet, puis de faire le codage proprement dit.
Cet article est comme un dossier de travail et un mémorandum. Si vous souhaitez lire des documents détaillés et faciles à comprendre, veuillez suivre le lien ci-dessous. [J'ai créé LINE BOT avec Python + Heroku](https://qiita.com/shimajiri/items/cf7ccf69d184fdb2fb26#flask%E3%81%A8line-bot-sdk%E3%82%92%E3%82%A4 % E3% 83% B3% E3% 82% B9% E3% 83% 88% E3% 83% BC% E3% 83% AB) J'ai commencé LINE Bot avec Python (chinois froid) [Partie 1] J'ai commencé LINE Bot avec Python (chinois froid) [Partie 2]
Tout d'abord, inscrivez-vous auprès des développeurs LINE. L'inscription est facile. https://developers.line.me/ja/
Après vous être enregistré auprès des développeurs LINE, créez un fournisseur. Pour l'anglais, changez la langue en bas à droite. Créez une chaîne (application) dans le fournisseur. Je pense que c'est difficile à comprendre car l'écran continue
est. Cela se terminera bientôt.
Pour utiliser l'API
Passons aux paramètres Heroku. Commençons par enregistrer un compte. Ensuite, installez une interface de ligne de commande appelée Heroku CLI. Heroku CLI : https://devcenter.heroku.com/articles/heroku-cli#download-and-install
À l'invite
$heroku login
Lorsque vous exécutez, vous serez invité à entrer une clé, alors entrez quelque chose. Ensuite, vous pouvez vous connecter via le navigateur.
Vous pouvez créer une nouvelle application avec $ heroku create app name
. Veuillez noter que la barre de soulignement «_» ne peut pas être utilisée.
Définissez les variables d'environnement. La méthode ici semble être différente pour chaque personne, mais je la règle de la même manière que le site de référence.
Définissons les deux chaînes de caractères que nous avons notées plus tôt.
$ heroku config: set YOUR_CHANNEL_ACCESS_TOKEN =" Channel Access Token "--app App Name
$ heroku config: set YOUR_CHANNEL_SECRET =" Channel Secret "--app App Name
Revenez à la console LINE Developers et définissez l'URL du webhook.
URL du webhook: https: // nom de l'application.herokuapp.com / callback
Appuyez sur Mettre à jour et configurez pour utiliser les webhooks et vous avez terminé.
https://github.com/line/line-bot-sdk-java/tree/master/sample-spring-boot-echo#step-2 Vous pouvez déployer EchoBot en appuyant sur [** Deploy to Heroku **] ici et en créant une application à partir de celui-ci.
・ Paramètres du bot dans les développeurs LINE ・ Paramètres Heroku ・ Coopération entre les deux Est complet. Commencez à coder à partir d'ici.
Cette fois, j'utiliserai principalement flask
et line-bot-sdk
.
pip install flask line-bot-sdk
Dans mon environnement
flask : 1.1.1
line-bot-sdk : 1.16.0
est.
De plus, la bibliothèque de scraping utilise: soupsieve==2.0 urllib3==1.25.8 beautifulsoup4
Cela peut être n'importe où, mais nous vous recommandons de créer un répertoire pour votre projet. Constitution: line_bot (répertoire de travail) ├ main.py ├ scrape.py ├ Procfile ├ runtime.txt └ requirements.txt
①main.py C'est le corps principal. Si vous souhaitez tester avec le retour de perroquet [ici](https://qiita.com/shimajiri/items/cf7ccf69d184fdb2fb26#flask%E3%81%A8line-bot-sdk%E3%82%92%E3%82%A4%E3 % 83% B3% E3% 82% B9% E3% 83% 88% E3% 83% BC% E3% 83% AB) sera utile.
main.py
#Importez ce dont vous avez besoin
from flask import Flask, request, abort
import os
import scrape as sc
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
#Obtenez des événements sur LINE
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
app = Flask(__name__)
#Obtenir des variables d'environnement
YOUR_CHANNEL_ACCESS_TOKEN = os.environ["LINE_BOT_CHANNEL_TOKEN"]
YOUR_CHANNEL_SECRET = os.environ["LINE_BOT_CHANNEL_SECRET"]
line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)
#Exécuté à l'ouverture du corps de l'application
@app.route("/")
def hello_world():
return "hello world!"
#/Traitement lors de l'accès au lien de rappel. Pour les webhooks.
@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:
abort(400)
return 'OK'
#Événement lors de la réception d'un message
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
'''
#line_bot_réponse API_événement avec méthode de message.message.text(Message utilisateur)Répondre
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=event.message.text))
'''
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=sc.getWeather())
)
if __name__ == "__main__":
# app.run()
port = int(os.getenv("PORT"))
app.run(host="0.0.0.0", port=port)
②scrape.py Grattage des informations météorologiques. J'avais l'intention de l'écrire moi-même, mais pour le moment Cliquez ici → https://qiita.com/RIRO/items/1b67b0418b08a52de0d6 J'ai modifié le code de. Merci beaucoup.
scrape.py
#Importer la bibliothèque
import requests
from bs4 import BeautifulSoup
def getWeather():
#tenki.URL de la page de la zone cible de jp (cette fois, Chofu City, Tokyo)
url = 'https://tenki.jp/forecast/3/16/4410/13208/'
#Requête HTTP
r = requests.get(url)
#Décrivez ce qui suit dans le cas d'un environnement proxy
"""
proxies = {
"http":"http://proxy.xxx.xxx.xxx:8080",
"https":"http://proxy.xxx.xxx.xxx:8080"
}
r = requests.get(url, proxies=proxies)
"""
#Analyse HTML
bsObj = BeautifulSoup(r.content, "html.parser")
#Obtenez la météo du jour
today = bsObj.find(class_="today-weather")
weather = today.p.string
#Une collection d'informations sur la température
temp=today.div.find(class_="date-value-wrap")
#Obtenez la température
temp=temp.find_all("dd")
temp_max = temp[0].span.string #Température la plus élevée
temp_max_diff=temp[1].string #Par rapport à la veille de la température la plus élevée
temp_min = temp[2].span.string #Température la plus basse
temp_min_diff=temp[3].string #Par rapport à la veille de la température la plus basse
#Je veux le voir bouger pour le moment, donc je le renvoie en connectant la météo et la température.
return weather+temp_max+temp_min
③Procfile Décrit comment exécuter le programme.
web: python main.py
④runtime.txt Un fichier texte qui décrit la version Python. Puisqu'une erreur s'est produite dans 3.7.7, je l'ai mis à 3.6.10. Heroku n'est-il pas compatible avec la version 3.7?
runtime.txt
python-3.6.10
⑤ requirements.txt Un fichier texte qui décrit les bibliothèques à installer.
requirements.txt
Flask==1.1.1
line-bot-sdk==1.16.0
soupsieve==2.0
urllib3==1.25.8
beautifulsoup4
Il y a «scrape.py» parce qu'il gratte les informations météorologiques. EchoBot (retour du perroquet) etc. va bien avec 4 autres.
//Créer un fichier initial pour git
git init
//Configurer un référentiel distant qui se connecte à un référentiel local
heroku git:remote -a (Nom de l'application décidé par vous-même)
//Indexer tous les fichiers modifiés
git add .
//Écrivez le fichier modifié dans le référentiel ("inital commit"Est un commentaire, donc tout va bien)
git commit -m "inital commit"
//Pousser un fichier créé localement dans heroku
git push heroku master
J'ai mal orthographié beautifulsoup4
dans requirements.txt
et j'ai obtenu une erreur.
Je pensais que la spécification de version était mauvaise et j'ai essayé de changer la version, mais le nom de la bibliothèque était faux ()
Vérifiez votre activité sur le tableau de bord Heroku. Si cela ressemble à l'image, c'est réussi.
J'ai utilisé cette partie en copiant l'échantillon. J'obtiens l'erreur «Le serveur bot a renvoyé un code d'état HTTP autre que 200». Cependant, BOT semble fonctionner normalement, donc je l'ai ignoré.
Ajoutons un ami avec QR sur l'écran de gestion du BOT et envoyons un message. Si la réponse météo (ou le retour du perroquet) réussit, elle est réussie.
Next Actuellement, j'envoie simplement la météo et la température sous forme de chaînes
--Format --Ajout de paramètres (Région et transmission périodique)
J'aimerais faire quelque chose comme ça. Il y a d'autres projets et études, donc je vais mettre à jour lentement. Merci à tous les articles de référence.
Recommended Posts