Вопрос про API

  • Автор темы Автор темы Dmitron
  • Дата начала Дата начала

Dmitron

A-Parser Enterprise License
A-Parser Enterprise
Не могу понять как на php применить, то что отдает парсер в виде JSON for API
Как потом использовать эти строки для запуска задания с помощью php

Использую такой код

PHP:
<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$aparser = 'http://127.0.0.1:9091/API';

$request = json_encode(array(
    'action' => 'oneRequest',
    'password' => 'pass',
   
    'data' => array (
        'preset' => 'default',
        'parser' => 'Net::HTTP',
        'query' => 'https://ya.ru'
    ),
));

$ch = curl_init($aparser);

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($request)));
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);
//echo $response['data'];
print_r ($response['data']);

как мне вставить вот это в php

Код:
{
  'password' => 'pass',
  'action' => 'addTask',
 
  'data': {
    'preset' => 'test',
    'configPreset' => '500 Threads',
    'parsers': [
      [
        'Net::HTTP',
        'default'
      ]
    ],
    'resultsFormat' => '$p1.data',
    'resultsSaveTo' => 'file',
    'resultsFileName' => '$datefile.format().txt',
    'additionalFormats': [],
    'resultsUnique' => 'no',
    'queriesFrom' => 'text',
    'queryFormat': [
      '$query/download?from=details'
    ],
    'uniqueQueries': false,
    'saveFailedQueries': false,
    'iteratorOptions': {
      'onAllLevels': false,
      'queryBuildersAfterIterator': false,
      'queryBuildersOnAllLevels': false
    },
    'resultsOptions': {
      'overwrite': false
    },
    'doLog' => 'no',
    'keepUnique' => 'No',
    'moreOptions': false,
    'resultsPrepend' => '',
    'resultsAppend' => '',
    'queryBuilders': [],
   
    'resultsBuilders': [
      {
        'source': [
          0,
          'data'
        ],
        'type' => 'regex',
        'regex' => '<a id=\'link\' (?:[^>]*?\\s+)?href=\'([^\']*)\'',
        'regexType': null,
        'to': [
          'data'
        ]
      }
    ],
    'configOverrides': [],
    'runTaskOnComplete': null,
    'useResultsFileAsQueriesFile': false,
    'runTaskOnCompleteConfig' => 'default',
    'toolsJS' => '',
    'prio': 5,
    'queries' => 'https://domain.com/'
  }
}

и отдельный вопрос, можно ли в oneRequest использовать настройки для парсинга, например resultsBuilders?
 
Здравствуйте.
Ваш код вставляете сюда
Код:
$request = json_encode(array(
ваш код;
));
Только вместо фигурных скобок обрамляйте в array()
То есть вместо { - array(
вместо } - )
И уточните вы addTask хотите сделать или OneRequest ?
Конструктор результатов, запросов и т.д в OneRequest использовать нельзя.
 
Последнее редактирование:
И уточните вы addTask хотите сделать или OneRequest ?
Конструктор результатов, запросов и т.д в OneRequest использовать нельзя.

Спасибо! Получается, чтобы получить разовый результат необходимо создать и запустить задание, получить его номер и потом получить результат?
 
Спасибо! Получается, чтобы получить разовый результат необходимо создать и запустить задание, получить его номер и потом получить результат?
Если нужны конструкторы то да.
Ссылку на файл результат получаем с помощью этого метода
https://a-parser.com/wiki/user-api/#gettaskresultsfile
 
Если нужны конструкторы то да.
Ссылку на файл результат получаем с помощью этого метода
https://a-parser.com/wiki/user-api/#gettaskresultsfile
А если сохранить задание в пресет с нужными функциями и потом просто запускать его, то можно использовать OneRequest ?
 
OneRequest это разовый запрос. C нужными функциями это какими ? Если вы имеете ввиду настройки для пресета то да.
Пример работы с OneRequest
Код:
$aparser = 'http://127.0.0.1:9091/API';

$request = json_encode(array(
    'action' => 'oneRequest',
    'data' => array (
        'parser' => 'SE::Google::Modern',
        'preset' => 'default',
        'query' => 'test',
        'options' => array(
            array(
                "type" => "override",
            "id" => "Util_ReCaptcha2_preset",
            "value" => "Antigate",
            ),
        ),
    ),
    'password' => ''
));

$ch = curl_init($aparser);

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($request)));
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);
echo $response['data']['resultString'];
В графе $preset=> Можете указать любой ранее созданный вами пресет для этого парсера.
 
OneRequest это разовый запрос. C нужными функциями это какими ? Если вы имеете ввиду настройки для пресета то да.
Пример работы с OneRequest
Код:
$aparser = 'http://127.0.0.1:9091/API';

$request = json_encode(array(
    'action' => 'oneRequest',
    'data' => array (
        'parser' => 'SE::Google::Modern',
        'preset' => 'default',
        'query' => 'test',
        'options' => array(
            array(
                "type" => "override",
            "id" => "Util_ReCaptcha2_preset",
            "value" => "Antigate",
            ),
        ),
    ),
    'password' => ''
));

$ch = curl_init($aparser);

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($request)));
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);
echo $response['data']['resultString'];
В графе $preset=> Можете указать любой ранее созданный вами пресет для этого парсера.

