Кулинария
Модератор: immortal
-
- Сообщения: 1473
- Зарегистрирован: Сб окт 12, 2013 11:03 pm
- Благодарил (а): 49 раз
- Поблагодарили: 327 раз
Re: Кулинария
Есть вариант с наливом. Тысяч за 20
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Кулинария
где-то в стопке старых бумажек у меня даже есть структура модуля планирования меню на неделю с базой рецептов "дежурных" блюд. там суть сводилась к тому, что с помощью этого модуля можно (было бы) планировать, что готовить каждый день, с учётом (или без) имеющихся продуктов или с составлением списка покупок того, чего не хватает (связь с модулем Продукты). но руки так и не дошли...
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
- Amarok
- Сообщения: 1425
- Зарегистрирован: Пт дек 14, 2012 12:24 pm
- Откуда: Россия, Нижняя Тура
- Благодарил (а): 460 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: Кулинария
Хотелось бы такой модуль тоже)Amarok писал(а):Думаю должно быть примерно так:Dark_Veter писал(а):Я думаю сделать не особо сложно, опишите, как это должно работать. Мне пока в голову ничего интересного не пришло- Алиса, давай что-нибудь приготовим?
- Давай. Что?
- Пельмени.
Алиска роется в базе и выдает рецепты.
- 1) Пельмени по уральски. 2) Пельмени по сибирски. 3) Пельмени жареные
- Будем готовить №1
Алиса выдает рецепт №1
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
-
- Сообщения: 295
- Зарегистрирован: Вт апр 23, 2013 5:16 pm
- Откуда: Брянск
- Благодарил (а): 18 раз
- Поблагодарили: 94 раза
Re: Кулинария
Вот написал скрипт, правда его еще допиливать надо, но в целом работает.
Как использовать: Создаем примерно такой шаблон поведения
Затем вставляем в него следующий код:
Работать будет только при наличии интернета, т.к. парсит сайт http://www.edimdoma.ru/
И сразу вопросик Может кто подскажет, как программно открывать страницу на каком либо терминале? Можно бы было открывать страницу с рецептом при запросе.
Как использовать: Создаем примерно такой шаблон поведения
Код: Выделить всё
(Д|д)авай приготовим (.+)
Код: Выделить всё
$queryString = $matches[2];
/*
$findParams = array(
'aerogrill' => '22', // Рецепты для аэрогриля
'waffle' => '27', // Для вафельницы
'yoghurt' => '28', // Для йогуртиницы
'multivarka' => '25', //Рецепты для мультиварки
'steamer' => '15', //Для пароварки
'pressureCooker' => '46', //Для скороварки
'breadMaker' => '23', //Для хлебопечки
'fondue' => '24' //Рецепты фондю
);
*/
$findParams = array();
$recipeNumber = rand(0, 5);
$recipesList = findRecipes($queryString, $findParams);
if (!empty($recipesList)) {
$recipe = getRecipes($recipesList[$recipeNumber]['link']);
$recipe['link'] = $recipesList[$recipeNumber]['link'];
$recipe['name'] = $recipesList[$recipeNumber]['text'];
sayRecipe($recipe);
} else {
say('Ничего не найдено.');
}
function OpenRecipeURL($link) {
$rec=array();
$rec['EVENT_TYPE']='openurl'; // команда может быть ещё newwindow
$rec['WINDOW']='alice';
$rec['TERMINAL_TO']='*'; //здесь можно конкретный терминал указать
$rec['ADDED']=date('Y-m-d H:i:s');
$rec['EXPIRE']=date('Y-m-d H:i:s', time()+10);
$rec['DETAILS']=$link;
$rec['ID']=SQLInsert('events', $rec);
}
function sayRecipe($recipe) {
OpenRecipeURL($recipe['link']);
say($recipe['name']);
if (!empty($recipe['description'])) {
foreach ($recipe['description'] as $e) {
say($e);
}
}
$ingrstr = 'Нам понадобится: ';
foreach ($recipe['ingredients'] as $e) {
$ingrstr .= $e . ', ';
}
say($ingrstr);
say('Способ приготовления:');
foreach ($recipe['preparing'] as $e) {
say($e);
}
}
function getRecipes($recipeLink) {
if (empty($recipeLink)) {
return FALSE;
}
$html = @file_get_contents($recipeLink);
$doc = new DOMDocument();
@$doc->loadHTML($html);
$xpath = new DOMXpath($doc);
$ingredients = array();
$description = array();
$ingredientsDom = $xpath->query('//table[@class="rec-ingred-table"]/tr');
if ($ingredientsDom->length > 0) {
foreach ($ingredientsDom as $item) {
$ingredients[] = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue));
}
$descriptionDom = $xpath->query('//div[@class="b-page_block__outside"]/p');
foreach ($descriptionDom as $item) {
$description[] = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue));
}
} else {
$ingredientsDom = $xpath->query('//div[@class="b-page_block__outside"]/p');
foreach ($ingredientsDom as $item) {
$ingredients[] = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue));
}
}
$preparingDom = $xpath->query('//div[@class="b-list__clause__text"]/p');
$preparing = array();
foreach ($preparingDom as $item) {
$preparing[] = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue));
}
$recipe = array(
'description' => $description,
'ingredients' => $ingredients,
'preparing' => $preparing
);
return $recipe;
}
function findRecipes($queryString, $params) {
if (empty($queryString)) {
return FALSE;
}
$url = 'http://www.edimdoma.ru/search?utf8=%E2%9C%93&asset=recipes&index=title_search&query=' . urlencode($queryString) . '&search%5Bmain_category_id%5D=&search%5Bcuisine_id%5D=';
if (!empty($params)) {
foreach ($params as &$value) {
$url .= '&cooking_method_ids%5B%5D=' . $value;
}
}
$url .= '&user_name=';
$html = @file_get_contents($url);
$doc = new DOMDocument();
@$doc->loadHTML($html);
$xpath = new DOMXpath($doc);
$articles = $xpath->query('//div[@class="b-page_block__header"]');
$links = array();
foreach ($articles as $container) {
$arr = $container->getElementsByTagName("a");
foreach ($arr as $item) {
if ($item->parentNode->tagName == "h2") {
$href = $item->getAttribute("href");
$text = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue));
$links[] = array(
'link' => $href,
'text' => $text
);
}
}
}
return $links;
}
И сразу вопросик Может кто подскажет, как программно открывать страницу на каком либо терминале? Можно бы было открывать страницу с рецептом при запросе.
Последний раз редактировалось Dark_Veter Пт апр 10, 2015 8:17 pm, всего редактировалось 1 раз.
- За это сообщение автора Dark_Veter поблагодарили (всего 3):
- slgeo (Вт апр 07, 2015 8:16 pm) • Amarok (Ср апр 08, 2015 7:19 am) • Bagir (Пт апр 10, 2015 4:11 pm)
- Рейтинг: 3.49%
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
- slgeo
- Сообщения: 551
- Зарегистрирован: Чт фев 05, 2015 2:35 pm
- Откуда: РнД
- Благодарил (а): 139 раз
- Поблагодарили: 74 раза
Re: Кулинария
Как подгрузить на конкретном терминале - не подскажу, но в url домашней страницы можно записать свойство объекта, например, %ThisComputer.KitchenUrl%, и подгружать уже необходимую страницу.
Raspberry Pi2 Model B + NRF24L01 (MySensors) + 1-Wire + Esp8266 (WiFi-IoT)
CONNECT
CONNECT
- Bagir
- Сообщения: 1613
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 375 раз
Re: Кулинария
Это можно, вот примерDark_Veter писал(а):как программно открывать страницу на каком либо терминале?
Код: Выделить всё
$rec=array();
$rec['EVENT_TYPE']='openurl'; // команда может быть ещё newwindow
$rec['WINDOW']='alice';
$rec['TERMINAL_TO']='*'; //здесь можно конкретный терминал указать
$rec['ADDED']=date('Y-m-d H:i:s');
$rec['EXPIRE']=date('Y-m-d H:i:s', time()+10);
$rec['DETAILS']='my_site.ru';
$rec['ID']=SQLInsert('events', $rec);
- За это сообщение автора Bagir поблагодарили (всего 2):
- Dark_Veter (Пт апр 10, 2015 8:17 pm) • slgeo (Пт апр 17, 2015 9:26 pm)
- Рейтинг: 2.33%
-
- Сообщения: 295
- Зарегистрирован: Вт апр 23, 2013 5:16 pm
- Откуда: Брянск
- Благодарил (а): 18 раз
- Поблагодарили: 94 раза
Re: Кулинария
Bagir, Спасибо! Добавил в код для открытия страницы с рецептом.
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
-
- Сообщения: 32
- Зарегистрирован: Пт мар 25, 2016 11:34 pm
- Благодарил (а): 5 раз
- Поблагодарили: 0
Re: Кулинария
Никак не могу заставить работать данный скрипт. Все время говорит, что "Я не знаю такого рецепта". В чем может быть проблема?
-
- Сообщения: 295
- Зарегистрирован: Вт апр 23, 2013 5:16 pm
- Откуда: Брянск
- Благодарил (а): 18 раз
- Поблагодарили: 94 раза
Re: Кулинария
Странно, только что проверил у себя, работает. А шаблон у вас срабатывает?
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
-
- Сообщения: 32
- Зарегистрирован: Пт мар 25, 2016 11:34 pm
- Благодарил (а): 5 раз
- Поблагодарили: 0
Re: Кулинария
Проверил, при шаблоне "(Д|д)авай приготовим (.+)" шаблон не отрабатывает, если задать "давай приготовим (.+)" и выставить $matches[1], срабатывает нормально и ищет рецепт. Если поставить галочку на Use morphology перестает срабатывать.