Android до Госдумы доведет или Мобилизация гражданской сознательности



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

    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, хотя, конечно, уже не так актуально.

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 47

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

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


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

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


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

        0
        Согласен, выбор законов и их наименование скорее всего противоречит
        Автор программы не вкладывал в нее никакого пристрастия ни к одной из партий, и поставил своей целью не агитацию
        Хотя, я не против агитации.
          0
          Да, согласен, с отбором законов субъективный момент присутствует.
          Но все равно — это не агитация, а беспристрастный анализ статистики в разрезе этих законов.
          0
          Поиском в Google по фразе «Резонансные законы Госдумы шестого созыва» находится довольно много публикаций, сопоставив списки из каждой из них составил свой.
          Чтобы сопоставить с законами номера законопроектов, пришлось немного поискать в том же Google и на сайте Госдумы.
          Статистику голосования брал по тому их чтению, в котором законы были окончательно приняты — как правило, это 3-е чтение.
          0
          Согласен по поводу веб-сервиса. И почему амазон, а не f-droid? Repository of Free and Open Source (FOSS) software on the Android platform.
            0
            Каким образом суммируются голоса пользователей за закон? Где-то есть бэкэнд?
              +1
              Насколько я понял из статьи, ичего нигде не суммируется. Приложение лично тебе подбирает партию, которая имеет наиболее близкое мнение о законах.
              +2
              Ссылка на яндекс диск уже не ведёт к apk почему то
                0
                Нужно удалить точку в конце URL. Правильный путь.
                  0
                  Нужно точку убрать из ссылки.
                    0
                    Там точка в конце лишняя.
                      0
                      Вот верная ссылка, в конце точку просто добавили
                        0
                        Не уже, а ещё. Там же опечатка. [Была.]
                          0
                          Точку на конце стереть нужно
                            0
                            В ссылке точка, которой там быть не должно.
                              0
                              Уберите точку в конце ссылки
                              0
                              А можно как-то посмотреть результаты без скачивания и запуска с левых сайтов разных исполняемых файлов и без парсинга csv-шек? Первое небезопасно, второе просто лениво.
                                0

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

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

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

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

                                      0
                                      я просто очепятку имел ввиду… Она где-то по Фрейду
                                        0
                                        А это и правильно, что не исполняющие рабочих обязанностей депутаты получают -1
                                          0
                                          А вот для этого собирался сделать отдельный рейтинги по персоналиям — «самые воздержанные» и «самые занятые», но руки не дошли.
                                          0
                                          Я подправил вам немного внешний вид, немного почистил от лишнего.
                                          В том числе устранил проблемку с прокруткой.
                                          Посмотрите пуллреквест и, если понравится, смержите.
                                            0

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

                                              0
                                              Да. Хотя отправлял из формы комментирования внизу. Это какой-то баг у них тут.
                                              А когда заметил — прошло 3 минуты и поправить это я уже не могу.
                                            0
                                            У меня примерно так же, только если депутаты отсутствуют или воздержались, то их голоса на рейтинг не влияют.
                                          +1
                                          Что-то мне подсказывает, что те, кто про такой апп узнает и установит, и так самостоятельно способны понять, за какую партию проголосовать. Думаю, таких максимум 5% населения. Надо думать как достучаться до оставшизся 95%, до дяди Васи, ничего кроме первого канала не видящего.
                                            0

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

                                            0
                                            Хорошая вещь!
                                            Готов её выложить на Google Play. И готов рекламировать у нас на сайте, так как, на мой взгляд, подавляющее число граждан, воспользовавшись Вашим сервисом получат в ответ партию, в которой я состою.
                                              +2
                                              Я просто оставлю это здесь http://api.duma.gov.ru/
                                                0
                                                Хмм, знакомый логотип… Я знаю, что Эпплу хватит денег, чтобы купить Газпром, но что Дропбокс уже купил всю Госдуму со всеми депутатами — это что-то новое…
                                                  0
                                                  Что-то вдруг подумалось: а почему бы Apple не купить себе маленькую страну, чтобы там им нужные законы принимали…
                                                0
                                                Ссылка на яндекс.диск не работает?
                                                  0

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


                                                  Ошибки

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


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


                                                  image


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


                                                  image


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


                                                  image


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

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

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

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

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

                                                    В этом году агитации нет, по крайней мере я не встречал так где живу. Реально о кандидатах узнаю только на участке за 5ть минут до голосования
                                                      0
                                                      Да, было в планах показывать статистику по персоналиям, но, из-за ограниченного времени не сделал такой фичи.
                                                      0
                                                      У меня, по-моему, не все законопроекты влезли. Последний — это «о запрете Google». Всего штук 18. Вижу, что что-то там дальше еще есть, но ниже уже не прокручивается.
                                                      Телефон Xiaomi Redmi 3 pro.
                                                        0
                                                        Информатизация политики — вещь нужная. Автор молодец. Пора выводить на чистую воду все что там твориться. Прозрачность везде и во всем — вот что надо РФ.
                                                          0
                                                          Сергей, отличное дело вы сделали!
                                                          К сожалению, у меня тоже не все законы влезают в экран, и не скроллится, но это мелочи.
                                                            0
                                                            Я поправил вам немного xml: убрал лишнее, устранил проблемку с прокруткой, улучшил читабельность (на свой вкус).
                                                            Посмотрите пулреквест и, если понравится, смержите.

                                                            Если что форк тут https://bitbucket.org/FilenkovMaxim/votershelper
                                                              0
                                                              Спасибо, приложение на Amazon Appstore проапдейтил, думаю, в ближайшее время они выложат обновленную версию (хотя, конечно, теперь уже не совсем актуально)

                                                            Only users with full accounts can post comments. Log in, please.