R
R
rusgayfer2018-02-22 17:52:52
PHP
rusgayfer, 2018-02-22 17:52:52

How to display 10 facts?

I bring out the facts like this

// Получаем факты
$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];

But only 1 random fact is displayed. How to make from 1 to 10?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
N
Nick Sdk, 2018-02-22
@rusgayfer

Option 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); // склеиваем значения в массиве в строку и выводим

Option 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);

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question