kisyo.py

気象情報システムからデータを取得してcosmにPUTする。

#!/usr/bin/env python
# coding:utf-8
# kisyo.py 2012.9.30
import logging
import webapp2
from google.appengine.api import urlfetch
from xml.dom import minidom
from collections import OrderedDict

kisyo_url = "http://.jp/kisyo/data_xml/present_001.xml" #←設定する
feed_id = "123456" #←設定する
apikey = "1234567890abcdefghijk" #←設定する
api_url = "http://api.cosm.com"

def w2dir(s):
    dict = {
         u"北北東" : "01",
         u"北東"   : "02",
         u"東北東" : "03",
         u"東"     : "04",
         u"東南東" : "05",
         u"南東"   : "06",
         u"南南東" : "07",
         u"南"     : "08",
         u"南南西" : "09",
         u"南西"   : "10",
         u"西南西" : "11",
         u"西"     : "12",
         u"西北西" : "13",
         u"北西"   : "14",
         u"北北西" : "15",
         u"北"     : "16"
    }
    if s in dict:
        return dict[s]
    return s

class MainHandler(webapp2.RequestHandler):
    def get(self):
        result = urlfetch.fetch(kisyo_url)
        logging.info("%s %d" % (kisyo_url, result.status_code))
        if result.status_code != 200:
            self.response.out.write("status_code: %d" % result.status_code)
            return
        #logging.info(result.content)
        dom = minidom.parseString(result.content)
        dataset = OrderedDict()
        for data in dom.getElementsByTagName('dataset'):
            fld_id = data.getAttribute('fld_id')
            value = data.getAttribute('value')
            #logging.info("%s %s" % (fld_id,  value))
            dataset[fld_id] = w2dir(value)
        #logging.info(dataset)

        keys = ['avg_ws', 'avg_wd', 'max_ws', 'max_wd', 
                'temp', 'humid1', 'humid2', 'press1', 'press2',
                'rain_10min'
        ]
        
        payload = ""
        for k in keys:
            payload += "%s,%s\n" % (k, dataset[k])

        url = "%s/v2/feeds/%s.csv?_method=put" % (api_url, feed_id)
        headers={'X-ApiKey': apikey}
        result = urlfetch.fetch(url, payload, urlfetch.POST, headers)
        self.response.out.write("status_code: %d" % result.status_code)

app = webapp2.WSGIApplication([
('/cron/kisyo.*', MainHandler)
], debug=True)