0
Answered

адрес через GET запрос?

Alona Matvenua 3 years ago • updated by Антон 3 years ago 9

у меня прост RSL

а там только ActivX

var ob = CreateObject ("rsax","TRsAxServer","RsAxServer", true).CreateComObject("WinHttp.WinHttpRequest.5.1");

ob.setRequestHeader("Content-Type", "application/json");
ob.setRequestHeader("Accept", "application/json");
ob.setRequestHeader("Authorization", "Token 0834ffd6333884837d3917a417ef7895d86cb43e");
ob.setRequestHeader("Authorization", "Token 0834ffd6333884837d3917a417ef7895d86cb43e");
ob.open("POST","https://dadata.ru/api/v2/clean/address?",false);
//ob.SetProxy(2, "192.168.0.5:3128");
ob.SetTimeouts(3000, 3000, 3000, 3000);
ob.send();
var s=ob.ResponseText;


и ругается что нет метода setRequestHeader


Answer

+1
Answer
Answered

Насколько я вижу, вы отправляете запрос по URL API Стандартизации, но не передаете секретный ключ. А он необходим для Стандартизации.

Еще вы создали тему в разделе Подсказок. Если вдруг планировали использовать именно Подсказки – у них другая логика работы, и другие задачи, чем у Стандартизации. Вот сравнение сервисов.

хотя переставила - сначала open - тогда приходит ответ что

{"detail":"You should provide X-Secret header with your secret key"}


+1
Answer
Answered

Насколько я вижу, вы отправляете запрос по URL API Стандартизации, но не передаете секретный ключ. А он необходим для Стандартизации.

Еще вы создали тему в разделе Подсказок. Если вдруг планировали использовать именно Подсказки – у них другая логика работы, и другие задачи, чем у Стандартизации. Вот сравнение сервисов.

мне нужно исправить адреса в базе клиентской.

нужна функция - на вход который я передаю адрес строкой - на выходе получаю правильный адрес в виде строки.

и в дальнейшем использовать также - операционист вводит адрес, через ваш сервис получаем верный адрес и в базу записываем


сейчас немного поправила код:

macro FixAddrDadata(aStr: string): string

var ob = CreateObject ("rsax","TRsAxServer","RsAxServer", true).CreateComObject("WinHttp.WinHttpRequest.5.1");
ob.open("POST","https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address?query=╨ж╨░╨╜╨┤╨╡╤А╨░%207",false);
ob.setRequestHeader("Content-Type", "application/json");
ob.setRequestHeader("Accept", "application/json");
ob.setRequestHeader("Authorization", "Token 0834ffd6333884837d3917a417ef7895d86cb43e");
//ob.setRequestHeader("query", "╨ж╨░╨╜╨┤╨╡╤А╨░%207");
//ob.SetProxy(2, "192.168.0.5:3128");
ob.SetTimeouts(3000, 3000, 3000, 3000);
ob.send();
var s=ob.ResponseText;
return(s);
OnError
Return -1;
end;

стало возвращать:

{"suggestions":[]}

+1

Вы используете Подсказки, а они не предназначены для исправления существующих данных. Их задача – помочь пользователю удобно ввести данные.

Используйте API Стандартизации для работы с существующими адресами. Вот пример запроса и ответа для адресов. Обратите внимание, сам запрос и URL отличаются от Подсказок.

macro FixAddrDadata(addr: string): string

var ob = CreateObject ("rsax","TRsAxServer","RsAxServer",True).CreateComObject("MSXML2.ServerXMLHTTP");
//addr=OemToUTF(addr);
ob.open("POST","https://dadata.ru/api/v2/clean/address?",false);
//ob.SetProxy(2, "192.168.0.5:3128");
ob.SetTimeouts(3000, 3000, 3000, 3000);
ob.setRequestHeader("Content-Type", "application/json");
ob.setRequestHeader("Accept", "application/json");
ob.setRequestHeader("Authorization", "Token 0834ffd6333884837d3917a417ef7895d86cb43e");
ob.setRequestHeader("X-Secret", "443d18b53863340a7ce9c325eb0416e02b6b4929");
ob.send("[\""+addr+"\"]");
var r=ob.ResponseText;
//r=UTFToOem(r);
return(r);
OnError
Return -1;
end;

ВСЕ СПАСИБО! ПОЛУЧИЛОСЬ ))

а можно сделать чтоб просто возвращалась строка?

задать Accept", "application/text"

+1

Нет, возвращается либо json либо xml объект. Результат разбора содержит много дополнительной информации, от ФИАС кодов адреса до пригодности разобранного адреса к разным бизнес-сценариям.

ну она мне например не нужна.

я ее буду очищать - выдеру только "result":"г Москва, ул Цандера, д 7, кв 443"


было бы например не плохо если указать Accept", "application/text" - возращать только результ - в данном случае - 129075, г Москва, ул Цандера, д 7, кв 443 - т.е. строку чистую.


а то приходится делать разбор + разные проверки

Answered

Проблема в том, что не все адреса одинаково полезны можно однозначно разобрать. Если пограничные и сомнительные случаи. Для этого у нас есть и есть коды качества. Советую смотреть хотя бы на параметр qc, чтобы отличать уверенно разобранные адреса от сомнительных.