Esiste un'API per determinare i distretti congressuali? [chiuso]


11

Sto cercando di determinare il distretto congressuale in base a un indirizzo fornito dal mio utente. Ciò eviterà all'utente di cercarlo da solo.

Esiste un'API di questo tipo?

Nota

Attraverso i miei tentativi di trovarne uno, mi sono imbattuto solo in questi:

  • http://www.govtrack.us/developers/api
    (non sono sicuro di come inviare un indirizzo o un codice postale)

    Le seguenti risorse sono disponibili nell'API

    ... Fatture e risoluzioni al Congresso degli Stati Uniti dal 1973 (il 93 ° Congresso).

    ... Una coppia (conto, persona) che indica cosponsorship, con date di join e ritirate.

    ... Membri del Congresso e presidenti degli Stati Uniti sin dalla fondazione della nazione.

    ... Termini tenuti in carica dai membri del Congresso e dai presidenti degli Stati Uniti. Ogni termine corrisponde a un'elezione, il che significa che ciascun mandato alla Camera copre due anni (un "Congresso"), come Presidente quattro anni, e al Senato sei anni (tre "Congressi").

    ... Esegui il voto di chiamata al Congresso degli Stati Uniti dal 1789. Come si accede alle persone votate tramite l'API Vote_voter.

    ... Come le persone hanno votato per votazione per appello nominale al Congresso degli Stati Uniti dal 1789. Vedi l'API di voto. Filtra sul campo di voto per ottenere i risultati di un determinato voto ...

  • http://www.opencongress.org/api
    (sembra essere un modo per trovare informazioni sul congresso, ma non sui distretti)

    Questa API offre ai programmatori un accesso strutturato a tutti i dati su OpenCongress, dalle informazioni sulle fatture ufficiali alle notizie e sulla copertura del blog ai voti generati dagli utenti sulle fatture e molto altro ...

    Per impostazione predefinita, questa API restituisce XML. Tutte le query possono anche restituire JSON ...

  • https://groups.google.com/forum/?fromgroups=#!topic/opendems-discuss/CeKyi_aANaE
    (domanda simile, nessuna risoluzione)

    Ho dato un'occhiata a Open Dems e ho visto cosa è stato esposto a questo punto e cosa no. Lavoro con Democrats Abroad e sono interessato a usare roba del laboratorio per i loro siti.

    Ho rapidamente esaminato l'API Precinct, che fa sia più che meno di quello di cui avrei bisogno. Una risorsa ideale sarebbe almeno un modo di tradurre gli indirizzi in CD (ottenere anche i dati dei distretti statali sarebbe buono), dal momento che ciò renderebbe più semplice per l'adesione di DA fare la differenza in gare come la gara del NY26 del mese scorso. .

Aggiornare

Sto cercando la fonte per il sito web govtrack.us e la funzione 'doGeoCode' potrebbe essere utile.

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

Se nessuno ha qualche suggerimento, proverò ad abbandonare quello che stanno facendo.


1
Ho aggiornato la mia domanda con alcuni posti che ho visto.
Ardavis,

Potrebbe avere senso spostare questo su StackOverflow, o riattivarlo lì e collegarlo qui, poiché questa è una domanda valida, importante e utile.
Chris Moschini,

Risposte:


7

Non l'ho usato, ma una rapida ricerca mi ha portato all'API Congress di Sunlight Labs. Dai un'occhiata ai loro distrects.getDistrictsFromZip method - sembra essere quello che stai cercando. Potresti ottenere risultati migliori (più accurati) geocodificando l'indirizzo tu stesso e quindi usando districts.getDistrictFromLatLong - Suppongo che un determinato codice postale potrebbe oltrepassare i confini del distretto.


1
Grazie @Caleb. Non mi sono imbattuto in quello mentre stavo cercando, sembra esattamente quello che sto cercando. Lo apprezzo.
Ardavis,

Aggiornamento: la pagina delle chiavi dell'API Sunlight non funziona più.
Seth Connell,

4

L'API di Google Civics è la soluzione migliore. Un singolo colpo API ti dà sia i funzionari eletti che i distretti.

Puoi ottenere Distretti per coordinate GPS (lat / lng) in questo modo:

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

Puoi ottenere informazioni simili per informazioni a livello di stato usando OpenStates :

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

Addenda sull'API di Google Civics che scende di frequente

L'API di Google Civics è vaga sul fatto che supporti lat / lng e ogni pochi mesi circa smetterà di supportare lat / lng per circa un mese, fino a quando qualcuno non lo segnalerà e Google noterà, o più specificamente, l'unico dipendente probabilmente ci stanno lavorando su nei loro avvisi di tempo volontario ("Chelan") e cerca di risolverlo:

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

Se il tuo servizio prevede che i dati dell'API di Civics andranno in crash, e se richiede che i dati dell'API di Civics siano utili, potrebbe non bloccarsi ma sarà inutile per mesi alla volta. L'errore più recente è stato l'intero periodo di votazione per la maggior parte degli stati nel 2018, quindi è piuttosto tempo di inattività.

