Ответы пользователя по тегу PHP
  • Как спарсить данные с сайта?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Если правильно помню, то в цикле можно проверять
    if (!in_array($a->href, ['#USDKZT', '#EURKZT']) ) continue;


    Как вариант использовать внутренние запросы
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://kase.kz/charts/currency/history',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'POST',
      CURLOPT_POSTFIELDS =>'symbol=USDKZT_TOM&resolution=D&from=1658040727&to=1658040727&chart_language_code=ru',
      CURLOPT_HTTPHEADER => array(
        'Accept: */*',
        'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
        'Cookie: __Host-csrftoken=КУКА; ',
        'Referer: https://kase.kz/ru/currency/',
        'X-CSRFToken: ТОКЕН',
        'X-KL-Ajax-Request: Ajax_Request',
        'X-Requested-With: XMLHttpRequest'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;


    Правда непонятно, как часто меняются куки и токен, по идее можно делать запрос на получения куки и токена и проверить, когда она "протухнет". Обычно действуют от 1 до 24 часов.
    Payload: symbol=USDKZT_TOM&resolution=D&from=1658040727&to=1658040727
    Время указываем текущие (или диапазон). Если указать одинаковыми:
    {"c": [486.35], "t": [1658102400], "o": [482.0], "v": [131183750], "h": [487.3], "l": [482.0], "s": "ok"}
    Ответ написан
    1 комментарий
  • Как спарсить ozon средствами PHP?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Могу посоветовать попробовать пакет spatie/crawler, который используется для обхода ссылок на сайте. Сам Spatie его использует для составления карты сайты через парсинг сайта. Если правильно помню, он работает через js (так как можно ему отправлять js код на выполнение).

    Когда пытался спарсить некоторые данные с определенного сайта, тоже столкнулся с проблемой - там сайт грузится постфактум через js с проверкой, что это человек. Я использую Python-Selenium-WebDriver. А на этот пакет наткнулся уже позже и не проверял его.
    Ответ написан
    Комментировать
  • Как запустить 5000 потоков параллельно с GET запросами?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Можно посмотреть phabel и есть стандартные средства многопоточности у php. Но на столько больших запросах я не проверял (у меня небольшой проектик с несколькими десятками запросов).

    Тут скорее всего лучше смотреть в сторону Python или Go. У них подобное гораздо лучше должно работать.
    Ответ написан
    Комментировать
  • Можно ли организовать централизованное управление ошибками в данном случае?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Можно же ловить отдельно определенные исключения, так же есть блок finally, который выполнится в любом случае.

    try {
        // код
    } catch (ICreateNewException $e) {
        echo 'Сработало исключения создания: ',  $e->getMessage(), "\n";
    } catch (Exception $e) {
        echo 'Поймано исключение: ',  $e->getMessage(), "\n";
    } finally {
        echo "Это я выполню всё равно";
    }


    чтобы так не писать каждый раз, можно создать функцию, в которую передавать callbak'ом функцию
    // это примерный код просто для визуального примера
    function ($callback, $args,$default)
    {
    try {
      $r = $callback($args);
    // or call_user_func(array($callback, $args))
    } catch (ICreateNewException $e) {
        echo 'Сработало исключения создания: ',  $e->getMessage(), "\n";
    return new NullObj;
    } catch (Exception $e) {
        echo 'Поймано исключение: ',  $e->getMessage(), "\n";
    mail(config('mail.to'))
    } finally {
        return $default;
    }
    }
    Ответ написан
  • Как передать UTM-метки в CRM Битрикс 24 с помощью PHP?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Может кому надо, у меня работает так:

    update_bitrix_entity('deal', 13,array('UTM_SOURCE' =>'NEW'));
    
    function update_bitrix_entity($entity, $id, $fiels = array())
    		{
    		if (!in_array($entity, array('lead', 'deal', 'contact', 'company')))
    			{
    			return false;
    			}
    		$name = "crm.{$entity}.update";
    		$post = array(
    			'id' => $id,
    			'fields' => $fiels);
    		$ret = bitrix::call($name, $post);
    		return $ret;
    		}
    Ответ написан
    Комментировать
  • Мини-cms для редактирования статического сайта?

    Ichi
    @Ichi
    Увлекаюсь программированием
    Ещё добавлю в копилку:
    Landing Page Framework
    и
    Albireo* Framework

    Первый совсем простой и код почти чистый html. Второй поновее и имеет разные дополнительные фишки. Но в итоге у них обоих могут быть чистые html. Документация полностью на русском, так как делалось русским разработчиком. Оба движка от разработчика MaxSite CMS
    Ответ написан
    Комментировать
  • Бесплатные онлайн-курсы по PHP?

    Ichi
    @Ichi
    Увлекаюсь программированием
    2 комментария