Допилил скрипт анекдотов с обновлениями и шахматистками
Чуть перепилил скрипт анекдотов.
Закачивает последние 50 анекдотов с сайта и при проговаривании ставит отметку о прочтении чтоб не повторять уже рассказанные анекдоты.
Если анекдоты заканчиваются обновляет список, но можно обновить и ручками.
Запуск из шаблонов
Главный шаблон у меня "расскажи|говори"
Дочерний "((\w+)(\s))?(анекдот)"
$d=preg_replace('/(\d+)/', '${1} ',$matches[1]);
if(!is_numeric($d) && !preg_match("/расскаж/isu",$d)){
include_once "php/include/w2dig.php";
$d=strToNum($d); //функция из инклуда переводящяя слова в цифры для голосового управления
}
if (strlen($d) == 0){
runScript('anekdot'); //если числа нет то просто рассказываем 1 анедот
}else{
runScript('anekdot',array('SOME'=>"$d")); //передаем число сколько анекдотов рассказывать
}
Сам скрипт anekdot
function update_a(){
//перед первым запуском необходимо создать таблицу anekdots строкой ниже
//CREATE TABLE `anekdots` ( `ID` int(10) unsigned NOT NULL AUTO_INCREMENT, `TITLE` varchar(255) NOT NULL DEFAULT '', `R_TRASH` int(10) NOT NULL DEFAULT '0', `LAST_UPDATE` timestamp, PRIMARY KEY (`ID`) ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
SQLExec("TRUNCATE anekdots;");
DebMes("Anekdots updating");
$xml_file="http://www.anekdot.ru/rss/export_top.xml"; // адрес xml файла
$t=time();
$sql=array();
$anekdot = array();
$xml = simplexml_load_file($xml_file); // раскладываем xml на массив
$xml_cnt = count($xml->channel->item);
$random= rand(0,$xml_cnt);
$num=1;
foreach( $xml->channel->item as $curr) {
$anekdot[]= (string) $curr->description;
}
foreach($anekdot as $an){
$a=preg_replace('/<br>/',' ',$an);
$sql['TITLE']=$a;
$sql['LAST_UPDATE']=$t;
$sql['ID']=$num;
SQLInsert('anekdots',$sql);
$num++;}
}
function read_a(){
$co=SQLSelectOne("SELECT ID,TITLE FROM anekdots WHERE R_TRASH = 0 ORDER BY RAND() LIMIT 1;");
SQLExec("UPDATE anekdots SET R_TRASH=1 WHERE ID='".$co['ID']."'");
return $co['TITLE'];
}
$r=read_a();
if ( empty($r)){
sayReply("Новых анекдотов нет, обновляю список",10);
update_a();
$r=read_a();
}elseif($params['UPDATE']){
update_a();
}else{
$d=$params['SOME'];
if($d){
$i=1;
while ($i <= $d){
sayReply("$r",10);
$r=read_a();
$i++;
}
}else{
sayReply("$r",10);
}
}
Для обновления списка запустить
runScript('anekdot',array('UPDATE'=>TRUE));
Или для автоматического обновления вставить в onNewMinute
if (timeIs("03:00")) {
runScript('anekdot',array('UPDATE'=>TRUE));
}
Люберцы, Россия
На форуме: Sas