Puoi giocare alla difesa invertendo esplicitamente il geocodifica:

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);

Quindi qui, passiamo attraverso il solito HTML5 per chiedere la posizione dell'utente e se dicono No / Block mostriamo loro il messaggio "Impossibile trovare la tua posizione" (con geoFail). Quindi abbiamo lat / lng, ma l'API di Google Civics è irregolare, quindi chiederemo esplicitamente a Google l'indirizzo. Questo ritorna come r [0] .formatted_address, che in alcune risposte Google ti consiglia di mostrare all'utente per confermare la posizione che stanno cercando. Quindi lo inseriamo nella casella di testo dell'indirizzo e lo inviamo via loadReps(lat, lng, address).

Tieni presente che è possibile che la chiamata con geocodice non riesca (anche a causa di una connessione Internet instabile), ma a volte l'API di Google Civics è completamente operativa, quindi non è necessario negare all'utente un risultato in questo scenario; il backend che ho scritto in questo caso può accettare lat / lng e indirizzo opzionale e tollerare l'indirizzo mancante. Quindi cerca di parlare con l'API di Google Civics e, se non ottiene nulla, deve sopravvivere e dire all'utente che l'API di Civics è rotta, mi dispiace.

Risposta storica

L'API del Congresso di Sunlight Foundation * è solo federale: nessun livello statale, se questo è importante per te. E [Sunlight Foundation si sta chiudendo, perché non vogliono duplicare gli sforzi di GovTrack.

L'API * di GovTrack è più completa. Il loro /roleè il più vicino alla tua domanda:

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

Ti dice tutti gli attuali senatori e membri della Camera e quando saranno le loro prossime elezioni. Quindi avresti un onere di filtraggio.

Per cose a livello statale vuoi OpenStates.org, come:

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

https://openstates.org/

* Cattive notizie, tutto si spegne tutto il tempo. Sunlight Foundation ha chiuso l'API per evitare di duplicare il lavoro di Govtrack. Govtrack sta chiudendo il loro adesso , per evitare di duplicare il lavoro di ProPublica. Ma Propublica non sembra affatto darti distretto dalla posizione:

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

Quindi aspetta che tu possa dire, non ha senso, perché il sito Represent di ProPublica , che viene trasferito dal progetto Represent di spegnimento di NYTimes, ti consente di mappare un indirizzo e ottenere il distretto dai coordinate GPS. E si collegano alla loro API da quella pagina. Ben ingannato, perché quella pagina non usa la loro API. In realtà, utilizza l'API di ricerca distrettuale della Sunlight Foundation.

Che casino.


2
Un rappresentante di ProPublica mi ha suggerito di utilizzare l'API di informazioni civiche di Google ( developers.google.com/civic-information/docs/v2/representatives/… )
kmoser

1
@kmoser Grazie - ho avuto la stessa risposta. Risposta aggiornata.
Chris Moschini,

2

Mi rendo conto che questa domanda è vecchia, ma ho pensato di mettere i miei due centesimi per chiunque potesse ancora cercare.

Innanzitutto, alcune informazioni di base. I distretti congressuali sono estremamente specifici - fino a un indirizzo stesso, non solo alla strada. Io e il mio vicino dall'altra parte della strada potremmo essere in diversi distretti congressuali. Questo è il motivo per cui è così importante ottenere un buon codice ZIP + 4 per assicurarsi di inserire l'indirizzo nel distretto corretto. Un sistema (come SmartyStreets o Melissa Data o QAS, ecc.) Che indirizza la convalida ti darebbe un ZIP + 4 affidabile per garantire che il distretto sia corretto.

SmartyStreets ha la sua API LiveAddress , che restituisce dati congressuali insieme a oltre 40 altri punti dati (geocodici, residenziali vs commerciali, ecc.).


Dato IL-04, non sono nemmeno sicuro che ZIP + 4 otterrebbe il distretto giusto. (geojson in gist at gist.github.com/anonymous/f2e46f17275f6dbb68db copiato da github.com/benbalter/congressional-districts/blob/gh-pages/IL/… perché al momento non viene visualizzato).

... tuttavia, dice che zip + 4 dovrebbe portarti in un edificio e include informazioni come il lato della strada in cui ti trovi. Quindi forse, ma poi considera che l'insieme di zip + 4 che mappa a un distretto sarebbe il numero di edifici in quel distretto che potrebbero diventare ingombranti.

0

Melissa Data crea strumenti per la verifica dell'indirizzo che includono informazioni sui distretti politici. Non so se hanno un'API pubblica; il link qui sopra ti porterà a una pagina di ricerca dell'indirizzo. Offrono un numero limitato di ricerche gratuite che possono essere aumentate con un abbonamento . Si prega di controllare i loro termini di utilizzo prima di inserirlo in un'applicazione di produzione.

Mentre i loro dati vengono aggiornati mensilmente, ho notato che alcuni di questi non riflettono la ridistribuzione recente.

Molti stati hanno queste informazioni disponibili, ma dubito che vi sia coerenza nella loro attuazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.