def recommend(form): ing = form['ing'].value if 'ing' in form else "" num = form['num'].value if 'num' in form else "" rec = form['rec'].value if 'rec' in form else "" # レシピを出力 print('Content-type: text/html\nAccess-Control-Allow-Origin: *\n') cdb = coquadb.CoquaDB('coqua.db') # cdb.execute('SELECT recipe_id, converted FROM ingredients WHERE unit = "%s" ORDER BY converted DESC' % ing) result = [list(j) for j in zip(*cdb.fetchAll())] if result == []: print('不正な入力') return try: float(num) except ValueError: print('材料の量は数値で入力してください.') return if float(num) <= 0: print('材料の量は0より大きい値で入力してください.') return if not rec.isdigit() or int(rec) <= 0: print('レシピの数は1以上の整数で入力してください.') return # cdb.execute('SELECT DISTINCT unit FROM ingredients WHERE unit GLOB "[ア-ン]*"') inglst = [x[0] for x in cdb.fetchAll()] if int(rec) > 1: t = ck.single_limited_greedy_solver(float(num), len(result[0]), int(rec), result[1], result[1], result[0]) else: t = ck.single_greedy_solver(float(num), len(result[0]), result[1], result[1], result[0]) print('<div class = "cont">') if t == []: print('何もヒットしませんでした.') for l in t: tmp = [] for x in l: cdb.execute('SELECT recipe_id,name,thumbnail FROM infos WHERE recipe_id = %s' % x) tmp.append(cdb.fetch()) for x in tmp: print('<a href = https://cookpad.com/recipe/%s>%s</a><br>' % (x[0],x[1])) for x in tmp: print('<img src = "https://img.cpcdn.com/recipes/%s/100x141c/%s" height = 141px width = 100px>' % (x[0],x[2])) print("<br>") cdb.close()
def print_cont(page, limit, txt, checklst, sortrule, orderrule): lst = txt.split() Alst = [x for x in lst if x[0] != '-'] Nlst = [x[1:] for x in lst if x[0] == '-'] cdb = coquadb.CoquaDB('coqua.db') # 検索件数と結果 offset = (page - 1) * limit count, data = cdb.ingredients_search(Alst, Nlst, sortrule, orderrule, checklst, limit, offset) page_switch = make_page(page, math.floor(1+(count-1)/limit)) page_recipe = make_link(data) print(F"<!-- \n{cdb.last}\n -->\n") if txt != "": print(F'「{txt}」\n') print('' + str(count) + '件の検索結果\n') print(page_switch) print('<div class = "cont">') print(page_recipe) print('</div>') print(page_switch) cdb.close()
# 検索語のカタカナ読みを新単位とする行を # 換算値の降順に整列した二次元配列を得る関数 def get_sorted_list(cdb, yomi): cdb.execute('SELECT recipe_id, converted ' 'FROM ingredients ' F'WHERE unit = "{yomi}" ' 'ORDER BY converted DESC;') return transpose(cdb.fetchAll()) if __name__ == '__main__': args = sys.argv cdb = coquadb.CoquaDB('coqua.db') mecab = cdb.mecab yomi = mecab.parse(args[1]).replace('\n', '') capacity = float(input('何個を消費しますか?:')) limited = input('いくつかのレシピの組み合わせとしてして検索しますか?(y/n):') result = get_sorted_list(cdb, yomi) # print(result) if (limited == 'y'): num_recipes = int(input('いくつのレシピを組み合わせますか?:')) t = ck.single_limited_greedy_solver(capacity, len(result[0]), num_recipes, result[1], result[1], result[0]) else: t = ck.single_greedy_solver(capacity, len(result[0]), result[1],
import coquadb cdb = coquadb.CoquaDB(':memory:') print(cdb.decode_query(cdb.query_cond(['あ','い'],['う','え'],[1,2])))