@rusgayfer

Как вывести 10 фактов?

Вывожу факты вот так

// Получаем факты
$urlfact = 'http://randstuff.ru/fact';
$pagefact = file_get_contents($urlfact);
preg_match("/<table. *class=\"text\"><tr><td>(.*)<\/td><\/tr><\/table>/", $pagefact, $textfact);
echo $message =  "Интересный факт:\n\n".$textfact[1];


Но выводится только 1 рандомный факт. Как сделать от 1 до 10 ?
  • Вопрос задан
  • 114 просмотров
Решения вопроса 1
lidacriss
@lidacriss
wtf
Вариант 1:
$errorCount = 0; //будем считать ошибки, чтобы не ходить все время по кругу
$textFacts = []; // массив с фактами
$urlFact = 'http://randstuff.ru/fact'; // урл на факты
// пока массив с фактами меньше 10 и количество ошибок меньше 5, то ходим снова по циклу
while (count($textFacts) < 10 && $errorCount < 5) {
    $pageFact = file_get_contents($urlFact); // достаем контент с удаленной страницы
    // если удалось найти искомое, записываем в массив
    if (preg_match('#<div id="fact">.*?<td>(?P<fact>.*?)</td>#', $pageFact, $match)) {
        $textFact = "Интересный факт:\n\n" . $match['fact'] . "\n";
        array_push($textFacts, $textFact);
    }  else $errorCount++; // если не удалось найти нужное, то плюсуем ошибки
}
echo implode("\n", $textFacts); // склеиваем значения в массиве в строку и выводим


Вариант 2:
$errorCount = 0;
$textFacts = [];
$urlFactAjax = 'https://randstuff.ru/fact/generate/';
$options = [
    CURLOPT_RETURNTRANSFER => 1,  // return web page
    CURLOPT_HEADER         => 0,  // return headers
    CURLOPT_SSL_VERIFYPEER => 0,  // Disabled SSL Cert checks
    CURLOPT_SSL_VERIFYHOST => 0,
    CURLOPT_POST           => 1,
    CURLOPT_HTTPHEADER     => ['X-Requested-With:XMLHttpRequest'],
];
while (count($textFacts) < 10 && $errorCount < 5) {
    // $json_string = file_get_contents($urlFact, false, $context);
    $ch = curl_init($urlFactAjax);
    curl_setopt_array($ch, $options);
    $fact = '';
    if ($json_string = curl_exec($ch))
        if ($json_content = json_decode($json_string))
            $fact = trim($json_content->fact->text ?? '');
    if (strlen($fact)) {
        array_push($textFacts, "Интересный факт:\n\n{$fact}\n");
    } else $errorCount++;
}
echo implode("\n", $textFacts);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы