Пример #1
0
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()
Пример #2
0
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()
Пример #3
0
# 検索語のカタカナ読みを新単位とする行を
# 換算値の降順に整列した二次元配列を得る関数


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],
Пример #4
0
import coquadb
cdb = coquadb.CoquaDB(':memory:')
print(cdb.decode_query(cdb.query_cond(['あ','い'],['う','え'],[1,2])))