Не могу понять как на php применить, то что отдает парсер в виде JSON for API Как потом использовать эти строки для запуска задания с помощью php Использую такой код PHP: <?phpini_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 использовать нельзя.
Спасибо! Получается, чтобы получить разовый результат необходимо создать и запустить задание, получить его номер и потом получить результат?
Если нужны конструкторы то да. Ссылку на файл результат получаем с помощью этого метода 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=> Можете указать любой ранее созданный вами пресет для этого парсера.
у меня не хочет работать парсер 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']); Пресет
Так же уточню. Что тот JSON который вы получаете используя ShowApiQuery(Получить API запрос) это пресет настройки задания, для OneRequest достаточно использовать JSON с настройками пресета. Так же прошу прощение за некорректный ответ в вопросе по передаче JSON в PHP. Необходимо использовать heredoc синтаксис с одинарными кавычками, в этом случае JSON не будет ломаться и задание успешно добавиться: Код: $json = <<<'JSON' Тут сам JSON 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, а нужно указать пресет парсера То есть либо используйте AddTask, либо создайте пресет для парсера Net::HTTP в котором переопределите формат результата так как надо, и указывайте его и используйте OneRequest
Есть пресет - это сохраненное задание (полностью, со всеми парсерами и конструкторами). Его можно запускать только с помощью addTask. И в addTask при запуске сохраненного задания в значении preset нужно указать имя сохраненного задания. А есть пресет настроек - это сохраненные настройки какого-либо парсера. С помощью oneRequest/bulkRequest нельзя запускать сохраненные задания. Можно выполнить только запрос к нужному парсеру с его пресетом настроек. Т.е. в oneRequest/bulkRequest значение preset - это именно пресет настроек парсера, к которому вы делаете запрос.
Спасибо, теперь понял, что не всё так просто как казалось Какой командой можно вывести результат работы парсера, чтобы не ссылка на скачивания была, а именно результат?
Результатом работы One/BulkRequest и есть результат. Если же используете AddTask то тогда получаете ID задания в ответе, и уже по этому ID, используя метод getTaskResultsFile получаете ссылку на скачивание файла.
Значит при использовании AddTask кроме ссылки на скачивая не получить результат, ОК. А как тогда работать с результатами, если к примеру мне нужно получить при помощи php определенный текст со страницы и я использую парсер Net::HTTP и если One/BulkRequest для этого дела не подходит, потому что не настраивается как мне надо, а используя AddTask, я могу получить только ссылку на скачивание результата?
Выбирать текст из кода страницы можно и в One/BulkRequest Вот такой пресет Выполняется так Код: $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 на странице.