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}