1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!
    Скрыть объявление

Работаем с API, часть 2

Пример работы с addTask

Метки:
  1. Support Денис
    Доброе время суток, уважаемые читатели!
    Как и было обещано в предыдущей статье, рассмотрим работу с методом addTask

    В данном примере мы будем добавлять задание, собирающее email'ы с помощью парсера HTML::EmailExtractor HTML::EmailExtractor.
    Настройки задания в интерфейсе A-Parser выглядят так:
    [​IMG]
    Как получить JSON с настройками для запроса API было рассмотрено в предыдущей статье.

    Добавим в наш класс EngineWeb несколько методов, а именно :
    • GetEmailJson - метод формирующий json с настройками задания
    • addTaskEmail1 - метод отправляющий запрос API для добавления задания в очередь
    • CheckStatus - метод отправляющий запрос API для получения статуса задачи
    Метод GetEmailJson принимает в качестве параметра ссылку на сайт, который будем парсить и подставляет его в формируемый json:
    Код:
     /*метод формирующий JSON для сбора email с помощью AddTask*/
         function GetEmailJson($url,$preset = false){
          $json = json_encode([
            'action' => 'addTask',
            'password' => $this->pass,
             'data' => [
                'preset' => 'default',
                'configPreset' => 'default',
                'parsers' => [
                  [
                    'HTML::EmailExtractor',
                    'default',
                    [
                      'type' => 'options',
                      'id' => 'parseLevel',
                      'value' => 2,
                    ],
                    [
                      'type' => 'unique',
                      'result' => [
                        'mails',
                        'mail'
                      ],
                      'uniqueType' => 'string',
                      'uniqueGlobal' => true,
                    ],
                    [
                      'type' => 'override',
                      'id' => 'user-agent',
                      'value' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
                    ]
                  ]
                ],
                 'resultsFormat' => '$p1.preset',
                 'resultsSaveTo' => 'file',
                 'resultsFileName' => '$datefile.format().txt',
                 'additionalFormats' => [],
                 'resultsUnique' => 'no',
                 'queriesFrom' => 'text',
                  'queries' => [ $url ],
                  'uniqueQueries' => true,
                  'saveFailedQueries' => false,
                  'iteratorOptions' => [
                    'onAllLevels' => false,
                    'queryBuildersAfterIterator' => false,
                    'queryBuildersOnAllLevels' => false,
                  ],
                  'resultsOptions' => [
                    'overwrite' => false,
                    'writeBOM' => false,
                  ],
                  'doLog' => 'no',
    
             ],
          ]);
          return $json;
        }
    
    В методе addTaskEmail1 мы вызываем вышеописанный метод, получаем json с необходимыми настройками, и отправляем запрос для добавления задания в очередь.
    Код:
    function addTaskEmail1($url){
          $json = $this->GetEmailJson($url);
          $ch = curl_init($this->path);
          curl_setopt($ch, CURLOPT_POST, 1);
          curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
          curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($json)));
          curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/plain; charset=UTF-8'));
          $response = curl_exec($ch);
           curl_close($ch);
           var_dump($response);
        }
    Нажимаем на кнопку и получаем ответ:
    [​IMG]
    Как видим, в результате приходит id добавленного в очередь задания. Теперь нужно в методе CheckStatus описать получение статуса задачи по его id:
    Код:
    function CheckStatus($idTask){
          $json = json_encode([
             'action' => 'getTaskState',
             'password' => $this->pass,
             'data' => [
                'taskUid' => $idTask
             ],
          ]);
          $ch = curl_init($this->path);
          curl_setopt($ch, CURLOPT_POST, 1);
          curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
          curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($json)));
          curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/plain; charset=UTF-8'));
          $response = curl_exec($ch);
           curl_close($ch);
           var_dump($response);
        }
    Проверяем:
    [​IMG]
    Ответ со статусом задании получен получен.

    Точно по такому же принципу можно получить ссылку на файл результата с помощью метода getTaskResultsFile и многое другое.

    Документация по работе с А-Парсером через API доступна здесь.