Есть ли API для определения избирательных округов? [закрыто]

11

Я пытаюсь определить район конгресса на основе адреса, предоставленного моим пользователем. Это избавит пользователя от необходимости искать его самостоятельно.

Существует ли API такого рода?

Запись

Благодаря моим попыткам найти один, я только столкнулся с этим:

  • http://www.govtrack.us/developers/api
    (однако вы не знаете, как отправить адрес или почтовый индекс)

    Следующие ресурсы доступны в API

    ... Законопроекты и резолюции в Конгрессе США с 1973 года (93-й Конгресс).

    ... Пара (счет, лицо), указывающая на коспонсорство, с датами присоединения и отзыва.

    ... Члены Конгресса и президенты США с момента основания нации.

    ... Сроки полномочий членов Конгресса и президентов США. Каждый срок соответствует выборам, то есть каждый срок в палате охватывает два года (один «Конгресс»), президенту - четыре года, а в Сенате - шесть лет (три «Конгресса»).

    ... Наименьшее количество голосов в Конгрессе США с 1789 года. То, как люди голосовали, доступно через API Vote_voter.

    ... Как люди голосовали поименно в Конгрессе США с 1789 года. См. API голосования. Фильтруйте поле голосования, чтобы получить результаты определенного голосования ...

  • http://www.opencongress.org/api
    (кажется, это способ найти информацию о конгрессе, но не районы)

    Этот API предоставляет программистам структурированный доступ ко всем данным на OpenCongress, начиная от официальной информации о счетах и ​​заканчивая новостями и публикациями в блогах, до пользовательских голосов по счетам и многого другого ...

    Этот API по умолчанию возвращает XML. Все запросы также могут возвращать JSON ...

  • https://groups.google.com/forum/?fromgroups=#!topic/opendems-discuss/CeKyi_aANaE
    (аналогичный вопрос, без разрешения)

    Я просматривал Open Dems и видел, что выставлено на данный момент, а что нет. Я работаю с «Демократами за границей» и заинтересован в использовании материалов из лаборатории для их сайтов.

    Я быстро просмотрел Precinct API, который делает больше и меньше того, что мне нужно. Идеальным ресурсом был бы любой способ перевода адресов на CD, по крайней мере (получение данных о округе штата также было бы неплохо), поскольку это помогло бы членству DA сделать разницу в гонках, таких как гонка NY26 в прошлом месяце. ,

Обновить

Я просматриваю исходный код сайта govtrack.us, и функция doGeoCode может оказаться полезной.

Вид источника: HTTP: //www.govtrack.us/congress/members

Если ни у кого нет предложений, я постараюсь уйти от того, что они делают.

ardavis
источник
1
Я обновил свой вопрос некоторыми местами, на которые я смотрел.
ardavis
Возможно, имеет смысл переместить это в StackOverflow или повторно задать его там и связать здесь, поскольку это правильный, важный и полезный вопрос.
Крис Москини

Ответы:

7

Я не использовал его, но быстрый поиск привел меня к Конгрессу API от Sunlight Labs. Проверьте их districts.getDistrictsFromZip метод - кажется, это то, что вы ищете. Вы можете получить более точные (более точные) результаты, геокодируя адрес самостоятельно, а затем используя districts.getDistrictFromLatLong - я предполагаю, что данный почтовый индекс может пересекать границы района.

Калеб
источник
1
Спасибо @Caleb. Я не сталкивался с этим, когда искал, кажется, это именно то, что я ищу. Я ценю его.
Ardavis
Обновление: ключевая страница Sunlight API больше не работает.
Сет Коннелл
4

Google Civics API - лучшее решение. Один хит API дает вам выборных должностных лиц и округов.

Вы можете получить Районы по координатам GPS (широта / долгота) следующим образом:

public async Task<GoogleCivicsResult> FetchAndParseUSDistrictAsync(
    decimal lat, decimal lng, string address = null)
{
    string googleApiKey = App.GoogleApiKey;
    string reqAddr = Uri.EscapeDataString(address ?? lat + "," + lng);
    string url = "https://www.googleapis.com/civicinfo/v2/representatives?alt=json&key={0}&address={1}";
    url = String.Format(url, googleApiKey, reqAddr);

    var req = new HttpWebRequestAsync(url);
    var data = await req.GetStringAsync();

    var result = JsonConvert.DeserializeObject<GoogleCivicsResult>(data);

    return result;
}

