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

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

uroboka

A-Parser Enterprise License
A-Parser Enterprise
при указании callback url через конструктор заданий, все срабатывает нормально
при указании callback url через api - url не вызывается по завершению (возможно через апи не добавили поддержку callURLOnComplete)
 
работает, также работа по API ничем не отличается от добавления задания через интерфейс
 
Ага, поправил клиента и заработало

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($name, array_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($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $request_json);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($request_json)));
            curl_setopt($ch, CURLOPT_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($response, TRUE);

            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");
        }
    }
}
 
Назад
Верх