Как завсегдатаи Хабра наверное знают, я интересуюсь книгами о политике. А еще я интересуюсь программированием, особенно на тех платформах, на которых раньше не программировал – почти как про горы у Высоцкого. Так совпало, что на тот момент, когда я начал изучать Android, оказалось что на носу — выборы в Госдуму – тот самый государственный орган который принимает те замечательные законы, о которых все мы читали и слышали. Чтобы совместить приятное с полезным, я решил написать под Android простую программу, строящую на основе статистики голосования партийных фракций их рейтинг, с учетом мнения пользователя: если пользователь закон не одобряет, а почти вся партийная фракция голосовала за этот закон, то такая партия пользователю не подходит, и выбирать ее в следующий созыв Госдумы не стоит. Вначале это были лишь вялотекущие идеи, но потом мне попалась статья, и я окончательно уверился в том, что такая программа будет полезна не только для моего самообразования.
Для начала я посмотрел, есть ли подобные приложения в более развитых с политической точки зрения странах. Нашлось таких очень немного, буквально единицы, например. Все они больше были похожи на аггрегаторы околополитических новостей. Остальное, найденное на Google Play по слову politics было, либо играми типа симулятора политика, либо электронными книгами, имеющими это слово в названии. Таким образом, учиться было не у кого.
Далее я занялся получением данные о голосовании. Как ни странно, оказалось, что их надо искать на сайте Госдумы. Формат данных на странице с результатами оказался довольно простым, только голосование «За» почему-то обозначалось константой «-1» — что наводит на размышления, по поводу того, что в самой Госдуме думают о своих «За».
На скорую руку, был написан site scraper – программа, автоматически считывающая данные с сайта, ходя по нему как обычный пользователь, и вечером того же дня запустил ее. Данные скачивались всю ночь, уж не знаю, что подумали администраторы сервера Госдумы. После этого получилось несколько .csv-файлов, самый объемный из которых занимал на диске 89Мб – содержал в себе голоса депутатов, по всем голосованиям, проходившем в Госдуме этого созыва, их было – несколько десятков тысяч.
Надо было их проредить – выбрать только самые существенные голосования и законы. Пришлось заняться этим вручную, тут автоматизация не поможет. В итоге я выбрал 19 самых резонансных из принятых Госдумой законопроектов, и итоги голосований того чтения законопроекта, где он был окончательно принят. Все это было сложено в таблицы БД Sqlite. Только после этого я узнал, что у Госдумы есть свой API, которым я мог бы воспользоваться, не скачивая данные таким велосипедно-варварским образом, но было уже поздно.
После этого создав в Android Studio заготовку проекта Tabbed-интерфейса, я начал писать само приложение. Опущу подробности перипетий с Android, Java, жутко тормозными Gradle и Android Studio, с кодировкой в SQLite, и с ListFragment, который упорно прятал последнюю строку прокручиваемого списка под navigation bar, хотя я ему поставил признак appbar_scrolling_view_behavior. Главное – это то, что через 5 дней приложение было готово. Вот пара скриншотов его экранов (всего их там 3):
Теперь приложение надо было куда-то выложить. Известный всем Google Play за регистрации аккаунта разработчика просит 15$. Тратить эту сумму не очень хотелось, и я решил выложить приложение в Amazon App Store – он размещает Android-приложения бесплатно, хотя, чтобы там выложить приложение, придется изрядно попотеть над формами ввода, которые все надо заполнить, и в которых почему-то нет русского языка в списке выбора локализаций.
В итоге получилось маленькое, может быть несколько скучное, но все равно симпатичное приложение «Робоизбиратель-2016», которое, я надеюсь, в ближайшее время появится в Amazon App Store, когда пройдет модерацию. Для самых нетерпеливых — я выложил .apk вот здесь.
А в качестве послесловия к статье, процитирую часть текста из окна «О программе»: «Автор программы не вкладывал в нее никакого пристрастия ни к одной из партий, и поставил своей целью не агитацию, а привлечение внимания ИТ-сообщества и всех остальных российских граждан к предстоящим выборам в Госдуму».
» Репозиторий приложения тут
» Cкачанные данные голосования выложены тут
И, да, если у кого-то есть возможность выложить приложение в Google Play — я не против.
UPD Приложение выложили в Amazon Appstore: www.amazon.com/s/ref=nb_sb_ss_i_2_5?url=search-alias%3Dmobile-apps&field-keywords=%D1%80%D0%BE%D0%B1%D0%BE%D0%B8%D0%B7%D0%B1%D0%B8%D1%80%D0%B0%D1%82%D0%B5%D0%BB%D1%8C-2016&sprefix=%D1%80%D0%BE%D0%B1%D0%BE%D0%B8%2Cmobile-apps%2C267
Был в отъезде, только вернулся, исправил ошибки в ссылках, и залил поправленную MaxF версию на Amazon Appstore, хотя, конечно, уже не так актуально.