• Как исправить Fatal error: Cannot redeclare isAnyElementInArray?

    VladimirAndreev
    @VladimirAndreev
    php web dev
    if(!function_exists('isAnyElementInArray')) {
        function isAnyElementInArray($arNeedle, $arHaystack) {}
    }
    Ответ написан
    2 комментария
  • Как сделать склонение числительных на php?

    @ynblpb_spb
    дятел php
    function RusEnding($n, $n1, $n2, $n5) {
    		if($n >= 11 and $n <= 19) return $n5;
    		$n = $n % 10;
    		if($n == 1) return $n1;
    		if($n >= 2 and $n <= 4) return $n2;
    		return $n5;
    	}
    echo RusEnding(40, "комментарий", "комментария", "комментариев");
    Ответ написан
    Комментировать
  • Как получить список отзывов об организации с карт Яндекса?

    Перестал работать запрос по AJAX, поэтому написал парсер для страницы
    https://yandex.ru/maps/org/{organization_id}/reviews/

    Для начала напишем простейшую функцию для запроса cURL
    function getRequestResult($request){
        $ch=curl_init();
        curl_setopt($ch,CURLOPT_URL,$request);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $server_output = curl_exec($ch);
        curl_close($ch);
        return $server_output;
    }
    $org_url='https://yandex.ru/maps/org/{&organization_id}/reviews/';
    $html=getRequestResult($org_url);

    Получили огромный HTML страницы, давайте обрежем его. Нам нужно содержимое div с классом reviews-view__reviews.
    $pos=strpos($html,'<div class="reviews-view__reviews">');
    $part=substr($html,$pos);
    $pos2=strpos($part, '</section>');
    $part=substr($fx,0,$pos2);

    Далее, используя любой HTML парсер, добиваемся нужного результата. Я использовал Simple HTML DOM
    require_once("simple_html_dom.php");
    $html=str_get_html($part);
    if(count($html->find('.business-review-view'))){
        foreach($html->find('.business-review-view') as $div){
            //Значит, нашли отзыв
            $review=[];
            //Ищем автора
            if(count($div->find('.business-review-view__author a'))){
                $reviewAuthor=$div->find('.business-review-view__author a span')[0]->innertext;
                $review['author']=$reviewAuthor;
            }
            if(count($div->find('.business-review-view__author meta'))){
                $reviewImage=$div->find('.business-review-view__author meta')[0]->content;
                $review['image']=$reviewImage;
            }
            if(count($div->find('.business-review-view__date'))){
                $reviewDate=$div->find('.business-review-view__date meta')[0]->content;
                $review['date']=$reviewDate;
            }
            if(count($div->find('.business-review-view__body-text'))){
                $reviewText=$div->find('.business-review-view__body-text')[0]->innertext;
                $review['text']=$reviewText;
            }
            $reviews[]=$review;
        }
    }

    В итоге, получаем в массив reviews такие данные: аватар пользователя, имя, дата публикации отзыва и, собственно, текст отзыва.

    Лучше не использовать этот код постоянно, данные лучше кешировать и при необходимости вытаскивать их из кеша
    Yandex всегда может поменять html код и тогда метод не будет работать
    Ответ написан
    2 комментария
  • 301 .htaccess - как сделать исключение одной страницы?

    @onpavlov
    Инженер, программист. JS, PHP, Python, Golang
    Попробуйте после RewriteEngine добавить что то вроде этого
    RewriteCond %{REQUEST_URI} !^/result\.php$
    Ответ написан
    1 комментарий