Open Weather Mapのトークンを取得する
http://openweathermap.org/ にてアカウントを作成し、api_keys 画面にてAPI_KEYを取得する。
Slackのボットテスト用トークンを取得する
botのトークンの取得方法の説明は、slack の api マニュアルに譲る。
参考URL : https://api.slack.com/bot-users
プログラム例
今回のプログラムでは、緯度・経度を指定して、該当する地域の気温を取得している。
bot.py には、実際に気温を取得し、slackのチャンネルにつぶやく処理を記述している。
settings.py には、Open Weather Map、slackのトークンなどを設定している。
ディレクトリ構成
norths_weather_bot
├── bot.py
└── settings.py
bot.py
#/usr/bin/env python2.7
#-*- coding: utf-8 -*-
import json
import urllib
import urllib2
import settings
class Weather(object):
"""
"""
def __init__(self):
"""
"""
params = {'appid' : settings.OPEN_WETHER_APP_ID,
'lat' : settings.OPEN_WETHER_LAT,
'lon' : settings.OPEN_WETHER_LON,
'units' : settings.OPEN_WETHER_UNITS,
}
params = urllib.urlencode(params)
response = urllib2.urlopen(settings.OPEN_WETHER_URL + '?' + params)
self.json = json.loads(response.read())
def get_temp(self):
"""
"""
return {'max' : self.json['main']['temp_max'],
'min' : self.json['main']['temp_min'],
'now' : self.json['main']['temp'], }
class Bot(object):
"""
"""
def __init__(self):
"""
"""
self.set_serif()
def set_serif(self, serif=''):
"""
"""
self.serif = serif
def speak(self):
"""
"""
params = {'token' : settings.SLACK_TOKEN,
'channel': settings.SLACK_CHANNEL,
'text' : self.serif,}
params = urllib.urlencode(params)
req = urllib2.Request(settings.SLACK_URL)
req.add_header('Content-Type', 'application/x-www-form-urlencoded')
req.add_data(params)
res = urllib2.urlopen(req)
body = res.read()
if __name__ == "__main__":
"""
entry point
"""
temp = Weather().get_temp()
bot = Bot()
bot.set_serif('現在の気温 : {0}℃ , 最高気温 : {1}℃ , 最低気温 : {2}℃'.format(temp['now'], temp['max'], temp['min']))
bot.speak()
settings.py
#-*- coding: utf-8 -*-
OPEN_WETHER_URL = "" # API URL
OPEN_WETHER_APP_ID = "" # API KEY
OPEN_WETHER_LAT = "" # 緯度
OPEN_WETHER_LON = "" # 経度
OPEN_WETHER_UNITS = "" # 摂氏 か 絶対温度 かを指定。metricの場合は、摂氏となる。
SLACK_URL = "" # URL
SLACK_TOKEN = "" # トークン
SLACK_CHANNEL = "" # 投稿したいチャンネル
GITレポジトリ