Android до Госдумы доведет или Мобилизация гражданской сознательности
Как завсегдатаи Хабра наверное знают, я интересуюсь книгами о политике: habrahabr.ru/post/290210. А еще я интересуюсь программированием, особенно на тех платформах, на которых раньше не программировал — почти как про горы у Высоцкого. Так совпало, что на тот момент, когда я начал изучать Android, оказалось что на носу — выборы в Госдуму — тот самый государственный орган который принимает те замечательные законы, о которых все мы читали и слышали. Чтобы совместить приятное с полезным, я решил написать под Android простую программу, строящую на основе статистики голосования партийных фракция их рейтинг, с учетом мнения пользователя: если пользователь закон не одобряет, а почти вся партийная фракция голосовала за этот закон, то такая партия пользователю не подходит, и выбирать ее в следующий созыв Госдумы не стоит. Вначале это были лишь вялотекущие идеи, но потом мне попалась статья habrahabr.ru/post/306744, и я окончательно уверился в том, что такая программа будет полезна не только для моего самообразования.
Для начала я посмотрел, есть ли подобные приложения в более развитых с политической точки зрения странах. Нашлось таких очень немного, буквально единицы, например, app.appsgeyser.com/political%20advisor. Все они больше были похожи на аггрегаторы околополитических новостей. Остальное, найденное на 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 вот здесь: yadi.sk/d/sRQmcZ9Euim5t.
А в качестве послесловия к статье, процитирую часть текста из окна «О программе»: «Автор программы не вкладывал в нее никакого пристрастия ни к одной из партий, и поставил своей целью не агитацию, а привлечение внимания ИТ-сообщества и всех остальных российских граждан к предстоящим выборам в Госдуму».
Репозиторий приложения тут: bitbucket.org/lebedevsergey/votershelper/overview
Cкачанные данные голосования выложены тут: yadi.sk/d/LluZ0_15ugtDb
И, да, если у кого-то есть возможность выложить приложение в Google Play — я не против.
Комментарии (1)
3 сентября 2016 в 04:42
+2↑
↓
Мне кажется, такая штука должна быть веб-сервисом, а не мобильным приложением.