Нашла в этой теме два скрипта (спасибо авторам), но у меня они не заработали. Допилила напильником как смогла))
Проверила на двух серверах MjD, работает )).
Скрещивала "бульдога с носорогом", ну и чуть от себя добавила)).
1. Метод обработки запроса взяла у второго скрипта. Меньше кода, меньше нагрузки на сервер.
2. Разветвленность ответа и идею с записью в файл, из первого скрипта.
Что получилось:
1. Запись в файл ответов на вопросы добавлением к существующим. Всегда можно посмотреть что детей интересует. Кому это лишне, можно удалить, в коде строки с 46 по 50.
2. На не однозначные вопросы, система делает выборку имеющихся в вики вариантов и предлагает выбрать требуемый. В качестве примера, если спросить "кто такой Пушкин", ответ придет однозначный, А.С.)). Словно нет других великих)). А вот если спросить "кто такой Андерсен", гугл поправит на Андерсон и выдаст 9 вариантов. ))
Чудеса бывают
Код: Выделить всё
$keywords = preg_split("/[\s,]+/",$original); // помещаем запрос в массив
$totalz=count($keywords);
for($i=2;$i<$totalz;$i++) { // i=2 отсекаем голосовую команду (шаблон). в моем случае "что такое" или "кто такой". Значение i= равна кол-ву слов в голосовой комманде.
$message_textz=$message_textz." ".$keywords[$i];
}
say("$message_textz,ожидайте,ищу по вики ",2);
// Установка свойства объекта на основании полученной переменной
sg("Объект.Свойство",$message_textz);
context_getuser();
context_clear();
context_activate(ID);
$zap="$message_textz";
$zapurl=urlencode($zap);
$url='https://ru.wikipedia.org/w/api.php?action=opensearch&search='.$zapurl.'&prop=info&format=xml&inprop=url';
$answ=file_get_contents($url);
$data_xml = simplexml_load_string($answ); //загружаем ответ от вики в массив
$otvet=$data_xml->Section[0]->Item[0]->Description[0]; //получаем первый найденный вариант
$description = $data_xml->Section[0]->Item[0]->Description[0]; //получаем определение слова
if (empty($description)) { //если ничего не нашлось
say ("по прямому запросу ничего нет. уточните запрос",2);
for ($i=1; $i<50;) { // максимальное количество выводимых найденых вариантов запросов. можно сократить.
$description = $data_xml->Section[0]->Item[$i]->Description[0]; //получаем определение слова
if (!empty($description)) { //если определение есть, продолжаем
$otvet2=$data_xml->Section[0]->Item[$i]->Text[0]; // записываем следующий вариант запроса
//удаление спецсимволов
$otvet2=iconv("UTF-8","CP1251//IGNORE",$otvet2);
$otvet2=iconv("CP1251","UTF-8",$otvet2);
$otvet2="Вариант ".$i.":".$otvet2." "; // подготавливаем для озвучивания/ вывода на экран
say($otvet2,2);
$i++;
} else {
say("Больше вариантов нет.",2);
$i=100;
}
}
} else {
//удаление спецсимволов
$otvet=iconv("UTF-8","CP1251//IGNORE",$otvet);
$otvet=iconv("CP1251","UTF-8",$otvet);
say($otvet,2);
//Сохраняем запросы в файл. это лог. на работу скрипта не влияет. можно удалить
$data = fopen('wiki.xml', 'a'); //открываем файл для до записи 'a' для перезаписи 'w'
$message_textz = "\n#######\n".$message_textz." = ".$otvet."\n\n";
fwrite($data, $message_textz); //записываем результат выполнения
fclose($data); //закрываем
}
1. на некоторые ответы от вики Алиса молчит. Решение в строке 42. (передела . п.4)
2. чуть изменила код.
3. описание.
4. убрала спец символы в ответах от вики. Строки 30-32 и 42-44