ATOKダイレクトから、カロリーAPIにアクセスするプログラム。ATOKで食べ物の名前を入力すると、そのカロリーを表示するというものを Python で書いたプログラム。

以下を「calorie.py」という名前で保存します。

#! /usr/bin/env python
# coding:utf-8

import urllib
from xml.dom import minidom, Node

# 設定
apiurl = 'http://soogle.ddo.jp/calapi/api?name=%s&output=xml'
proxy  = {} #proxy = {'http':'http://proxy.example.com:8080'}

# APIにアクセスしてカロリーを取得する
def get_calorie( food ):
    # Calorie API にアクセスする
    food_enc = urllib.quote(food.encode('utf-8'))
    url = apiurl%food_enc
    h   = urllib.urlopen(url, proxies=proxy)
    xml = h.read()
    # XML をパースする
    result = []
    dom = minidom.parseString(xml)
    for item in dom.getElementsByTagName("item"):
        menu_node = item.getElementsByTagName("menuName")
        kcal_node = item.getElementsByTagName("kcalMiddle")
        menu = get_text_from_nodelist(menu_node)
        kcal = get_text_from_nodelist(kcal_node)
        result.append(u"%s (%s kcal)"%(menu,kcal))
    return result

# XML のノードからテキストを取り出す
def get_text_from_nodelist(nodelist):
    s = ""
    for node in nodelist:
        if node.nodeType == Node.TEXT_NODE:
            s += node.wholeText
        if node.nodeType == Node.ELEMENT_NODE:
            s += get_text_from_nodelist(node.childNodes)
    return s

def atok_plugin_run_process( request_data ):
  # 入力された文字列
  input_str = request_data['composition_string']
  # 変換候補として出力するハッシュの配列変数
  kouho     = [];
  # APIを実行する
  result = get_calorie( input_str )
  for i in result:
      kouho.append({"hyoki": i})
  return {'candidate' : kouho}