Головоломка для программиста
Nov. 2nd, 2015 10:57 amРосссвязь опять чего-то у себя изменила.
Только месяц назад заменил скрипт на баше скриптом на perl, чтобы оптимизировать процесс — и на тебе: сюрприз. Ничего уже не работает.
Объясняю.
При вытаскивании *.html-ного варианта требуем Accept-Encoding: gzip и получаем жамканый вариант, который вытаскивается на порядок быстрее и меньше грузит каналы.
В прошлом месяце перешёл на perl чтобы (а) заменить неудобную и глюкавую схему конвертации их html в текст. Что из баша напрашивается? Правильно - sed. Но даже 4.2 имеет не совсем удобный синтаксис и при менявшихся в последнее время форматах сделать что-то гибко-универсальное довольно муторно. Альтенатирва — perl. Кроме того это позволило заюзать из LWP::UserAgent ни что иное как (б) mirror, а значит вместо предварительного вытаскивания контента для анализа (не изменилось ли) просто получаем http-код 304 - not modified. Сплошные плюсы.
Но тут прошёл месяц, а я заметил, что списки стали генериться раз в месяц. Месяц прошёл, а ничего не обновляется. Подозреваю неладное — лезу на сайт и что-же? Появились рядом csv. Это хорошо. Но подозрение не ослабевает и вытаскиваю csv для контроля.
И вот она засада: в csv данные отличаются от html. Даже тупо количество строк.
А особая прелесть заключается в том, что невозможно вычислить кто из них новее.
csv в windows-1251, а html пару раз назад стал появляться в utf-8. Из-за чего, кстати, пришлось обновлять алгоритм.
csv отдаётся в плайн-тексте. Не смотря на Accept-Encoding в запросе.
Дата у csv непонятная. То ли она только что сформирована, то ли по запросу сгенерирована, то ли на кеши лежит. LWP::Response не показывает last_modified. Как тут можно рассчитывать на актуальность совершенно непонятно.
Ах, да, последнее поле "оператор" с формате город/район|субьект РФ, который был и впред-предыдущем html и уже два раза менялся. Теперь в html только город или район без субъекта.
Пока мысль что csv всё-таки новее, потому что строк почти на тысячу больше. Возможно либо добавилось что, либо, что вероятнее, которого пошинковали.
Придётся анализировать, выжимая из имеющейся информации всё что можно и делая выводы и по косвенным данным..
UPD. С необновлёнными html отбой тревоги. Посыпаю голову пеплом — не вернул из отладочного режима скрипт и конвертился "кролик". Таким образом остаётся только проблема с 304 кодом (через прокси), а с прагмой no-cache отсутствует last-modified.
И, кстати, в html-варианте последнее поле тоже приведено в адрекватный вид город/район+субъект РФ.
Только месяц назад заменил скрипт на баше скриптом на perl, чтобы оптимизировать процесс — и на тебе: сюрприз. Ничего уже не работает.
Объясняю.
При вытаскивании *.html-ного варианта требуем Accept-Encoding: gzip и получаем жамканый вариант, который вытаскивается на порядок быстрее и меньше грузит каналы.
В прошлом месяце перешёл на perl чтобы (а) заменить неудобную и глюкавую схему конвертации их html в текст. Что из баша напрашивается? Правильно - sed. Но даже 4.2 имеет не совсем удобный синтаксис и при менявшихся в последнее время форматах сделать что-то гибко-универсальное довольно муторно. Альтенатирва — perl. Кроме того это позволило заюзать из LWP::UserAgent ни что иное как (б) mirror, а значит вместо предварительного вытаскивания контента для анализа (не изменилось ли) просто получаем http-код 304 - not modified. Сплошные плюсы.
Но тут прошёл месяц, а я заметил, что списки стали генериться раз в месяц. Месяц прошёл, а ничего не обновляется. Подозреваю неладное — лезу на сайт и что-же? Появились рядом csv. Это хорошо. Но подозрение не ослабевает и вытаскиваю csv для контроля.
И вот она засада: в csv данные отличаются от html. Даже тупо количество строк.
А особая прелесть заключается в том, что невозможно вычислить кто из них новее.
csv в windows-1251, а html пару раз назад стал появляться в utf-8. Из-за чего, кстати, пришлось обновлять алгоритм.
csv отдаётся в плайн-тексте. Не смотря на Accept-Encoding в запросе.
Дата у csv непонятная. То ли она только что сформирована, то ли по запросу сгенерирована, то ли на кеши лежит. LWP::Response не показывает last_modified. Как тут можно рассчитывать на актуальность совершенно непонятно.
Ах, да, последнее поле "оператор" с формате город/район|субьект РФ, который был и впред-предыдущем html и уже два раза менялся. Теперь в html только город или район без субъекта.
Пока мысль что csv всё-таки новее, потому что строк почти на тысячу больше. Возможно либо добавилось что, либо, что вероятнее, которого пошинковали.
Придётся анализировать, выжимая из имеющейся информации всё что можно и делая выводы и по косвенным данным..
UPD. С необновлёнными html отбой тревоги. Посыпаю голову пеплом — не вернул из отладочного режима скрипт и конвертился "кролик". Таким образом остаётся только проблема с 304 кодом (через прокси), а с прагмой no-cache отсутствует last-modified.
И, кстати, в html-варианте последнее поле тоже приведено в адрекватный вид город/район+субъект РФ.