у меня не хочет работать парсер Net::HTTP

Выдает ошибку
Notice: Undefined index: data in /home/p/test/domain.ru/public_html/get.php on line 32
 

PHP
Код:
<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$aparser = 'http://ip_to_aparser:9091/API';

$request = json_encode(array(
    'action' => 'oneRequest',
    'password' => 'мой пароль',
    
    'data' => array (
        'preset' => 'test',
        'parser' => 'Net::HTTP'
    ),
));

$ch = curl_init($aparser);

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($request)));
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);
//echo $response['data'];
print_r ($response['data']);

Пресет
6bd61ac954472210137ad0a9286f6364.png
 
2VqxI


Так же уточню. Что тот JSON который вы получаете используя ShowApiQuery(Получить API запрос) это пресет настройки задания, для OneRequest достаточно использовать JSON с настройками пресета.
Так же прошу прощение за некорректный ответ в вопросе по передаче JSON в PHP.
Необходимо использовать heredoc синтаксис с одинарными кавычками, в этом случае JSON не будет ломаться и задание успешно добавиться:
Код:
$json = <<<'JSON'
Тут сам JSON
JSON;
 
Последнее редактирование:
Так же уточню. Что тот JSON который вы получаете используя ShowApiQuery(Получить API запрос) это пресет настройки задания, для OneRequest достаточно использовать JSON с настройками пресета.

Что то я не пойму, давайте ещё раз...
Я создаю пресет в парсере, называю его test и в нем настраиваю всё что мне нужно, а именно конструктор результатов $p1.data - Content data, настраиваю формат запроса, формат результата.

Далее иду в php файл и вписываю название готового пресета в 'preset' => 'test', указываю парсер 'parser' => 'Net::HTTP'
и запрос 'query' => 'что то'

Всё это дело обрабатываю в oneRequest

На выходе получаю ошибку
Notice: Undefined index: data in /home/p/test/domain.ru/public_html/get.php on line 32

А вот если ставлю название пресета default, то выполняется, но без моих настроек.
Так получается нельзя настроить пресет и потом запросить его при помощи API ?
 
Вы создали задание test, а нужно указать пресет парсера
TfTb0

То есть либо используйте AddTask, либо создайте пресет для парсера Net::HTTP в котором переопределите формат результата так как надо, и указывайте его и используйте OneRequest
 
Вы создали задание test, а нужно указать пресет парсера
То есть либо используйте AddTask, либо создайте пресет для парсера Net::HTTP в котором переопределите формат результата так как надо, и указывайте его и используйте OneRequest

а за что отвечают

"id" => "Util_ReCaptcha2_preset",
"value" => "Antigate"

в options?
 
Есть пресет - это сохраненное задание (полностью, со всеми парсерами и конструкторами). Его можно запускать только с помощью addTask. И в addTask при запуске сохраненного задания в значении preset нужно указать имя сохраненного задания.
f0dru_180427122157.png


А есть пресет настроек - это сохраненные настройки какого-либо парсера.
c5hu4_180427122237.png

С помощью oneRequest/bulkRequest нельзя запускать сохраненные задания. Можно выполнить только запрос к нужному парсеру с его пресетом настроек. Т.е. в oneRequest/bulkRequest значение preset - это именно пресет настроек парсера, к которому вы делаете запрос.
 
Спасибо, теперь понял, что не всё так просто как казалось :)
Какой командой можно вывести результат работы парсера, чтобы не ссылка на скачивания была, а именно результат?
 
Результатом работы One/BulkRequest и есть результат.
Если же используете AddTask то тогда получаете ID задания в ответе, и уже по этому ID, используя метод getTaskResultsFile получаете ссылку на скачивание файла.
 
Результатом работы One/BulkRequest и есть результат.
Если же используете AddTask то тогда получаете ID задания в ответе, и уже по этому ID, используя метод getTaskResultsFile получаете ссылку на скачивание файла.
Значит при использовании AddTask кроме ссылки на скачивая не получить результат, ОК.

А как тогда работать с результатами, если к примеру мне нужно получить при помощи php определенный текст со страницы и я использую парсер Net::HTTP и если One/BulkRequest для этого дела не подходит, потому что не настраивается как мне надо, а используя AddTask, я могу получить только ссылку на скачивание результата?
 
Выбирать текст из кода страницы можно и в One/BulkRequest
Вот такой пресет
2b6pj

Выполняется так
Код:
$aparser = 'http://127.0.0.1:9091/API';

$request = json_encode(array(
    'action' => 'oneRequest',
    'password' => '',
   
    'data' => array (
        'preset' => 'default',
        'parser' => 'Net::HTTP',
         'query' => 'https://a-parser.com/',
        'options' => array(
            array(
              "type" => "override",
          "id" => "formatresult",
          "value" => '$title'
         ),
         array (
           "type" => "customResult",
          "result"=> "data",
          "regex"=> "<title>([\\s\\S]+?)<\\/title",
          "regexType"=> "i",
          "resultType"=> "flat",
          "arrayName" => "",
          "results"=> array(
            "title"
          )
         )),
    ),
));
$ch = curl_init($aparser);

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($request)));
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);
//echo $response['data'];
print_r ($response);
Данный пресет собирает title на странице.
 
Назад
Верх