Получение информации с другого сайта

Тема в разделе "Как сделать...", создана пользователем djvavik, 23 апр 2019.

  1. djvavik

    djvavik

    Регистр.:
    27 авг 2013
    Сообщения:
    165
    Симпатии:
    19
    Здравствуйте. Возможно кто то уже задавался вопросом по данной системе или будет полезно.
    У меня такой вопрос:
    Имеется система https://eds.mosreg.ru

    В эту систему попадают заявки. Имеются разные статусы (Новая, в работе, закончено и тд).

    Как не странно, кроме как ежеминутного мониторинга системы узнать о новой поступившей заявке невозможно. E-mail рассылка не производится, АPI отсутствует.

    Проблема в том, что отреагировать на заявку необходимо в течении суток, в противном случае заявка уйдет в другую систему, с более печальными последствиями.

    Не составляет труда просматривать ежедневно данную систему, но как быть в выходные дни? Да и человеческий фактор никто не отменял.

    Назрел такой вопрос, каким образом получать данные из данной системы или же с сайта с помощью PHP, что бы уведомления об изменениях или новых заявках приходили хотя бы на почту?

    Или же можно ли как то самому сделать API под данную систему?

    Знаний в PHP нет, но может кто нибудь направит в нужное русло.

    За ранее спасибо.
     
  2. nemorg

    nemorg Создатель

    Регистр.:
    6 окт 2011
    Сообщения:
    35
    Симпатии:
    5
    Приветствую. Если API нет, то придется делать самописный скрипт: чтобы он производил авторизацию и уже потом парсил данные. Для мониторинга можно использовать cron, которому вы и будете скармливать этот скрипт. Единственная проблема - если будете часто использовать cron, можно схлопотать бан. Лучше найти разработчика на специализированных сайтах, типа фриланса, который придумает, как сделать это граммотно.
     
  3. djvavik

    djvavik

    Регистр.:
    27 авг 2013
    Сообщения:
    165
    Симпатии:
    19
    Здравствуйте. API имеется, как оказалось, получил ответ от тех поддержки. Только, как реализовать не знаю. Я так понимаю нужно писать скрипт на JS?


    По API я так понимаю тяжелее реализовать. Может подскажите пример парсинга? По Cron проблем нет.

    P.S. Почитал на просторах интернета, что можно написать парсер на node.js. Вроде все понятно, но нет примеров с авторизацией на сайте.

    Так же понял, что можно спарсить, через PHP, но годного кода совсем не нашел.
     
    Последнее редактирование: 26 апр 2019
  4. Minor

    Minor

    Регистр.:
    16 авг 2012
    Сообщения:
    175
    Симпатии:
    66
    По API реализовать конечно же проще.
    Причем ответ методами GET можно проверить даже через браузер, например если метод /api/claims работает через GET и принимает параметры указанные таблице то запросить сервер можно примерно так
    https://eds.mosreg.ru/api/claims?author=пушкин
    и сайт выдаст ответ в JSON
     
  5. djvavik

    djvavik

    Регистр.:
    27 авг 2013
    Сообщения:
    165
    Симпатии:
    19
    Да, Вы правы. По ссылке https://eds.mosreg.ru/api/claims?status=EXPIRED_RETURN_TO_DD Я получаю данные. Не могли бы направить в нужное русло, как авторизоваться, что бы потом попасть на эту страницу, перевести в более читабельные вид и сохранить в фаил?
     
    Последнее редактирование: 17 май 2019
  6. kmrd

    kmrd Создатель

    Регистр.:
    23 ноя 2016
    Сообщения:
    17
    Симпатии:
    12
    В инете есть множество статей об авторизации через curl, например https://xdan.ru/avtorizacija-na-sajte-pri-pomoshhi-curl-php.html, большинство ухищрений из статьи вам нафиг не надо, форма авторизации довольно простая, главное - сохранять сессию в cookie и передавать их при каждом запросе.
    код будет выглядеть примерно так:
    PHP:
    function request($url,$post 0){
     
    $ch curl_init();
     
    curl_setopt($chCURLOPT_URL$url ); // отправляем на
     
    curl_setopt($chCURLOPT_HEADER0); // пустые заголовки
     
    curl_setopt($chCURLOPT_RETURNTRANSFER1); // возвратить то что вернул сервер
     
    curl_setopt($chCURLOPT_FOLLOWLOCATION1); // следовать за редиректами
     
    curl_setopt($chCURLOPT_CONNECTTIMEOUT30);// таймаут4
     
    curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
     
    curl_setopt($chCURLOPT_COOKIEJARdirname(__FILE__).'/cookie.txt'); // сохранять куки в файл
     
    curl_setopt($chCURLOPT_COOKIEFILE,  dirname(__FILE__).'/cookie.txt');
     
    curl_setopt($chCURLOPT_POST$post!==); // использовать данные в post
     
    if($post)
     
    curl_setopt($chCURLOPT_POSTFIELDS$post);
     
    $data curl_exec($ch);
     
    curl_close($ch);
     return 
    $data;
    }
    request'https://eds.mosreg.ru/login',
     array(
     
    'login-form-email'=>'[email protected]'// логин
     
    'login-form-password'=>'password'// пароль
    )); // авторизация
    $data=request('https://eds.mosreg.ru/api/claims?status=EXPIRED_RETURN_TO_DD'); // голые данные
    echo $data;
    если всё получается - $data_array=json_decode($data) и уже с массивом пляшете
     
    djvavik и Minor нравится это.
  7. Minor

    Minor

    Регистр.:
    16 авг 2012
    Сообщения:
    175
    Симпатии:
    66
    Смотри, по авторизации есть два варианта работы через API
    Первый - самый популярный и в тоже время более простой - когда ты на каждом запросе передаешь апи ключ, ну примерно так https://eds.mosreg.ru/api/claims?status=EXPIRED_RETURN_TO_DD&apikey=1232142nnnk56456
    Второй - это любой другой вариант, в частности в твоем случае нужно передать POST запрос содержащий логин и пароль, как будто ты логинишься в сервис. Код постом выше как раз это и делает, поэтому скажем ему "Мне нравится".

    Затем при каждом запросе на API нужно будет передавать куку , содержащие авторизационные данные - это тоже автор поста выше написал, еще и код сразу приложил. По крайней мере по другому исходя из документации никак - потому что это тупо не написано.

    Ответ от сервиса будет приходить в формате JSON, раскодируем его через json_decode опять же приведенный выше и работаем.
     
    djvavik нравится это.
  8. djvavik

    djvavik

    Регистр.:
    27 авг 2013
    Сообщения:
    165
    Симпатии:
    19
    Создать документ, к примеру eds.php, разместить код. Права 664
    Создать документ site.ru/cookie.txt, поменять путь в коде на этот? Права 775

    При переходе по ссылке site.ru/eds.php - на странице показывается сам код почему то...((
     
  9. Minor

    Minor

    Регистр.:
    16 авг 2012
    Сообщения:
    175
    Симпатии:
    66
    не включен РНР :pop: там где файл создается.
    это хостинг или локальное что-то?
     
  10. djvavik

    djvavik

    Регистр.:
    27 авг 2013
    Сообщения:
    165
    Симпатии:
    19
    Хостинг. Что включить нужно, подскажите? Я хостеру напишу.