LoginSignup
9
8

More than 5 years have passed since last update.

気温を通知してくれる slack ボットを作ってみた

Last updated at Posted at 2016-07-26

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レポジトリ

9
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8