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

Ошибка Callback url через api не работает

Тема в разделе "Отклоненные задачи", создана пользователем uroboka, 31 май 2018.

  1. uroboka

    uroboka A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    3 окт 2015
    Сообщения:
    14
    Симпатии:
    4
    при указании callback url через конструктор заданий, все срабатывает нормально
    при указании callback url через api - url не вызывается по завершению (возможно через апи не добавили поддержку callURLOnComplete)
     
  2. Forbidden

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

    Регистрация:
    9 мар 2013
    Сообщения:
    3.339
    Симпатии:
    1.799
    работает, также работа по API ничем не отличается от добавления задания через интерфейс
     
  3. fsmakov

    fsmakov A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    10 янв 2014
    Сообщения:
    19
    Симпатии:
    5
    Не работает вызов урл через Модуль на PHP
    похоже надо править этот файл aparser-api-php-client.php
     
  4. fsmakov

    fsmakov A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    10 янв 2014
    Сообщения:
    19
    Симпатии:
    5
    Ага, поправил клиента и заработало

    PHP:
    <?php

    /**
     * The A-Parser API Client
     *
     * This client assists in making calls to A-Parser API.
     *
     * @url https://github.com/ice2038/aparser-api-php-client
     * @url http://a-parser.com/wiki/user-api/
     *
     * @author Pavel Zima <[email protected]>
     * @version 0.3
     */
    class Aparser
    {
        
    /**
         * @var string $password The password for the A-Parser API
         */
        
    private $password;

        
    /**
         * @var string $host The base URL to use for calls to the API
         */
        
    private $host;

        
    /**
         * @var array
         */
        
    protected $options;

        
    /**
         * @param string $host
         * @param string $password
         * @param array $options
         */
        
    public function __construct($host$password$options = array())
        {
            
    $this->setHost($host);
            
    $this->setPassword($password);

            
    $this->addOption('debug'FALSE);

            
    $this->configure($options);
        }

        
    /**
         * Adds a new option value with a default value.
         *
         * @param string $name The option name
         * @param mixed $value The default value
         */
        
    public function addOption($name$value null)
        {
            
    $this->options[$name] = $value;
        }

        
    /**
         * Changes an option value.
         *
         * @param string $name The option name
         * @param mixed $value The value
         * @throws InvalidArgumentException
         */
        
    public function setOption($name$value)
        {
            if (!
    in_array($namearray_keys($this->options))) {
                throw new 
    InvalidArgumentException(sprintf('%s does not support the following option: \'%s\'.'get_class($this), $name));
            }

            
    $this->options[$name] = $value;
        }

        
    /**
         * Gets an option value.
         *
         * @param string $name The option name
         *
         * @return mixed The option value
         */
        
    protected function getOption($name)
        {
            return isset(
    $this->options[$name]) ? $this->options[$name] : null;
        }

        
    /**
         * Returns true if the option exists.
         *
         * @param  string $name The option name
         *
         * @return bool true if the option exists, false otherwise
         */
        
    protected function hasOption($name)
        {
            return 
    array_key_exists($name$this->options);
        }

        
    /**
         * Configures the current object.
         * This method allows set options during object creation
         *
         * @param array $options An array of options
         * @see __construct()
         */
        
    protected function configure($options = array())
        {
            if (!empty(
    $options))
                foreach (
    $options as $name => $value) {
                    
    $this->addOption($name$value);
                }
        }

        
    /**
         * @param string $password
         */
        
    public function setPassword($password)
        {
            
    $this->password $password;
        }

        
    /**
         * @param string $url
         */
        
    public function setHost($url)
        {
            
    $this->host $url;
        }

        
    /**
         * @throws InvalidArgumentException
         *
         * @return string
         */
        
    protected function getPassword()
        {
            if (!
    is_string($this->password) && !strlen($this->password)) {
                throw new 
    InvalidArgumentException('Current Password is incorrect!');
            }
            return 
    $this->password;
        }

        
    /**
         * @throws InvalidArgumentException
         * @return string
         */
        
    protected function getHost()
        {
            if (!
    is_string($this->host) && !strlen($this->host)) {
                throw new 
    InvalidArgumentException('Current URL is incorrect!');
            }
            return 
    $this->host;
        }

        
    /**
         * The ping method, the server should respond by invoking "pong" on
         * the callback data
         *
         * @return string
         */
        
    public function ping()
        {
            return 
    $this->makeRequest(__FUNCTION__);
        }

        
    /**
         * Return total information (pid, version, tasks in queue);
         *
         * @return array
         */
        
    public function info()
        {
            return 
    $this->makeRequest(__FUNCTION__);
        }

        
    /**
         * Getting a list of live proxies
         *
         * @return array
         */
        
    public function getProxies()
        {
            return 
    $this->makeRequest(__FUNCTION__);
        }
        
        
    /**
         * Installation of the current preset of proxy checker
         *
         * @param string $preset
         * @return array
         */
        
    public function setProxyCheckerPreset($preset 'default')
        {
            return 
    $this->makeRequest(__FUNCTION__, array('preset' => $preset));
        }

        
    /**
         * Single request parsing, you can use any parser and preset. This
         * will generate the strings in accordance with the format of the
         * result set in the preset, as well as the full log parser.
         *
         * @param string $query
         * @param string $parser
         * @param string $preset
         * @param int $rawResults
         * @param array $options
         * @return array
         */
        
    public function oneRequest($query$parser$preset 'default'$rawResults 0$options = array())
        {
            return 
    $this->makeRequest(
                
    __FUNCTION__,
                array(
                    
    'query' => $query,
                    
    'parser' => $parser,
                    
    'preset' => $preset,
                    
    'rawResults' => $rawResults,
                    
    'options' => $options
                
    )
            );
        }

        
    /**
         * Bulk request parsing, you can use any parser and preset, as well
         * as the quantity indicated in the threads to produce parsing.
         * This will generate the strings in accordance with the format of
         * the result set in the preset, as well as the full log parser for
         * each thread.
         *
         * @param array $queries
         * @param string $parser
         * @param string $preset
         * @param int $threads
         * @param int $rawResults
         * @param array $options
         * @return array
         */
        
    public function bulkRequest($queries$parser$preset 'default'$threads 5$rawResults 0$options = array())
        {
            return 
    $this->makeRequest(
                
    __FUNCTION__,
                array(
                    
    'queries' => $queries,
                    
    'parser' => $parser,
                    
    'preset' => $preset,
                    
    'threads' => $threads,
                    
    'rawResults' => $rawResults,
                    
    'options' => $options,
                )
            );
        }

        
    /**
         * Getting of the parser settings and presets
         *
         * @param $parser
         * @param string $preset
         * @return array
         */
        
    public function getParserPreset($parser$preset 'default')
        {
            return 
    $this->makeRequest(
                
    __FUNCTION__,
                array(
                    
    'parser' => $parser,
                    
    'preset' => $preset,
                )
            );
        }

        
    /**
         * Add a task to turn all options are similar to those that are
         * specified in the interface Add Task
         *
         * @param string $configPreset
         * @param string $taskPreset
         * @param string $queriesFrom file|text
         * @param array $queries
         * @param array $options
         * @return string taskUid
         * @throws InvalidArgumentException
         */
        
    public function addTask($configPreset$taskPreset$queriesFrom$queries$options = array())
        {
            
    $data['configPreset'] = $configPreset $configPreset 'default';

            if(
    $taskPreset) {
                
    $data['preset'] = $taskPreset;
            } else {
                
    $data['resultsFileName'] = isset($options['resultsFileName']) ? $options['resultsFileName'] : '$datefile.format().txt';
                
    $data['parsers']         = isset($options['parsers'])         ? $options['parsers']         : array();
                
    $data['uniqueQueries']   = isset($options['uniqueQueries'])   ? $options['uniqueQueries']   : 0;
                
    $data['keepUnique']      = isset($options['keepUnique'])      ? $options['keepUnique']      : 0;
                
    $data['resultsPrepend']  = isset($options['resultsPrepend'])  ? $options['resultsPrepend']  : '';
                
    $data['moreOptions']     = isset($options['moreOptions'])     ? $options['moreOptions']     : '';
                
    $data['resultsUnique']   = isset($options['resultsUnique'])   ? $options['resultsUnique']   : 'no';
                
    $data['doLog']           = isset($options['doLog'])           ? $options['doLog']           : 'no';
                
    $data['queryFormat']     = isset($options['queryFormat'])     ? $options['queryFormat']     : '$query';
                
    $data['resultsSaveTo']   = isset($options['resultsSaveTo'])   ? $options['resultsSaveTo']   : 'file';
                
    $data['configOverrides'] = isset($options['configOverrides']) ? $options['configOverrides'] : array();
                
    $data['resultsFormat']   = isset($options['resultsFormat'])   ? $options['resultsFormat']   : '';
                
    $data['resultsAppend']   = isset($options['resultsAppend'])   ? $options['resultsAppend']   : '';
                
    $data['queryBuilders']   = isset($options['queryBuilders'])   ? $options['queryBuilders']   : array();
                
    $data['resultsBuilders'] = isset($options['resultsBuilders']) ? $options['resultsBuilders'] : array();
                
    $data['callURLOnComplete'] = isset($options['callURLOnComplete']) ? $options['callURLOnComplete'] : '';
            }

            switch(
    $queriesFrom){
                case 
    'file':
                    
    $data['queriesFrom'] = 'file';
                    
    $data['queriesFile'] = isset($options['queriesFile']) ? $options['queriesFile'] : FALSE;
                    break;
                case 
    'text':
                    
    $data['queriesFrom'] = 'text';
                    
    $data['queries'] = $queries $queries : array();
                    break;
                default:
                    throw new 
    InvalidArgumentException('Argument $queriesFrom is incorrect!');
            }

            return 
    $this->makeRequest(__FUNCTION__$data);
        }

        
    /**
         * Getting the status of task by uid
         *
         * @param int $taskUid
         * @return array
         */
        
    public function getTaskState($taskUid)
        {
            return 
    $this->makeRequest(__FUNCTION__, array('taskUid' => $taskUid));
        }

        
    /**
         * Getting configuration task by uid
         *
         * @param int $taskUid
         * @return array
         */
        
    public function getTaskConf($taskUid)
        {
            return 
    $this->makeRequest(__FUNCTION__, array('taskUid' => $taskUid));
        }

        
    /**
         * Change status of a task by id
         *
         * @param int $taskUid
         * @param string $toStatus starting|pausing|stopping|deleting
         * @return array
         */
        
    public function changeTaskStatus($taskUid$toStatus)
        {
            return 
    $this->makeRequest(__FUNCTION__, array('taskUid' => $taskUid'toStatus' => $toStatus));
        }

        
    /**
         * @param int $taskUid
         * @param string $direction start|end|up|down
         * @return array
         */
        
    public function moveTask($taskUid$direction)
        {
            return 
    $this->makeRequest(__FUNCTION__, array('taskUid' => $taskUid'direction' => $direction));
        }
        
        
    /**
         * Getting the link to Task results file by Task Uid
         *
         * @param int $taskUid
         * @return array
         */
        
    public function getTaskResultsFile($taskUid)
        {
            return 
    $this->makeRequest(__FUNCTION__, array('taskUid' => $taskUid));
        }

        
    /**
         * Removing results file by Task Uid
         *
         * @param $taskUid
         * @return mixed
         */
        
    public function deleteTaskResultsFile($taskUid)
        {
            return 
    $this->makeRequest(__FUNCTION__, array('taskUid' => $taskUid));
        }

        
    /**
         * Getting the list of tasks
         *
         * @param $completed
         * @return mixed
         */
        
    public function getTasksList($completed 0)
        {
            return 
    $this->makeRequest(__FUNCTION__, array('completed' => $completed));
        }

        
    /**
         * Displays a list of all available results that can return the specified parser.
         *
         * @param string $parser
         * @return array
         */
        
    public function getParserInfo($parser)
        {
            return 
    $this->makeRequest(__FUNCTION__, array('parser' => $parser));
        }
        
        
    /**
         * Update executable file of the parser to the latest version, after sending the command.
         *
         * @return mixed
         */
        
    public function update()
        {
            return 
    $this->makeRequest(__FUNCTION__);
        }
        
        
        
    /**
         * Getting the number of active accounts (for Yandex).
         *
         * @return mixed
         */
        
    public function getAccountsCount()
        {
            return 
    $this->makeRequest(__FUNCTION__);
        }
        
        
    /**
         * @param string $action
         * @param array $data
         * @return mixed
         */
        
    private function makeRequest($action$data = array())
        {
            try {
                
    $request = array(
                    
    'action' => $action,
                    
    'password' => $this->getPassword(),
                );

                if (!empty(
    $data)) {
                    
    $request['data'] = $data;
                }

                
    $request_json json_encode($request);

                if (
    $this->getOption('debug')) {
                    echo 
    "Request:\n" $request_json "\n";
                }

                
    $ch curl_init($this->getHost());

                
    curl_setopt($chCURLOPT_POST1);
                
    curl_setopt($chCURLOPT_POSTFIELDS$request_json);
                
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
                
    curl_setopt($chCURLOPT_HTTPHEADER, array('Content-Length: ' strlen($request_json)));
                
    curl_setopt($chCURLOPT_HTTPHEADER, array('Content-Type: text/plain; charset=UTF-8'));

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

                if(
    $response === FALSE) {
                    throw new 
    Exception('Response fail: 'curl_error($ch));
                }

                if (
    $this->getOption('debug')) {
                    echo 
    "Response:\n" $response "\n";
                }

                
    $response json_decode($responseTRUE);

                if(!
    $response['success']) {
                    throw new 
    Exception'Response fail: ' . (
                        isset(
    $response['msg']) ? $response['msg'] : 'unknow error')
                    );
                }

                return isset(
    $response['data']) ? $response['data'] : TRUE;

            } catch (
    Exception $e) {
                die(
    'Error: ' $e->getMessage() . "\n");
            }
        }
    }
     
    Support Ilia, Metroid и Support нравится это.

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