php скрипт вывода случайной цитаты с bash.org.ru

Многие знают bash.org.ru

Многие пользуются сервисами сайта для отображения цитат.

Но на мой взгляд, это неудобно. Неудобно для вебмастера.

Почему? Да очень просто. Есть официальные сервисы — вставка java кода и rss. Но первый для поисковых систем ничего не показывает, второй содержит кучу ссылок на bash.org.ru, что при использовании стандартных средств может быть воспринято поисковиками как ссылочный спам.

На одном из сайтов мне понадобилось вставлять случайную цитату с bash.org.ru, пришлось написать код, удовлетворяющий следующим требованиям:

  1. Выводить цитаты случайным образом;
  2. Выводить их из новых, например того же rss;
  3. Ограничить число обращений сайта к источнику, до одного в час.

Не вдаваясь в подробности приведу пример кода:

<?php
$filename = getcwd().’/temp/bash.xml’; //где будет находится наш файл с цитатами башорга
if (!file_exists($filename) or (time() > filemtime($filename) + 60*60*1) ) {//60*60*1 — время жизни нашего файла
get_content();
}

// Создание объекта SIMPLEXML и загрузка документа
$content = join («», file($filename));
// Создание объекта SIMPLEXML и загрузка документа
$xml = simplexml_load_string($content);
$text = «<strong>Случайный анекдот от bash.org.ru:</strong><p>\n»;
foreach ($xml->channel->item[rand (0, count($xml->channel->item))]->children() as $items) ;//выбираем случайную запись из rss
$description = iconv(«UTF-8″,»windows-1251», $items); //конвертируем при необходимости кодировку
$description = str_replace («<br><br>», «<br>», $description);//тут убираем ненужный двойной перевод строки
$text .= «$description</p>\n»;
echo $text; //ну и выводим нашу цитату
function  get_content($site_path) //функция загрузки файла, не идеал, но работает
{
//ссылка rss на bash.org.ru
$link = «http://bash.org.ru/rss/»;
//загружаем
$fd = fopen($link, «r»);
$text=»»;
if (!$fd) echo «Запрашиваемая страница не найдена»;
else
{
// Чтение содержимого файла в переменную $text
while (!feof ($fd)) $text .= fgets($fd, 4096);
$fp = fopen( getcwd().’/temp/bash.xml’, «w»);
fwrite($fp, $text);
fclose ($fp);
}
// Закрыть открытый файловый дескриптор
fclose ($fd);
return true;
}
?>

Работу данного php скрипта можно посмотреть здесь: php скрипт цитаты с bash.org.ru

Рекомендовать Google:
.

php скрипт вывода случайной цитаты с bash.org.ru: 5 комментариев

  1. Проверьте строку, нет ли в ней лишних символов или незакрытых ковычек?
    Попробовал скопировать в блокнот — именно в этой строке вместо закрытых ковычек вставился левый символ.

  2. Скрипт рабочий, однако периодически выскакиевает ошибка :

    Warning: Invalid argument supplied for foreach() in Fatal error: Call to a member function children() on a non-object in Z:\home\site.com\bash.php on line 14

    Строка 14 это :

    foreach ($xml->channel->item[rand (0, count($xml->channel->item))]->children() as $items);

    Почему так происходит ? Случается с частотой где-то одна ошибка в 30-35 запусков подряд скрипта.

  3. Ошибка говорит что переменная не подходит для функции. Если срабатывает иногда, то может просто файл не может прочитаться?
    Попробуйте после функции join вставить вывод переменной $content, например строкой «echo $content;»

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*