地球観測データ取得-JaxaAPI Pythonスケッチ @wtoy.net 2015/5/24

#/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import os
import urllib2
import json
import getopt
#####################################################################
# jaxaの公開データ取得:
#
# jaxaAPIを使用するには、jaxaからAPI利用トークンを取得してください
# 以下のサイトから取得できます
#
#    http://www.satnavi.jaxa.jp/jaxa_api_competition/
#
#--------------------------------------------------------------------
# jaxaAPI のAPI利用トークン
#
apikey = "xxxxx_xxxx_"
#####################################################################
# 2012-05-18 打ち上げ:データは 2012-08-01〜前日
#
# https://joa.epi.bz/api/<物理量指定文字列>+ 'all' | 'avg'
#
# 物理量指定文字列 = prc,sst,ssw,smc,snd
#                  +-- 数値例
#                  |      +-- 単位
#   prc=日降水量    1.500[mm/day]
#   sst=海面水温   23.840[℃]
#   ssw=海面風速   10.94[m/s]
#   smc=土壌水分量 40.800[%]
#   snd=積雪深     26.400[cm]
#############################################################
# jaxaAPIをコール:json形式でデータを取得する
#
def get_jaxaAPIjson(kind='prc',t_str='all',dat='2012-08-01',lat='35.7',lon='139.7',range='0.1'):
    apiType = kind + t_str
    jaxa_url = 'https://joa.epi.bz/api/' + apiType + '?token='+apikey+'&date='+dat+'&lat='+lat+'&lon='+lon+'&range='+range+'&format=JSON'
    print jaxa_url
    try:
      #- リクエストヘッダーを付加して呼ぶ
      #req = urllib2.Request(jaxa_url)
      #req.add_header('Referer', 'http://www.python.org/')
      #req.add_header('User-Agent', 'Mozilla/5.0')
      #r = urllib2.urlopen(req)
      ###################################
      # 取得
      r = urllib2.urlopen(jaxa_url)
      #-
      row = r.read()
      #print 'row:',row
      r.close()
      jsonunits = row.split(os.linesep)
      #print jsonunits
      res = ""
      for unit in jsonunits:
        if not unit:
           contine
        obj = json.loads(unit)
        #print 'obj:',obj
        #
        # result='ok'でデータ有
        rtc = obj['result']
        print 'result',rtc
        ################################
        # 平均値 : -t avg の時
        if t_str == 'avg':
          for v in obj[kind]:
            print kind, v
        else:
          # 指定範囲全データ取得:メッシュデータ
          vals = obj['values']
          #print vals
          for v in vals:
            print 'lat:',v['lat'],'lon:',v['lon'],kind+':',v[kind]
    ##############################################################
    # エラー
    except urllib2.HTTPError, e:
      print e.code,e.reason
      #
      e_dic = e.read()
      if e.code != 404:
        print e_dic
      #########################
      #for k,v in e_dic.items():
      #  print k,v
   #
#########################################
#
if __name__ == '__main__':
    #
    # 起動パラメータの説明
    #
    #(1)物理量指定
    # -k prc|sst|ssw|smc|snd
    #   prc = 日降水量    1.500[mm/day]    ok
    #   sst = 海面水温   23.840[度]        errになる(データなし)
    #   ssw = 海面風速   10.94[m/s]        ok
    #   smc = 土壌水分量 40.800[%]         errになる(データなし)
    #   snd = 積雪深                       errになる
    #
    #(2)日付指定
    # -d YYYY-MM-DD
    #
    #(3)緯度指定
    # -n 30.0
    #
    #(4)経度指定
    # -e 130.0
    #
    #(5)レンジ指定
    # -r 0.1
    #
    #(6)取得方法
    # -t all | avg
    #    all = 指定レンジのメッシュデータ
    #    avg = allデータの平均値
    ##############################################################
    # 起動パラメータ処理
    g_options, g_args = getopt.getopt(sys.argv[1:],'k:d:e:n:r:t:')
    g_option_d = dict(g_options)    # 辞書化
    #################################
    # 標準パラメータのセット
    #
    d_str = '2012-08-01'
    lat   = '35.7'
    lon   = '139.7'
    range = '0.1'
    kind  = 'prc'
    t_str = 'all'
    #
    # 起動パラメータを反映
    #
    if g_option_d.has_key('-k'):
      kind = g_option_d['-k']
    if g_option_d.has_key('-d'):
     d_str = g_option_d['-d']
    if g_option_d.has_key('-e'):
      lat = g_option_d['-e']
    if g_option_d.has_key('-n'):
      lon = g_option_d['-n']
    if g_option_d.has_key('-r'):
      range = g_option_d['-r']
    if g_option_d.has_key('-t'):
      t_str = g_option_d['-t']
    #
    get_jaxaAPIjson(kind=kind,t_str=t_str,dat=d_str,lat=lat,lon=lon,range=range)
    #

∧ 戻る ∧