Перейти к содержимому

MOAB

- - - - -

Модуль Деловые Линии


  • Войдите, чтобы ответить
Сообщений в теме: 4

#1 AdisPrint

AdisPrint

    Почетный

  • Активный участник
  • PipPipPipPipPip
  • 2 711 сообщений
2 056

Отправлено 12 Декабрь 2018 - 22:47

Пишу модуль расчета доставки Деловыми Линиями. API их мне не нравится.
Сначала нужно с токеном авторизации запросить ссылку на файл с КЛАДР, ответ приходит вот в таком виде
{
   "hash": "1707aea20f301fd0a8787b5a68608dd6cf270347ea04c266f1b4c6aa540088a4",
   "url": "https://api.dellin.ru/catalog/[filename].csv?sk=Kn0OtWJcumDYUqRjtCEvhg&e=1401285434"
}
URL пришлось отчищать вот таким выражением.
$regex = '/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i';
preg_match_all($regex, $city_url, $matches);
Потом новым запросом по этой ссылке нужно запросить сам файл, данные приходят в тексте который пришлось преобразовывать в массив. Вышло вот что.
"Неелово-1 д (Псковская обл.)"
"г. Санкт-Петербург"
"Волхов г (Ленинградская обл.)"
"Пушкин г (г. Санкт-Петербург)"
"Орел г (Орловская обл.)"
"Талдыкорган г. (Алматинская область)"
"Сочи г (Краснодарский край)"
"Андреевский п (Омская обл.)"
"Серебряные Пруды рп (Московская обл.)"
"Любим г (Ярославская обл.)"
Теперь нужно найти город в этой хрени. Можно как-нибудь искать по точному совпадению отдельного слова? Я попробовал отчистить все что в скобках, а так же всякие там Г, ПГТ и пробелы вот таким кодом.
preg_replace(array("/ кп /","/ р-н /","/ с. /","/ мр /","/ ст /","/ аул /","/ м /","/ ул /","/ дп /","/ гп /","/ мкр /","/ х /","/ ст-ца /","/ тер /","/ рп /","/ п /","/ пгт /","/ г /","/ д /","/г. /","/ с /","/\([^)]+\)/","/ /"),"",$value[1]);
Но как то это не элегантно. Как написать регулярное выражение? И еще один момент, есть название городов из двух слов. Например если задать Нижний, то поиск найдет Нижний Новгород и еще пяток разных Нижних. Для этого я убрал пробелы, что НижнийНовгород был одним словом и лишние Нижние не находились. Но опять не уверен, что это правильно. Хотя вроде все работает. Правда по API выдаются цифры которые не совсем совпадают с цифрами которые выдает их калькулятор на сайте с теми же городами, весами и объемами. Но это уж их пытать придется.
СНПЧ, чернила, картриджи, фотобумага для принтеров и МФУ - AdisPrint.ru

#2 Drakon

Drakon

    Балбес

  • Основатель
  • PipPipPipPipPip
  • 1 962 сообщений
1 488
  • Изmsk

Отправлено 14 Декабрь 2018 - 15:13

код сходу не напишу ( давно я пыхом не баловался)

тут надо сначала выкинуть все что в скобках - (.*), потом выкинуть все, где идет меньше опред. кол-ва букв подряд ( тут уже смотрим синтаксис POSIX, или как оно тама .. забыл), а потом уже убрать пробелы ..

дальше этот массив надо сортировать и дальше уже применять какой то алгоритм поиска ( тупо перебирать на совпадение - так не делается ).
недорогие и надежные vds - инструмент поднятия ТИЦ
монетизация с ссылок: тут и тут
...
успевает тот, кто не спешит (с)

#3 AdisPrint

AdisPrint

    Почетный

  • Активный участник
  • PipPipPipPipPip
  • 2 711 сообщений
2 056

TC Отправлено 14 Декабрь 2018 - 16:00

Да все уже доделал. :) Решил проще. Удалил все что в скобках, все что с маленькой буквы и все что не буквы. В результате остались только города без пробелов и дефисов. По ним уже проверяю нужный. Все работает. Но все равно считаю что отдавать города в таком виде по API это какая-то дичь. Могли бы отдавать нормально структурированный массив.

Просмотр сообщенияDrakon сказал:

потом выкинуть все, где идет меньше опред. кол-ва букв подряд
Это кстати не прокатит потому, что например есть сокращение пгт, а есть город Ош или Светлый Яр. И если выкидывать все что меньше 2-х букв то получится, что вылетят названия городов, а многие сокращения останутся.

Просмотр сообщенияDrakon сказал:

тупо перебирать на совпадение - так не делается
А как делается? Я циклом перебираю, городов не так уж много, так что все достаточно быстро происходит.
СНПЧ, чернила, картриджи, фотобумага для принтеров и МФУ - AdisPrint.ru

#4 Drakon

Drakon

    Балбес

  • Основатель
  • PipPipPipPipPip
  • 1 962 сообщений
1 488
  • Изmsk

Отправлено 14 Декабрь 2018 - 19:57

AdisPrint, ну думать надо ( программирование это и есть алгоритмика .. а просто писарчуки это кодеры ) ...

ну может для начала сделать сортировку по первой букве, а после по первой букве искомого выдирать нужную часть массива - или как то еще ..


ПС: можно тупо перебирать все до совпадения, конечно же, но это выкидывание ресурсов ( что нынче и модно, а потом компы еле ползают ).
недорогие и надежные vds - инструмент поднятия ТИЦ
монетизация с ссылок: тут и тут
...
успевает тот, кто не спешит (с)

#5 AdisPrint

AdisPrint

    Почетный

  • Активный участник
  • PipPipPipPipPip
  • 2 711 сообщений
2 056

TC Отправлено 15 Декабрь 2018 - 19:27

Просмотр сообщенияDrakon сказал:

что нынче и модно, а потом компы еле ползают
Преувеличиваете. Я 5 лет назад купил CCD винт на 128 гигов, до сих пор хватает для винды и рабочих программ. Ну правда конечно для архивов еще пяток винтов имеется. Да и комп апгрейдил года три назад. Железо брал не топовое и тоже до сих пор на все хватает. Хотя в игры давно не играю, а именно они всегда вынуждают апгрейдится. Хотя и игровая индустрия которая всегда и толкала развитие железа уже не та. В общем тандем игры-железо-игры сейчас сильно замедлился.
СНПЧ, чернила, картриджи, фотобумага для принтеров и МФУ - AdisPrint.ru




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных



© 2019 SMO&SEO форум «WEBIMHO» — продвижение и создание сайтов, интернет-маркетинг

По вопросам рекламы на форуме и цены на рекламу
Все материалы SEO форума разрешены к копированию только с установкой гиперактивной ссылки на webimho.ru,
тем, кто этого не сделает, мы оторвем руки и ноги и поменяем местами,
а когда выйдем из тюрьмы, опять оторвем и опять поменяем.


Россия, г. Москва

Мы в соцсетях: twitter | вконтакте | facebook | livejournal