Le produit fini ressemble à ceci. Il prend également en charge les noms de lieux dont vous n'avez jamais entendu parler. S'il n'y a pas de déversement dans le nom du lieu → Geocoder → Dark Sky, il sera affiché. Personnellement, je veux toujours vérifier Vostok Base.
Page Qiita référencée, procédure d'acquisition de compte, etc. Nous ajouterons progressivement des informations telles que le déploiement sur Heroku.
À propos de l'environnement, etc. ・ Windows10 ・ Python 3.7.5 ・ Heroku ・ Git ・ Compte développeur de ligne ・ API Darksky
Créé 4 fichiers Procfile requirements.txt runtime.txt python:main.py
web: python main.py
requirements.txt
Flask==1.1.1
line-bot-sdk==1.16.0
geocoder==1.38.1
runtime.txt
python-3.7.5
main.py
from flask import Flask, request, abort
import os
#Essayez ci-dessous
#import time
import requests
import geocoder
#import tweepy
#Essayez ci-dessus
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
app = Flask(__name__)
#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.route("/")
def hello_world():
return "hello world!"
@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'
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
#0327 ajouté
place = event.message.text
ret = geocoder.osm(place, timeout=5.0)
#Supprimez les parenthèses inutiles des géodonnées acquises pour les publier dans darksky
locate = str(ret.latlng)
locate2 = locate.replace('[','')
locate3 = locate2.replace(']','')
#Définissez l'emplacement d'acquisition souhaité en degrés Celsius en spécifiant l'unité SI pour post url0
url0='?units=si'
url1='https://api.darksky.net/forecast/*API_KEY*/'
url2=url1 + locate3 + url0
#Obtenez au format JSON
data=requests.get(url2).json()
data2=data['currently']['temperature']
word=str(data2)
word += "℃ Mort"
#Ajout de l'affichage de la latitude et de la longitude dans les deux lignes suivantes 2020_04_11
word += "\n\n latitude et longitude\n"
word = word + locate
#0327
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=word))
#0327 TextSendMessage(text=event.message.text))
if __name__ == "__main__":
# app.run()
port = int(os.getenv("PORT"))
app.run(host="0.0.0.0", port=port)
Les erreurs, etc. n'ont pas été traitées. Faisons-le bientôt ...
Information en avril 2020 DarkSky a été acquis par Apple et les nouvelles API ne sont plus acceptées. Le service sera jusqu'à la fin de 2021 (pleurs) Il sera nécessaire de vérifier si l'API OpenWetherMap peut être utilisée comme alternative.
Recommended Posts