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

Вопрос про API

Тема в разделе "Техническая поддержка", создана пользователем Dmitron, 27 апр 2018.

  1. Dmitron

    Dmitron A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 май 2017
    Сообщения:
    143
    Симпатии:
    7
    Не могу понять как на 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($chCURLOPT_POST1);
    curl_setopt($chCURLOPT_POSTFIELDS$request);
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    curl_setopt($chCURLOPT_HTTPHEADER, array('Content-Length: ' strlen($request)));
    curl_setopt($chCURLOPT_HTTPHEADER, array('Content-Type: text/plain; charset=UTF-8'));

    $response curl_exec($ch);
    curl_close($ch);

    $response json_decode($responsetrue);
    //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?
     
  2. Support Денис

    Support Денис A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 июн 2017
    Сообщения:
    586
    Симпатии:
    185
    Здравствуйте.
    Ваш код вставляете сюда
    Код:
    $request = json_encode(array(
    ваш код;
    ));
    Только вместо фигурных скобок обрамляйте в array()
    То есть вместо { - array(
    вместо } - )
    И уточните вы addTask хотите сделать или OneRequest ?
    Конструктор результатов, запросов и т.д в OneRequest использовать нельзя.
     
    #2 Support Денис, 27 апр 2018
    Последнее редактирование: 27 апр 2018
    Dmitron нравится это.
  3. Dmitron

    Dmitron A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 май 2017
    Сообщения:
    143
    Симпатии:
    7
    Спасибо! Получается, чтобы получить разовый результат необходимо создать и запустить задание, получить его номер и потом получить результат?
     
  4. Support Денис

    Support Денис A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 июн 2017
    Сообщения:
    586
    Симпатии:
    185
    Если нужны конструкторы то да.
    Ссылку на файл результат получаем с помощью этого метода
    https://a-parser.com/wiki/user-api/#gettaskresultsfile
     
  5. Dmitron

    Dmitron A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 май 2017
    Сообщения:
    143
    Симпатии:
    7
    А если сохранить задание в пресет с нужными функциями и потом просто запускать его, то можно использовать OneRequest ?
     
  6. Support Денис

    Support Денис A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 июн 2017
    Сообщения:
    586
    Симпатии:
    185
    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=> Можете указать любой ранее созданный вами пресет для этого парсера.
     
  7. Dmitron

    Dmitron A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 май 2017
    Сообщения:
    143
    Симпатии:
    7
    у меня не хочет работать парсер Net::HTTP

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

    Support Денис A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 июн 2017
    Сообщения:
    586
    Симпатии:
    185
    Покажите код ,того как вы пытаетесь сделать запрос на php .
     
  9. Dmitron

    Dmitron A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 май 2017
    Сообщения:
    143
    Симпатии:
    7
    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']);
    Пресет
    [​IMG]
     
  10. Support Денис

    Support Денис A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 июн 2017
    Сообщения:
    586
    Симпатии:
    185
    [​IMG]

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

    Dmitron A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 май 2017
    Сообщения:
    143
    Симпатии:
    7
    Что то я не пойму, давайте ещё раз...
    Я создаю пресет в парсере, называю его 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 ?
     
  12. Support Денис

    Support Денис A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 июн 2017
    Сообщения:
    586
    Симпатии:
    185
    Вы создали задание test, а нужно указать пресет парсера
    [​IMG]
    То есть либо используйте AddTask, либо создайте пресет для парсера Net::HTTP в котором переопределите формат результата так как надо, и указывайте его и используйте OneRequest
     
    Dmitron нравится это.
  13. Dmitron

    Dmitron A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 май 2017
    Сообщения:
    143
    Симпатии:
    7
    а за что отвечают

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

    в options?
     
  14. Support

    Support Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    16 мар 2012
    Сообщения:
    4.377
    Симпатии:
    2.107
    Есть пресет - это сохраненное задание (полностью, со всеми парсерами и конструкторами). Его можно запускать только с помощью addTask. И в addTask при запуске сохраненного задания в значении preset нужно указать имя сохраненного задания.
    [​IMG]

    А есть пресет настроек - это сохраненные настройки какого-либо парсера.
    [​IMG]
    С помощью oneRequest/bulkRequest нельзя запускать сохраненные задания. Можно выполнить только запрос к нужному парсеру с его пресетом настроек. Т.е. в oneRequest/bulkRequest значение preset - это именно пресет настроек парсера, к которому вы делаете запрос.
     
    Dmitron нравится это.
  15. Support Денис

    Support Денис A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 июн 2017
    Сообщения:
    586
    Симпатии:
    185
    Это настройки которые добавляются через override.
    [​IMG]
     
  16. Dmitron

    Dmitron A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 май 2017
    Сообщения:
    143
    Симпатии:
    7
    Спасибо, теперь понял, что не всё так просто как казалось :)
    Какой командой можно вывести результат работы парсера, чтобы не ссылка на скачивания была, а именно результат?
     
  17. Support Денис

    Support Денис A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 июн 2017
    Сообщения:
    586
    Симпатии:
    185
    Результатом работы One/BulkRequest и есть результат.
    Если же используете AddTask то тогда получаете ID задания в ответе, и уже по этому ID, используя метод getTaskResultsFile получаете ссылку на скачивание файла.
     
  18. Dmitron

    Dmitron A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 май 2017
    Сообщения:
    143
    Симпатии:
    7
    Значит при использовании AddTask кроме ссылки на скачивая не получить результат, ОК.

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

    Support Денис A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 июн 2017
    Сообщения:
    586
    Симпатии:
    185
    Выбирать текст из кода страницы можно и в One/BulkRequest
    Вот такой пресет
    [​IMG]
    Выполняется так
    Код:
    $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 на странице.
     
    Dmitron нравится это.
  20. Dmitron

    Dmitron A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 май 2017
    Сообщения:
    143
    Симпатии:
    7
    Во! То что надо, огромное спасибо!
     
    Support нравится это.

Поделиться этой страницей