Страница 9 из 9

Re: [Скрипт] Алиса и Википедия

Добавлено: Чт янв 16, 2020 10:27 pm
skyrider
Перестал работать запрос к википедии, сценарий wiki:

Код: Выделить всё

$zap=$params['zapros']; //$zap='Дед Мороз';
say('Запрашиваю у Wikipedia информацию о '.$zap);
$zapurl=urlencode($zap);
$url='http://ru.wikipedia.org/w/api.php?action=opensearch&search='.$zapurl.'&prop=info&format=xml&inprop=url';
$answ=file_get_contents($url);
$xml = simplexml_load_string($answ);
$otvet=$xml->Section->Item->Description;
//echo $otvet;
//избавимся от ударений
$otvet=iconv("UTF-8","CP1251//IGNORE",$otvet);
$otvet=iconv("CP1251","UTF-8",$otvet);
$otvet = preg_replace("#\s\(.*?\)#isu", '', $otvet);
echo( $otvet);
say($otvet,2);
шаблон поведения с названием: (что такое|кто такой|кто такая) (.+)
в шаблоне поведения КОД runScript('wiki', array('zapros' => $matches[2]));

Раньше работало отлично, только у меня перестало работать или у всех?

Re: [Скрипт] Алиса и Википедия

Добавлено: Ср янв 22, 2020 1:26 pm
Krz
Раньше работало отлично, только у меня перестало работать или у всех?
Видимо у всех.
Поменялось API википедии. Раньше запрос возвращал информацию о искомом термине, сейчас выдает список страниц, где описываются созвучные с искомым термины. Вот старый код и перестал понимать получаемый от википедии ответ.

Re: [Скрипт] Алиса и Википедия

Добавлено: Ср янв 22, 2020 2:03 pm
Krz
Если править ваш код по быстрому, то получим вот это

Код: Выделить всё

$zap=$params['zapros']; //$zap='Дед Мороз';
say('Запрашиваю у Wikipedia информацию о '.$zap);
$zapurl=urlencode($zap);
$url='https://ru.wikipedia.org/w/api.php?action=query&prop=extracts&format=xml&exintro=&titles='.$zapurl;
$answ=file_get_contents($url);
$xml = simplexml_load_string($answ);
$otvet=$xml->query->pages->page->extract;
//echo $otvet;
//избавимся от ударений
$otvet=iconv("UTF-8","CP1251//IGNORE",$otvet);
$otvet=iconv("CP1251","UTF-8",$otvet);
$otvet = preg_replace("#\s\(.*?\)#isu", '', $otvet);
echo( $otvet);
say(strip_tags($otvet),2);
Правда есть недостаток, текст выдаваемый по данному запросу длинноват, да и запрос должен точно соответствовать названию страницы.
Нужно еще поискать решения, не известно сколько этот вариант проработает. А может они к старому формату вернутся и все само заработает.

Re: [Скрипт] Алиса и Википедия

Добавлено: Ср янв 22, 2020 4:20 pm
Krz
Вот, немного переработал

Код: Выделить всё

$zap=$params['zapros']; //$zap='Дед Мороз';
say('Запрашиваю у Wikipedia информацию о '.$zap);
$zapurl=urlencode($zap);
$url='https://ru.wikipedia.org/w/api.php?action=query&list=search&srlimit=1&format=xml&srsearch='.$zapurl;
$answ=file_get_contents($url);
$xml = simplexml_load_string($answ);
$otvet=$xml->query->search->p->attributes();
$zapurl=urlencode($otvet['title']);
$url='https://ru.wikipedia.org/w/api.php?action=query&prop=extracts&format=xml&exintro=&titles='.$zapurl;
$answ=file_get_contents($url);
$xml = simplexml_load_string($answ);
$otvet=$xml->query->pages->page->extract;
$otvet=iconv("UTF-8","CP1251//IGNORE",$otvet);
$otvet=iconv("CP1251","UTF-8",$otvet);
$otvet = preg_replace("#\s\(.*?\)#isu", '', $otvet);
if (empty($otvet)) { say ("Я не знаю такого слова",2);} else {
echo( $otvet);
//Оставляем первый абзац - начало
preg_match_all('#<p[^>]*?>(.+?)</p>#su', $otvet, $res);
$abz= $res[0][0];
$kstr = array("\r\n", "\n", "\r"); $lch = substr(str_replace($kstr, '', strip_tags($abz)), -1);
if ( $lch!=':') $otvet=$abz;
// Оставляем первый абзац - конец
 say(strip_tags($otvet),2);
}
В этом варианте выдает текст наиболее соответствующей запросу страницы. Например, страница "Паровой двигатель" не существует и предыдущий мой вариант кода ничего не выдавал, этот код выдаст сокращенную информацию с наиболее близкой страницы "Паровая машина".
API википедии теперь выдает относительно длинный текст, поэтому код оставляет только первый значащий абзац. Если желаете получать полное сообщение, то убрать часть кода ограниченную комментариями "Оставляем первый абзац " .

