Как завсегдатаи Хабра наверное знают, я интересуюсь книгами о политике. А еще я интересуюсь программированием, особенно на тех платформах, на которых раньше не программировал – почти как про горы у Высоцкого. Так совпало, что на тот момент, когда я начал изучать 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):



image

Теперь приложение надо было куда-то выложить. Известный всем Google Play за регистрации аккаунта разработчика просит 15$. Тратить эту сумму не очень хотелось, и я решил выложить приложение в Amazon App Store – он размещает Android-приложения бесплатно, хотя, чтобы там выложить приложение, придется изрядно попотеть над формами ввода, которые все надо заполнить, и в которых почему-то нет русского языка в списке выбора локализаций.

В итоге получилось маленькое, может быть несколько скучное, но все равно симпатичное приложение «Робоизбиратель-2016», которое, я надеюсь, в ближайшее время появится в Amazon App Store, когда пройдет модерацию. Для самых нетерпеливых — я выложил .apk вот здесь.

А в качестве послесловия к статье, процитирую часть текста из окна «О программе»: «Автор программы не вкладывал в нее никакого пристрастия ни к одной из партий, и поставил своей целью не агитацию, а привлечение внимания ИТ-сообщества и всех остальных российских граждан к предстоящим выборам в Госдуму».

» Репозиторий приложения тут
» Cкачанные данные голосования выложены тут

И, да, если у кого-то есть возможность выложить приложение в Google Play — я не против.
Поделиться с друзьями
-->

