<?php
namespace Drupal\myservice\Plugin\QueueWorker;

use Drupal\Core\Queue\QueueWorkerBase;

/**
 * Process a queue.
 *
 * @QueueWorker(
 *   id = "my_test_queue",
 *   title = @Translation("My queue worker"),
 *   cron = {"time" = 60}
 * )
 */
class MyQueueWorker extends QueueWorkerBase {

  /**
   * {@inheritdoc}
   */
  public function existNode($type, $id){
    $query = \Drupal::entityQuery('node')
      ->condition('type', $type)
      ->condition('field_swapi_id', $id);
   $nids = $query->execute();
   return $nids;
  }

  public function nodeType($api_url){

    $array_of_url = explode('/', $api_url); //разделяю адрес АПИ на массив элементов
    $type_of_node = $array_of_url[4]; // название необходимой ноды - ВСЕГДА четвертый элемент данного массива
    return $type_of_node;
  }

  public function nodeId($api_url){
    $array_of_url = explode('/', $api_url); //разделяю адрес АПИ на массив элементов
    $node_id = $array_of_url[5];
    return $node_id;
  }

  // 1 API
  public function processItem($data)
  {

      $queue = \Drupal::queue('my_node_queue'); //объявляю очередь
      $secondQueue = \Drupal::queue('my_second_node_queue');

      $url = $data;


    do {
      $request = \Drupal::service('myservice.my')->getResult($url);
      $result = $request->results; // выкинул служебную информацию
      foreach ($result as $row_item){

        $type = $this->nodeType($row_item->url); // получаю ID ноды для дальнейшей проверки из БД
        $id = $this -> nodeId($row_item->url); // получаю тип ноды для дальнейшей проверки из БД
        $nids = $this->existNode($type, $id); // вызываю функцию проверки ноды в БД, если есть, то вернется ID

        if (empty($nids)){
          $queue->createItem($row_item);
        }
        else {
          $secondQueue->createItem($row_item);
        }

      }

      $url = $request->next;

    } while ($url);
  }
}