public class GoogleCivicsResult
{
    public Address normalizedInput { get; set; }

    public Dictionary<string, Division> divisions { get; set; }

    public Office[] offices { get; set; }

    public Official[] officials { get; set; }
}

public class Address
{
    public string line1 { get; set; }
    public string line2 { get; set; }
    public string city { get; set; }
    public string state { get; set; }
    public string zip { get; set; }
}

public class Division
{
    public string name { get; set; }

    public int[] officeIndices { get; set; }

    public Office[] offices { get; set; }
}

public class Office
{
    // President of the United States
    // United States Senate
    // United States House of Representatives FL-06
    // Governor
    // Lieutenant Governor
    // Attorney General
    // Sheriff
    // County Judge
    // Council Chair
    public string name { get; set; }

    // ocd-division/country:us/state:fl/cd:6
    // ocd-division/country:us/state:fl
    // ocd-division/country:us/state:fl/county:volusia
    public string divisionId { get; set; }

    // administrativeArea1
    public string[] levels { get; set; }

    // legislatorUpperBody
    // legislatorLowerBody
    // headOfGovernment
    // deputyHeadOfGovernment
    public string[] roles { get; set; }

    public int[] officialIndices { get; set; }
}

public class Official
{
    public string name { get; set; }
    public Address[] address { get; set; }
    public string party { get; set; }
    public string[] phones { get; set; }
    public string[] urls { get; set; }
    public string photoUrl { get; set; }
    public Social[] channels { get; set; }
    public string[] emails { get; set; }
}

public class Social
{
    public string type { get; set; }
    public string id { get; set; }
}

https://developers.google.com/civic-information/docs/v2/representatives/representativeInfoByAddress

Вы можете получить подобное для информации на уровне штата, используя OpenStates :

"http://openstates.org/api/v1/legislators/geo/?apikey={0}&lat={1}&long={2}";

Дополнения о Google Civics API часто выходят из строя

Google Civics API неопределенно говорит о том, поддерживает ли он широту и долготу, и каждые несколько месяцев или около того он просто прекращает поддерживать широту и долготу в течение месяца или около того, пока кто-то не сообщит об этом, и Google не заметит, или, более конкретно, одного сотрудника. там, вероятно, работает над этим в своих уведомлениях о времени волонтеров («Челан») и рассматривает вопрос об их исправлении:

https://groups.google.com/d/msg/google-civicinfo-api/0td48h7JxYA/Zhij3yQiCgAJ

Если ваша служба ожидает, что данные API Civics выйдут из строя, и если для этого потребуются полезные данные API Civics, она может не потерпеть крах, но будет бесполезной в течение нескольких месяцев. Самым последним провалом был весь период голосования для большинства штатов в 2018 году, так что это довольно простое время.

Вы можете играть в обороне, явно изменив геокодирование:

if (!(navigator && navigator.geolocation))
    return geoFail();

navigator.geolocation.getCurrentPosition(function (position) {
    var coords = position.coords;
    var lat = coords.latitude;
    var lng = coords.longitude;

    if (!lat || !lng)
        return geoFail();

    var geocoder = new google.maps.Geocoder;
    geocoder.geocode({ 'location': { lat: lat, lng: lng } },
            function (r, status) {
        if (status !== 'OK' || !r || !r.length) {
            loadReps(lat, lng);
            return;
        }

        var address = r[0].formatted_address;
        $('#address').val(address);
        loadReps(lat, lng, address);
    });
}, geoFail);

Итак, здесь мы просматриваем обычный запрос HTML5 о местоположении пользователя, и если они говорят «Нет / заблокировано», мы показываем им сообщение «Не удалось получить ваше местоположение» (с помощью geoFail). Тогда у нас есть значение lat / lng, но API Google Civics ошибочен, поэтому мы пойдем явно спросить у Google адрес. Это возвращается как r [0] .formatted_address, который в некоторых ответах Google рекомендует показывать пользователю, чтобы подтвердить местоположение, которое они ищут. Таким образом, мы помещаем это в текстовое поле адреса и отправляем его через loadReps(lat, lng, address).

