• Как сделать автоматическую смену ключей Dadata?

    vechnokrainii
    @vechnokrainii Автор вопроса
    Array
    (
        [timestamp] => 2020-08-01T11:05:19.302+0000
        [status] => 403
        [error] => Forbidden
        [message] => Feature 'CLEAN' disabled for token 'd3d7b58b91db6815972ee2b8bd2695163288bdd9'. See https://dadata.userecho.com/topics/7784 for help.
        [path] => /api/v1/clean/address
    )

    403 это что кончился лимит на день
  • Как сделать автоматическую смену ключей Dadata?

    vechnokrainii
    @vechnokrainii Автор вопроса
    Владислав,
    В итоге код оказался рабочий по большой части. Я просто не обратил внимание что сверка на дубликаты занимает почти 12 минут.
    В результе такой код оказался рабочим
    <code lang="php">
    $num=0;
    $key = dadataKey($file);
    $maxKey = count($key);
    $n = 0;
    $token = $key[$n]['api'];
    $secret = $key[$n]['secret'];
    	$dadata = new Dadata($token, $secret);
    	$dadata->init();
    foreach($itog as $dates){
    	usleep(500000);
    	$result = $dadata->clean("address", $dates['ADDRESS']);
    	if($result['error']) {
    		$log = date('Y-m-d H:i:s') . ' ' . print_r($result, true);
    		file_put_contents(__DIR__ . '/log.txt', $log . PHP_EOL, FILE_APPEND);
    		if($n <= $maxKey) {
    			for($i = $n;$n<=$maxKey;$i++){
    				$dadata->close();
    				$n++;
    				sleep(15);
    				//$token = changeToken($key, $n);
    				//$secret = changeSecret($key, $n);
    				$dadata = new Dadata($key[$n]['api'], $key[$n]['secret']);
    				$dadata->init();
    
    				$result = $dadata->clean("address", $dates['ADDRESS']);
    		
    				if ($result['error']) {
    					$log = date('Y-m-d H:i:s') . ' ' . print_r($result, true);
    					file_put_contents(__DIR__ . '/log.txt', $log . PHP_EOL, FILE_APPEND);
    					continue;	
    				} else {
    					break;
    				}
    			}
    		} else {
    			pr('Кончились ключи');
    			return;
    		}
    	} else {
                    //запись в базу
    		$num++;
    	}
    }
    pr("вылетел в конце");
    $dadata->close();
    </code>
    Проблема теперь кроется в том, что сама Dadata не дает большое 3000 записать, А потом блочит ключи или просто по каким-то причинам выдает ощибку, хотя ключ не использовался в течении дня ни разу.
    Но это наверное уже другой вопрос)
  • Как сделать автоматическую смену ключей Dadata?

    vechnokrainii
    @vechnokrainii Автор вопроса
    В файле просто парами
    1111111111
    2222222222
    
    3333333333
    4444444444

    В массив попадает уже парами
    Array (
          [0] -> array (
                     [api] = 1111111111
                     [secret] = 2222222222
                )
    )
  • Как сделать автоматическую смену ключей Dadata?

    vechnokrainii
    @vechnokrainii Автор вопроса
    Спасибо за ответ, но я что-то не врубился
    1) $maxKey = count($key);
    в начале стоит после объявления $key = dadataKey($file); ( не скопировал, косяк)
    2) $currentKey вроде выполняет тоже самое что и $n. Или я что-то путаю
    3) Вот так выглядят функции по смене ключей. Так как ключи хранятся парами
    function changeToken($keys, $j) {
    			$token = $keys[$j]['api'];	
    			return $token;
    		}
    
    	function changeSecret($keys, $j) {
    			$secret = $keys[$j]['secret'];	
    			return $secret;
    		}

    4) Ваш if вроде делает что и мой ?
    if($n <= $maxKey) {
        //цикл по смене ключей
    } else {
       return:
    }