Раньше работало отлично, только у меня перестало работать или у всех?
Видимо у всех.
Поменялось API википедии. Раньше запрос возвращал информацию о искомом термине, сейчас выдает список страниц, где описываются созвучные с искомым термины. Вот старый код и перестал понимать получаемый от википедии ответ.
$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);
Правда есть недостаток, текст выдаваемый по данному запросу длинноват, да и запрос должен точно соответствовать названию страницы.
Нужно еще поискать решения, не известно сколько этот вариант проработает. А может они к старому формату вернутся и все само заработает.
$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 википедии теперь выдает относительно длинный текст, поэтому код оставляет только первый значащий абзац. Если желаете получать полное сообщение, то убрать часть кода ограниченную комментариями "Оставляем первый абзац " .
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" в этом шаблоне что у себя вписали? Я имею ввиду содержимое тело шаблона и нужны ли приоритеты? "(что такое|кто такой) (.+)"