Свифт-хакатон от CocoaHeads Moscow

На прошлых выходных ребята из CocoaHeads Moscow устраивали первый (в мире?) Свифт-хакатон. (Свифт — это новый язык Эпла для программирования под Айось и Макось.) Хакатон проходил в Москве, в офисе Мейл.ру два дня подряд.

Хакатон — это когда программисты собираются и без остановок программируют. Два дня и всю ночь около 50 человек, — айос-разработчиков, — которые придумали себе достаточно сложные задачи, решали их, чтобы предложить миру эти решения.

В офисе Мейл-ру очень хорошо и уютно. Свежие соки, кофе, чай, кола, печеньки, массажные кресла и переговорки — все, что угодно было для нас бесплатно в эти выходные. И еда. Невероятно приветливые повара на кухне кормили нас три раза в день, огромное спасибо им за это. И это для того, чтобы мы хорошо работали и не скучали :) И мы работали!

Мы с ребятами собрались в команду, чтобы решить задачу вычленения основного текста из контента веб-страниц. Поделились на две группы: первая делает пользовательский интерфейс приложения, вторая — парсер и распознавалку ссылок и текста страниц.

Стоит отметить, что, конечно же, есть гемы и другие серверные решения для этой задачи. А в нашем случае парсинг происходит непосредственно на айос-устройстве. Потому что это Свифт-хакатон!

Мы стали экспериментировать с подходами к разработке. Создали два таргета в Икскод-проекте, две ветки в Гите (и потом задолбались их мерджить, но зато комильфо!) А также проектирование, прототипирование, какао-поды и т. д.

Столкнулись с кучей проблем и интересных решений. Расскажу подробнее. Есть несколько основных способов узнать что является основным текстом среди всего контента веб-страницы:

  • вытащить текстовые хтмл-теги (article, h1...6, p и т. д.), но это не везде хорошо работает
  • поискать самый длинный контент в тегах, но это не гарантирует основной текст
  • посчитать количество точек в каждом теге и, где больше, — там основной текст, но это жесть
  • предложить юзеру указать на основной текст, лол

Мы решили комбинировать несколько разных методов, и, рекурсивно пройдя по дереву элементов, нашли текстовые теги, нашли их родительский элемент, нашли похожие цсс-классы среди них. Подсчитали цену (удельный вес) атрибутов каждого элемента, вытащили это из остального контента и собрали итоговый текст. А главное, что сначала наше приложение парсит первую страницу почти любого указанного сайта, и вытаскивает ссылки на внутренние страницы.

За рамками отведенного на хакатон времени еще осталась куча придуманных фич. Но в результате получилось 139 коммитов, и отличная база для дальнейшей работы.

Все проекты лежат на гитхабе CocoaHeads Moscow:

Спасибо CocoaHeads Moscow и огромное спасибо компании Мейл-ру. Было здорово!

Здание Мейл-ру и вид из офиса во время рассвета:

2 комментария
pilot34 2014

А я бы посмотрел на api instapaper, readbility, safari reader или типо того. Они же уже умеют вычленять. Или вы как раз их и пытались повторить?

Марат Сайтаков 2014

Ага, хотели разобраться как это делать, повторить и выложить в опенсорс :)

Фируз 2014

Я тоже хотел там быть, но увы не успел приехать вовремя в Москву. А теперь, вот, живу тут ) буду учавствовать во всех подобных штуках теперь )))

Популярное