Re: [Скрипт] Алиса и Википедия

Добавлено: Чт апр 16, 2020 10:01 am
Skat136
здравствуйте. у меня этот код сразу не заработал, переменная $params['zapros'] не получала сам запрос...
Вот немного подправил, так работает

Код: Выделить всё

 runScript('wiki', array($params = $matches[2]));
$zap=$params; //$zap='Дед Мороз';
say('Запрашиваю у Wikipedia информацию о '.$zap);
$zapurl=urlencode($zap);
$url='https://ru.wikipedia.org/w/api.php?action=query&list=search&srlimit=1&format=xml&srsearch='.$zapurl;
$answ=file_get_contents($url);
$xml = simplexml_load_string($answ);
$otvet=$xml->query->search->p->attributes();
$zapurl=urlencode($otvet['title']);
$url='https://ru.wikipedia.org/w/api.php?action=query&prop=extracts&format=xml&exintro=&titles='.$zapurl;
$answ=file_get_contents($url);
$xml = simplexml_load_string($answ);
$otvet=$xml->query->pages->page->extract;
$otvet=iconv("UTF-8","CP1251//IGNORE",$otvet);
$otvet=iconv("CP1251","UTF-8",$otvet);
$otvet = preg_replace("#\s\(.*?\)#isu", '', $otvet);
if (empty($otvet)) { say ("Я не знаю такого слова",2);} 
else {
echo( $otvet);
//Оставляем первый абзац - начало
preg_match_all('#<p[^>]*?>(.+?)</p>#su', $otvet, $res);
$abz= $res[0][0];
$kstr = array("\r\n", "\n", "\r"); $lch = substr(str_replace($kstr, '', strip_tags($abz)), -1);
if ( $lch!=':') $otvet=$abz;
// Оставляем первый абзац - конец
 say(strip_tags($otvet), 2);
} 

Re: [Скрипт] Алиса и Википедия

Добавлено: Пт июл 31, 2020 2:35 am
bootdrv
Ivan писал(а):
Вт авг 25, 2015 10:14 pm
http://majordomo.smartliving.ru/forum/v ... 0%BA%D0%BE
Иван, приветствую. Спасибо, попробую разобраться!

Re: [Скрипт] Алиса и Википедия

Добавлено: Пт июл 31, 2020 2:40 am
bootdrv
Skat136 писал(а):
Чт апр 16, 2020 10:01 am
здравствуйте. у меня этот код сразу не заработал, переменная $params['zapros'] не получала сам запрос...
Вот немного подправил, так работает

Код: Выделить всё

 runScript('wiki', array($params = $matches[2]));
$zap=$params; //$zap='Дед Мороз';
say('Запрашиваю у Wikipedia информацию о '.$zap);
$zapurl=urlencode($zap);
$url='https://ru.wikipedia.org/w/api.php?action=query&list=search&srlimit=1&format=xml&srsearch='.$zapurl;
$answ=file_get_contents($url);
$xml = simplexml_load_string($answ);
$otvet=$xml->query->search->p->attributes();
$zapurl=urlencode($otvet['title']);
$url='https://ru.wikipedia.org/w/api.php?action=query&prop=extracts&format=xml&exintro=&titles='.$zapurl;
$answ=file_get_contents($url);
$xml = simplexml_load_string($answ);
$otvet=$xml->query->pages->page->extract;
$otvet=iconv("UTF-8","CP1251//IGNORE",$otvet);
$otvet=iconv("CP1251","UTF-8",$otvet);
$otvet = preg_replace("#\s\(.*?\)#isu", '', $otvet);
if (empty($otvet)) { say ("Я не знаю такого слова",2);} 
else {
echo( $otvet);
//Оставляем первый абзац - начало
preg_match_all('#<p[^>]*?>(.+?)</p>#su', $otvet, $res);
$abz= $res[0][0];
$kstr = array("\r\n", "\n", "\r"); $lch = substr(str_replace($kstr, '', strip_tags($abz)), -1);
if ( $lch!=':') $otvet=$abz;
// Оставляем первый абзац - конец
 say(strip_tags($otvet), 2);
} 
Спасибо, Попробуем! У вас она без "CONNECT" работает? В "command" в этом шаблоне что у себя вписали? Я имею ввиду содержимое тело шаблона и нужны ли приоритеты? "(что такое|кто такой) (.+)"