Обратите внимание, что вполне возможно, что вызов геокодирования может завершиться неудачей (в том числе из-за нестабильного интернет-соединения), но иногда API Google Civics полностью функционирует, поэтому нет необходимости отказывать пользователю в этом сценарии; бэкэнд, который я написал в этом случае, может принимать широту / долготу и необязательный адрес и допускать отсутствие адреса. Затем он пытается связаться с Google Civics API, и, если он ничего не получает, ему нужно пережить это и сообщить пользователю, что Civics API сломан, извините.

Исторический ответ

API Конгресса от Sunlight Foundation * только на федеральном уровне - не на уровне штата, если это важно для вас. И [Фонд солнечного света закрывается, потому что они не хотят дублировать усилия GovTrack.

API GovTrack * является более полным. Их /roleближе всего к вашему вопросу:

https://www.govtrack.us/developers/api#endpoint_role

Он рассказывает вам обо всех нынешних сенаторов и членов палаты, и когда их следующие выборы. Таким образом, у вас будет бремя фильтрации.

Для вещей на государственном уровне вы хотите OpenStates.org, например:

http://openstates.org/api/v1/legislators/geo/?apikey= {0} & lat = {1} & long = {2}

https://openstates.org/

* Плохие новости, все закрывается все время. Sunlight Foundation закрыл свой API, чтобы избежать дублирования работы Govtrack. Govtrack теперь закрывает их , чтобы избежать дублирования работы ProPublica. Но Propublica, кажется, не дает вам район от местоположения вообще:

https://projects.propublica.org/api-docs/congress-api/

Так что подождите, вы можете сказать, что это не имеет смысла, потому что сайт Представления ProPublica , который перенесен из закрытого проекта Представления NYTimes, позволяет вам сопоставить адрес и получить район из координат GPS. И они ссылаются на их API с этой страницы. Вас одурачили, потому что эта страница не использует их API. На самом деле, он использует API поиска округа Sunlight Foundation.

Какой беспорядок

Крис Москини
источник
2
Представитель ProPublica предложил мне использовать Google Civic Information API ( developers.google.com/civic-information/docs/v2/represenlatives/… )
kmoser
1
@kmoser Спасибо - я получил такой же ответ. Обновленный ответ.
Крис Москини
2

Я понимаю, что этот вопрос старый, но я решил добавить свои два цента всем, кто еще может искать.

Во-первых, некоторая справочная информация. Районы Конгресса чрезвычайно специфичны - вплоть до самого адреса, а не только улицы. Я и мой сосед через улицу могли быть в разных избирательных округах. Вот почему так важно получить хороший код ZIP + 4, чтобы убедиться, что вы размещаете адрес в правильном районе. Система (например, SmartyStreets, Melissa Data, QAS и т. Д.), Которая выполняет проверку адреса, даст вам надежный ZIP + 4, чтобы убедиться, что район правильный.

SmartyStreets имеет свой API LiveAddress , который возвращает данные конгресса вместе с более чем 40 другими точками данных (геокоды, жилые или коммерческие и т. Д.).

Мишель
источник
Учитывая Ил-04, я даже не уверен, что ZIP + 4 получит правильный район. (geojson в gist.github.com/anonymous/f2e46f17275f6dbb68db скопирован с github.com/benbalter/congressional-districts/blob/gh-pages/IL/… потому что это не рендеринг в данный момент).
... хотя в нем говорится, что zip + 4 должен доставить вас в здание, а также информация о том, на какой стороне улицы вы находитесь. Так что, может быть, но тогда учтите, что набор zip + 4, отображающий район, будет числом зданий в этом районе, которые могут стать громоздкими.
0

Melissa Data создает инструменты для проверки адресов, которые включают информацию о политических округах. Я не знаю, есть ли у них публичный API; ссылка выше приведет вас к странице поиска адреса. Они предлагают ограниченное количество бесплатных просмотров, которые могут быть увеличены с подпиской . Пожалуйста, проверьте их условия использования, прежде чем поместить это в производственное приложение.

Хотя их данные обновляются ежемесячно, я заметил, что некоторые из них не отражают недавнее перераспределение.

Эта информация доступна во многих штатах , но я сомневаюсь, что в их реализации есть последовательность.

TGnat
источник