【Python】LINE으로 지명 입력하면 현재의 기온을 가르쳐 주는 bot를 만들어 보았다
들은 적이 없는 지명등에도 대응하고 있습니다.
지명 → Geocoder → DarkSky로 쏟아지지 않으면 표시됩니다.
개인적으로 보스토크 기지는 항상 확인하고 싶습니다.
참조한 Qiita의 페이지, 계정 등의 취득 순서,
Heroku에의 배포 등 서서히 보필해 갑니다.
환경 등에 대해
・Windows10
· 파이썬 3.7.5
・Heroku
· Git
· 라인 개발자 계정
· Darksky API
작성한 파일은 4개
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
#以下おためし
#import time
import requests
import geocoder
#import tweepy
#以上おためし
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
app = Flask(__name__)
#環境変数取得
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追加
place = event.message.text
ret = geocoder.osm(place, timeout=5.0)
#darkskyにpostするため取得ジオデータから不要なカッコを削除
locate = str(ret.latlng)
locate2 = locate.replace('[','')
locate3 = locate2.replace(']','')
#取得希望地をpost url0はSI単位指定で摂氏にする
url0='?units=si'
url1='https://api.darksky.net/forecast/*API_KEY*/'
url2=url1 + locate3 + url0
#JSON形式で取得
data=requests.get(url2).json()
data2=data['currently']['temperature']
word=str(data2)
word += " ℃ デス"
#以下2行で緯度経度の表示追加 2020_04_11
word += "\n\n緯度経度は\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)
에러 등에 대해서는 미처리입니다.
그 가자.
2020년 4월 시점의 정보
DarkSky는 Apple에 인수되어 API의 신규 접수는 종료.
서비스도 2021년 말까지라는 것(울음)
OpenWetherMap의 API를 대체로 사용할 수 있는지 앞으로 중요한 검증.
Reference
이 문제에 관하여(【Python】LINE으로 지명 입력하면 현재의 기온을 가르쳐 주는 bot를 만들어 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/BUN-chan/items/607f28d176a5eeecdb0f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)