Комментарии (41)


  1. lopatoid
    03.09.2016 04:42
    +8

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



    1. igor_suhorukov
      03.09.2016 17:26

      Где-то в англоязычной информации попадался проект баг трекера для политиков. Аналог Jira/Redmine только для политики.


  1. ivan386
    03.09.2016 11:10

    Не туда ответил


  1. ivan386
    03.09.2016 11:23
    +1

    Кстати скачанная база всех голосов уже есть:


    Скачал результату по всем голосованиям и выложил в гитхаб здесь: https://github.com/data-dumaGovRu/vote
    Общий размер получился 1438Мб в форматированном JSON.

    Но копия будет не лишней. Чем больше копий тем меньше возможности менять голоса.


    Интересно кстати как вы выбирали резонансные законы и ставили соответствие названия в СМИ и конкретным номером законопректа?


    1. xystarcha
      05.09.2016 14:42

      Согласен, выбор законов и их наименование скорее всего противоречит

      Автор программы не вкладывал в нее никакого пристрастия ни к одной из партий, и поставил своей целью не агитацию
      Хотя, я не против агитации.


  1. Snooper
    03.09.2016 11:40

    Согласен по поводу веб-сервиса. И почему амазон, а не f-droid? Repository of Free and Open Source (FOSS) software on the Android platform.


  1. Slavenin999
    03.09.2016 11:49

    Каким образом суммируются голоса пользователей за закон? Где-то есть бэкэнд?


    1. devpony
      03.09.2016 21:14
      +1

      Насколько я понял из статьи, ичего нигде не суммируется. Приложение лично тебе подбирает партию, которая имеет наиболее близкое мнение о законах.


  1. migs911
    03.09.2016 12:18
    +2

    Ссылка на яндекс диск уже не ведёт к apk почему то


    1. DrMetallius
      03.09.2016 21:28

      Нужно удалить точку в конце URL. Правильный путь.


    1. Kalter
      05.09.2016 14:39

      Нужно точку убрать из ссылки.


    1. 333f
      05.09.2016 14:39

      Там точка в конце лишняя.


    1. Mopo3iK
      05.09.2016 14:39

      Вот верная ссылка, в конце точку просто добавили


    1. Squoworode
      05.09.2016 14:39

      Не уже, а ещё. Там же опечатка. [Была.]


    1. progiv
      05.09.2016 14:39

      Точку на конце стереть нужно


    1. nlykl
      05.09.2016 14:39

      В ссылке точка, которой там быть не должно.


    1. TheAlexPremiere
      05.09.2016 14:39

      Уберите точку в конце ссылки


  1. Sadler
    03.09.2016 13:43

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


    1. ivan386
      03.09.2016 15:06

      Если вы хотите узнать как голосовали депутаты за законопрокты то это изначально доступно на сайте vote.duma.gov.ru.


  1. igor_suhorukov
    03.09.2016 17:27

    Веб скрайперы это конечно хорошо. Была же вроде инициатива про открытые данные государства…


  1. rrrav
    03.09.2016 21:52

    строящую на основе статистики голосования партийных фракция их рейтинг

    — как понять эту фразу?


    1. ivan386
      03.09.2016 22:08

      В моём варианте если голос пользователя за закон совпадал с голосом депутата то ему добавляется очко рейтинга. Если не совпадает вычитается. Таким образом формируется рейтинг депутатов. Правда есть проблема в том что вместо того чтобы голосовать против депутаты просто "отсутствуют" на заседани и тем самым получают -1 при любом выборе пользователя.


      1. rrrav
        03.09.2016 22:16

        я просто очепятку имел ввиду… Она где-то по Фрейду


      1. MaxF
        06.09.2016 12:30

        А это и правильно, что не исполняющие рабочих обязанностей депутаты получают -1


      1. MaxF
        06.09.2016 16:30

        Я подправил вам немного внешний вид, немного почистил от лишнего.
        В том числе устранил проблемку с прокруткой.
        Посмотрите пуллреквест и, если понравится, смержите.


        1. ivan386
          06.09.2016 18:46

          Я думаю ваше сообщение адресовано sunman.


          1. MaxF
            07.09.2016 11:06

            Да. Хотя отправлял из формы комментирования внизу. Это какой-то баг у них тут.
            А когда заметил — прошло 3 минуты и поправить это я уже не могу.


  1. Londoner
    03.09.2016 22:05
    +1

    Что-то мне подсказывает, что те, кто про такой апп узнает и установит, и так самостоятельно способны понять, за какую партию проголосовать. Думаю, таких максимум 5% населения. Надо думать как достучаться до оставшизся 95%, до дяди Васи, ничего кроме первого канала не видящего.


    1. ivan386
      03.09.2016 22:13

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


  1. evgeniykozin
    03.09.2016 22:56

    Хорошая вещь!
    Готов её выложить на Google Play. И готов рекламировать у нас на сайте, так как, на мой взгляд, подавляющее число граждан, воспользовавшись Вашим сервисом получат в ответ партию, в которой я состою.


  1. startsevdenis
    04.09.2016 00:38
    +2

    Я просто оставлю это здесь http://api.duma.gov.ru/


    1. sashabe
      04.09.2016 00:57

      Хмм, знакомый логотип… Я знаю, что Эпплу хватит денег, чтобы купить Газпром, но что Дропбокс уже купил всю Госдуму со всеми депутатами — это что-то новое…


      1. Regis
        04.09.2016 01:38

        Что-то вдруг подумалось: а почему бы Apple не купить себе маленькую страну, чтобы там им нужные законы принимали…


  1. scriptkiddie
    05.09.2016 14:39

    Ссылка на яндекс.диск не работает?


  1. Roman513
    05.09.2016 14:40

    Успехов Вам в Ваших изысканиях и изучении нового! Надеюсь, Вам будет полезна информация об ошибках, а опытные разработчики Хабра помогут их исправить.


    Ошибки

    Ошибки возникли на разрешении 1280x720, Android 5.1.1


    Изначально при открытии приложения нельзя проскроллить до последнего пункта:


    image


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


    image


    И если попробовать выбрать вариант для, например, "Закона Яровой", то происходит автоскролл вверх, выбор при этом не сохраняется


    image


    Также после случайного нажатия кнопки "Вперёд" (к результату) о потом "назад" увидел, что результаты не сохранились


  1. kabakov_as
    05.09.2016 14:40

    Приложение хорошее и нужное. В отличии от web-версии его можно использовать и непосредственно на избирательном участке, например.

    Но по поводу текущего deployment'а очень большие вопросы.
    Линк на yandex диск — не работает.
    С Amazon App Store не устанавливается «due to country restrictions»

    sunman сделай что бы был способ установить

    Если пофантазировать, то можно и по имени депутата, показывать кто он есть.
    Пришёл избератель на участок — сфоткал билютень и видит сразу кто есть кто.

    В этом году агитации нет, по крайней мере я не встречал так где живу. Реально о кандидатах узнаю только на участке за 5ть минут до голосования


  1. ak47cccp
    05.09.2016 14:41

    У меня, по-моему, не все законопроекты влезли. Последний — это «о запрете Google». Всего штук 18. Вижу, что что-то там дальше еще есть, но ниже уже не прокручивается.
    Телефон Xiaomi Redmi 3 pro.


  1. aslepov78
    05.09.2016 14:41

    Информатизация политики — вещь нужная. Автор молодец. Пора выводить на чистую воду все что там твориться. Прозрачность везде и во всем — вот что надо РФ.


  1. LevOrdabesov
    06.09.2016 07:27

    Сергей, отличное дело вы сделали!
    К сожалению, у меня тоже не все законы влезают в экран, и не скроллится, но это мелочи.


  1. MaxF
    06.09.2016 16:36

    Я поправил вам немного xml: убрал лишнее, устранил проблемку с прокруткой, улучшил читабельность (на свой вкус).
    Посмотрите пулреквест и, если понравится, смержите.

    Если что форк тут https://bitbucket.org/FilenkovMaxim/votershelper