Вопрос по функции

r_vyacheslav

Гуру форума
Регистрация
18 Авг 2015
Сообщения
174
Реакции
67
Помогите разобраться с функцией парсера.

Не удается получить список категорий донора. Парсер открывает страницу и ищет div с классом
category, после чего должен отобразить весь список категорий, но по непонятным мне причинам данная функция не срабатывает, что с ней не так?

PHP:
    private function GrandCatList($data)
    {
        $out = [];
        libxml_use_internal_errors(true);
        $this->dom->loadHTML($data);
        libxml_clear_errors();
        $divs = $this->dom->getElementsByTagName('div');
        for($i=0; $i < $divs->length; $i++)
        {
           
            $div = $divs->item($i);
               
            if($div->hasAttribute('class') && "category" === $div->getAttribute('class')) $out[] = [$div->getElementsByTagName('a')->item(1)->getAttribute('href'),$div->getElementsByTagName('a')->item(1)->nodeValue];
           
        }
        return $out;
       
    }
 
Проверку на всё поставь.

Код:
if (!$divs) { echo "divs not work"; return;}
 
Оно не решит задачу, но покажет в чём ошибка. Сами же пишете: "помогите разобраться".

Если же вам нужно решение, то надо так "напишите за меня...".
 
Оно не решит задачу, но покажет в чём ошибка. Сами же пишете: "помогите разобраться".

Оно не поможет разобраться так как сейчас постоянно возвращается пустое значение, именно по этому это решение никак не укажет мне в чем причина.
 
Помогите разобраться с функцией парсера.

Не удается получить список категорий донора. Парсер открывает страницу и ищет div с классом
category, после чего должен отобразить весь список категорий, но по непонятным мне причинам данная функция не срабатывает, что с ней не так?

Изменил немного, чтобы работала вне класса, все отработало. Как получается исходный код страницы? Через CURL? Сайт работает через HTTPS, возможно следует добавить параметр
Код:
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false)
PHP:
<?php
$doc = new DOMDocument();
$data = file_get_contents('https://grandtrend.com.ua/catalog/');
$out = [];
libxml_use_internal_errors(true);
$doc->loadHTML($data);
libxml_clear_errors();
$divs = $doc->getElementsByTagName('div');
for ($i = 0; $i < $divs->length; $i++) {
    $div = $divs->item($i);
    if ($div->hasAttribute('class') && "category" === $div->getAttribute('class')) {
        $out[] = [
            $div->getElementsByTagName('a')->item(1)->getAttribute('href'),
            $div->getElementsByTagName('a')->item(1)->nodeValue
        ];
    }
}
var_dump($out);
Для просмотра ссылки Войди или Зарегистрируйся
 
Дабы не плодить темы, помогите просклонять минуты, минут, и.т.д
PHP:
public function convertTime($iTime, $sDefault = null, $bIsShortType = false)
    {
        $iSeconds = (int)round(abs(PHPFOX_TIME - $iTime));
        $iMinutes = (int)round($iSeconds / MINUTE_IN_SECONDS);

        if ($iMinutes < 1) {
            if ($iSeconds === 0 || $iSeconds === 1) {
                return _p('1_second_ago');
            }
            return _p('total_seconds_ago', ['total' => $iSeconds]);
        }

        if ($iMinutes < MINUTE_IN_SECONDS) {
            if ($iMinutes === 0 || $iMinutes === 1) {
                return _p('1_minute_ago');
            }
            return _p('total_minutes_ago', ['total' => $iMinutes]);
        }

        $iHours = (int)round(floatval($iMinutes) / MINUTE_IN_SECONDS);

        if ($iHours < 24) {
            if ($iHours === 0 || $iHours === 1) {
                return _p('1_hour_ago');
            }

            return _p('total_hours_ago', ['total' => $iHours]);
        }

        if ($iHours < 48
            && ((int)date('d', PHPFOX_TIME) - 1) == date('d', $iTime)
        ) {
            return _p('yesterday') . ', '
                . Phpfox::getTime(Phpfox::getParam('core.conver_time_to_string'),
                    $iTime);
        }
 
Дабы не плодить темы, помогите просклонять минуты, минут, и.т.д
Использовал вот такую функцию в одном из проектов. Может пригодится
PHP:
    /**
     * Функция возвращает окончание для множественного числа слова на основании числа и массива окончаний
     * @param  $number Integer Число на основе которого нужно сформировать окончание
     * @param  $endings Array Массив слов или окончаний для чисел (1, 4, 5),
     *         например array('яблоко', 'яблока', 'яблок')
     * @return String
     */
    public static function getNumEnding(int $number, array $endingArray) {
        $number = $number % 100;
        if ($number >= 11 && $number <= 19) {
            $ending = $endingArray[2];
        } else {
            $i = $number % 10;
            switch ($i) {
                case (1):
                    $ending = $endingArray[0];
                    break;
                case (2):
                case (3):
                case (4):
                    $ending = $endingArray[1];
                    break;
                default:
                    $ending = $endingArray[2];
            }
        }
        return $ending;
    }
 
Использовал вот такую функцию в одном из проектов. Может пригодится
PHP:
    /**
     * Функция возвращает окончание для множественного числа слова на основании числа и массива окончаний
     * @param  $number Integer Число на основе которого нужно сформировать окончание
     * @param  $endings Array Массив слов или окончаний для чисел (1, 4, 5),
     *         например array('яблоко', 'яблока', 'яблок')
     * @return String
     */
    public static function getNumEnding(int $number, array $endingArray) {
        $number = $number % 100;
        if ($number >= 11 && $number <= 19) {
            $ending = $endingArray[2];
        } else {
            $i = $number % 10;
            switch ($i) {
                case (1):
                    $ending = $endingArray[0];
                    break;
                case (2):
                case (3):
                case (4):
                    $ending = $endingArray[1];
                    break;
                default:
                    $ending = $endingArray[2];
            }
        }
        return $ending;
    }
А как это под мою функцию подстроить?
 
Назад
Сверху