Шахматный рандомайзер :)
Маленький побочный скрипт, выложу сюда, чтоб не пропал. Показывает случайную шахматную партию с инфой и онлайн-доской, выбирая из ...надцати миллионов доступных игр :)
Подход к написанию кода PHP - самый простой, полностью вот отсюда, так что исходник не нужен. В коде от chessgames.com немало ошибок, сначала правятся они, потом делаются замены для превращения относительных ссылок в абсолютные и т.п.
Проще всего заставить работать такой скрипт в теге <iframe>, потому что через JQuery муторно - скрипт тоже подгружает сложные скрипты и законфликтует с JQuery. Из-за перегруженности целевого сервера или проблем со связью скрипт может иногда "ошибаться", на этот случай вверху есть ссылка "Give me another game, please" "Ещё партию, пожалуйста". Ну а если изменится выдача целевого сервера, тогда придётся изменить и код по тому же принципу, что в статье по первой ссылке.
Вот код для подключения скрипта на своём сайте и скрипт в работе:
<div align="center"> <iframe src="http://scripts.kislenko.net/randomchessgame.php" width="800" height="600" align="middle" scrolling="auto" frameborder="no"> <div align="center">Для работы приложения нужен браузер с поддержкой плавающих фреймов</div> </iframe> </div>
P.S. При первой загрузке скрипта кнопки под доской могут выглядеть не так, как в скрипте, открытом без фрейма, из-за стиля блога.
P.P.S. Администрация сайта-донора переписала скрипт и заменила JS-"движок" для просмотра партий, устранив также большинство ошибок разметки. Плюс запретили кросс-доменный доступ, так что фигурки пока не грузятся :(
P.P.P.S. :) Когда мне всё это надоело, стал просто брать со страницы сервера только PGN и подгружать его в chesstempo. Конечно, это означает, что работоспособность скрипта будет зависеть от доступности сайта chesstempo.com. Вот здесь написано, как установить chesstempo у себя на сервере и приложен соответствующий архив.
Вот более-менее стабильно работающий код для PHP 7.4 и кодировки Юникода utf-8:
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Random game from chessgames.com</title> </head> <body> <?php function process($s,$start,$end,$include) { $s1 = mb_strpos ($s,$start); $s2 = mb_strpos ($s,$end); if (!is_integer($s1)) { return "ОШИБКА: Не найден начальный сегмент: ".htmlspecialchars($start); } if (!is_integer($s2)) { return "ОШИБКА: Не найден конечный сегмент: ".htmlspecialchars($end); } if ($s1 > $s2) { return "ОШИБКА: Конечный сегмент предшествует начальному"; } if ($include) { //Включать начало и конец return mb_substr ($s,$s1,$s2-$s1+mb_strlen($end,'UTF-8'),'UTF-8'); } else { //Исключить начало и конец $s1 += mb_strlen($start,'UTF-8'); return mb_substr ($s,$s1,$s2-$s1,'UTF-8'); } } function trimall($string) { return trim(preg_replace("/\s+/"," ",$string)); } $url = 'http://www.chessgames.com/perl/chessrandom?'; //URL для извлечения данных $startpgn = 'pgn=\''; //файл PGN $endpgn = '\' ratio='; $startdesc = '<font face="verdana,arial,helvetica" size="+1">'; //Данные о партии $enddesc = '<font size="-2" face="verdana,arial,helvetica">'; $replacements = array ( //Что на что заменять перед показом 'href="/' => 'href="http://www.chessgames.com/' ); $file = @file_get_contents($url); $string = str_replace ("\n","",process($file,$startpgn,$endpgn,false)); $data = str_replace (array_keys($replacements),array_values($replacements), process($file,$startdesc,$enddesc,false)); echo ' <div align="center"><a href="randomchessgame.php">Ещё партию, пожалуйста</a></div> <div align="center">'. $data. '<script src="http://chesstempo.com/js/pgnyui.js"></script> <script src="http://chesstempo.com/js/pgnviewer.js"></script> <link type="text/css" rel="stylesheet" href="http://chesstempo.com/css/board-min.css"> <style type="text/css"> .ct-black-square { background-color: #b58863; } .ct-white-square { background-color: #f0d9b5; } .ct-board-border { border:1px solid black; } </style> <script> new PgnViewer( { boardName: \'board16\', pgnString: \''.trimall(addslashes($string)).'\', pieceSet: \'merida\', pieceSize: 46 } ); </script> <noscript><div align="center">Извините, Javascript отключён в вашем браузере!</div></noscript> <div id="board16-container" style="width:400px; margin: 0 auto;"></div> <div id="board16-moves" style="width:400px;text-align: justify; margin: 0 auto;"></div> </div>'."\n"; ?> </body></html>
P.P.P.P.S. В итоге, они всё же сделали ответ "403 forbidden" для всех запросов без определённых GET-параметров и не по https://
, так что скрипт в данном виде, должно быть, отжил своё, оставшись лишь учебным примером.
24.11.2016, 02:35 [5203 просмотра]