Решение на Изберете си проект от Йордан Пулов

Обратно към всички решения

Към профила на Йордан Пулов

Код

# Здравейте
# За проект съм си избрал да направя API на sofiatraffic.bg
# Идеята ми е да парсвам HTML-a на
# http://www.sofiatraffic.bg/bg/transport/schedules за да мога да събера
# информация за активните линии.
# След това да парсна откритите линкове като
# http://schedules.sofiatraffic.bg/tramway/1 (ТРАМВАЙ 1) за да открия всички
# спирки
# Намирайки спирките парсвам резултатите от
# http://schedules.sofiatraffic.bg/tramway/1#sign/1166/625 където 1166 е
# посоката, а 625 е спирката (аналогично и
# http://schedules.sofiatraffic.bg/tramway/1#sign/1165/625 което е в обратната
# посока)
# Намерената информация ще се записва в БД и ще се достъпва с GET /tramway/1
# където ще се връща JSON с цялата информация
# Информацията за градският транспорт ще се обновява 1 път дневно като ще се
# запазва история за предходните дни
# ================ ОБОЩЕНИЕ ==================
# Ще има много GET заявки, парсване на стрингове (regex на 99%),конкурентност,
# работа с БД (най-вероятно ще е MySQL, но не съм решил), сървър връщащ JSON-a

История (1 версия и 2 коментара)

Йордан обнови решението на 23.04.2015 23:08 (преди над 4 години)

+# Здравейте
+# За проект съм си избрал да направя API на sofiatraffic.bg
+# Идеята ми е да парсвам HTML-a на
+# http://www.sofiatraffic.bg/bg/transport/schedules за да мога да събера
+# информация за активните линии.
+# След това да парсна откритите линкове като
+# http://schedules.sofiatraffic.bg/tramway/1 (ТРАМВАЙ 1) за да открия всички
+# спирки
+# Намирайки спирките парсвам резултатите от
+# http://schedules.sofiatraffic.bg/tramway/1#sign/1166/625 където 1166 е
+# посоката, а 625 е спирката (аналогично и
+# http://schedules.sofiatraffic.bg/tramway/1#sign/1165/625 което е в обратната
+# посока)
+# Намерената информация ще се записва в БД и ще се достъпва с GET /tramway/1
+# където ще се връща JSON с цялата информация
+# Информацията за градският транспорт ще се обновява 1 път дневно като ще се
+# запазва история за предходните дни
+# ================ ОБОЩЕНИЕ ==================
+# Ще има много GET заявки, парсване на стрингове (regex на 99%),конкурентност,
+# работа с БД (най-вероятно ще е MySQL, но не съм решил), сървър връщащ JSON-a

Ок, звучи добре.

Помисли си малко повече за архитектурата на нещата и дай детайли. Как си представяш, че ще се случва всичко?

  • Един crawler, който се пуска от cron job веднъж дневно или нещо друго?
  • Как ще се справя този crawler с евентуални проблеми от сорта на липсваща мрежа или паднал сайт на ЦГМ?
  • Как ще пазиш информацията от различни дни, с дупликация на всичко колкото пъти дойде или малко по-сложно, но пък storage efficient с правене на diff-ове между данните от два последователни дни? Втория вариант според мен е по-интересен за реализиране, а и предполагам, че това са данни, които не се променят драматично от ден на ден, т.е. тоталното дуплициране би било загуба на storage.
  • Как ще изглежда REST интерфейса, който предоставяш? Ще можеш да искаш информация за спирки, конкретни линии? Ще можеш ли да търсиш информация за предни дни?

Помисли над тези въпроси, отговори им и давай смело. :)

  • Cron job 1 път дневно
  • Информацията няма да се променя много често => ако 1 ден неработи крон-а не е проблем. Най-вероятно ще изпраща емаил на админа (АЗ) и ще може да се пуска ръчно при нужда :)
  • все още се двуумя но най-вероятно ще направя диф-ове.
  • /tramway/1 ще връща информация за трамвай 1. Да това е идеята, така че ще се пробвам да го реализирам. Естествено след като ги имам в БД, но най-вероятно се е от типа /tramway/1/2015-01-01/