Чи існує 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 і бачу, що наразі виставляється, а що ні. Я працюю з демократами за кордоном і мені цікаво використовувати матеріали з лабораторії для своїх сайтів.

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

Оновлення

Я переглядаю джерело веб-сайту govtrack.us, і функція 'doGeoCode' може бути корисною.

view-source: http: //www.govtrack.us/congress/members

Якщо ні в кого немає пропозицій, я спробую перейти до того, що вони роблять.


1
Я оновив своє запитання в деяких місцях, які я переглядав.
ardavis

Це може мати сенс перенести це в StackOverflow або переосмислити його там і пов’язати тут, оскільки це дійсне, важливе та корисне питання.
Кріс Москіні

Відповіді:


7

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


1
Дякую @Caleb Я не натрапив на це, коли шукав, здається, саме те, що шукаю. Я ціную це.
ardavis

Оновлення: Ключова сторінка API Sunlight API більше не працює.
Сет Коннелл

4

API Google Civics - найкраще рішення. Одне звернення API отримує як Вибраних чиновників, так і округів.

Отримати райони можна за допомогою GPS-координат (лат. / Lng) так:

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}";

Додатки про API Google Civics, що часто знижується

API Google Civics неясний щодо того, підтримує він lat / lng, і кожні кілька місяців він перестане підтримувати lat / lng протягом місяця або близько того, поки хтось не повідомить про це і не помітить 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 працює повністю, тому не потрібно заперечувати користувачеві результат у цьому сценарії; Вхідний текст, який я написав у цьому випадку, може приймати lat / lng та необов'язкову адресу та терпіти адресу, яка відсутня. Потім він намагається поговорити з API Google Civics, і, якщо нічого не отримує, йому потрібно це пережити і повідомити користувачеві, що API Civics зламаний, вибачте.

Історична відповідь

API конгресу від фонду Sunlight Foundation * є лише федеральним - не на державному рівні, якщо це важливо для вас. І [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 запропонував використовувати API Civic Information від Google ( developers.google.com/civic-information/docs/v2/representatives/… )
kmoser

1
@kmoser Спасибі - я отримав таку ж відповідь. Оновлена ​​відповідь.
Кріс Москіні

2

Я усвідомлюю, що це питання давнє, але я подумав, що кину два центи для тих, хто все ще може шукати.

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

SmartyStreets має свій API LiveAddress , який повертає дані конгресу разом із понад 40 іншими точками даних (геокоди, житлові та комерційні тощо).


Враховуючи ІЛ-04, я навіть не впевнений, що ZIP + 4 отримає належний район. (geojson in gist at gist.github.com/anonymous/f2e46f17275f6dbb68db скопійовано з github.com/benbalter/congressional-districts/blob/gh-pages/IL/…, оскільки це наразі не відображається).

... хоча, в ньому йдеться про те, що zip + 4 повинен привести вас до будівлі та містить інформацію, наприклад, на якій стороні вулиці ви перебуваєте. Можливо, але тоді врахуйте, що набір zip + 4, який відображає округ, буде такою кількістю будівель у тому районі, які можуть стати непростими.

0

Melissa Data створює інструменти для перевірки адрес, що включає інформацію про політичні округи. Я не знаю, чи є у них публічна апі; Посилання вище перенесе вас на сторінку пошуку адреси. Вони пропонують обмежену кількість вільних оглядів, які можна збільшити за допомогою передплати . Будь ласка, перевірте їх умови використання, перш ніж вносити це у виробничу програму.

Хоча їхні дані оновлюються щомісяця, я помітив, що деякі з них не відображають нещодавнього перерозподілу.

Багато держав мають таку інформацію, але я сумніваюся, що в їх реалізації є якась послідовність.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.