1. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 400+ и мы растем!
    Скрыть объявление

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

Чистим очередь задач используя API

Метки:
  1. Support Денис
    Доброе время суток, уважаемые читатели!
    В поддержку часто поступает вопрос, как можно с помощью API автоматизировать удаление завершеных заданий. В этой статье мы решим эту задачу.
    Давайте создадим файл clearqueue.php и в нем опишем клаcc Queue
    Код:
    class Queue{
         protected $pass,$path;
         function __construct($pass,$path){
             $this->pass = $pass;
             $this->path = $path;
         }
     }
    Для удаления задания из очереди нужно знать его ID, поэтому давайте опишем метод который получает список ID завершенных заданий. Для получения списка заданий будем использовать метод getTaskList
    Код:
    /*метод возвращающий массив id завершенных заданий*/
         function getTaskList(){
             $json = json_encode([
                 'password' => $this->pass,
                 'action' => 'getTasksList',
                 "data" => [
                     'completed' => 1,
                 ]
             ]);
             $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);
              $response = json_decode($response, true);
              return $response['data'];
         }
    Массив заданий мы получили, теперь опишем метод удаляющий задания. Для удаления будем использовать метод ChangeTaskStatus изменяя статус задания на deleting
    Код:
    /*Метод удаляющий задания из очереди. В качестве параметра принимает массив задач*/
         function ClearQueue($tasks){
             foreach($tasks as $task){
                 $json = json_encode([
                     'password' => $this->pass,
                     'action' => 'changeTaskStatus',
                     "data" => [
                         'taskUid' => $task,
                         'toStatus' => 'deleting',
                     ]
                 ]);
                 $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);
             }
         }
    Теперь в index.php создадим объект класса Queue и вызовем метод очищающий очередь.
    Код:
    <?php
    require_once('clearqueue.php');
    $queue = new Queue('','http://127.0.0.1:9091/API');
    $tasks = $queue->getTaskList();
    $queue->ClearQueue($tasks);
    Запускаем. Проверяем очередь задач.
    [​IMG]
    Задача решена.
    С документацией по API вы можете ознакомиться по этой ссылке.