Gibt es eine API zur Bestimmung von Kongressbezirken? [geschlossen]

11

Ich möchte den Kongressbezirk anhand einer Adresse ermitteln, die mein Benutzer angibt. Dadurch wird vermieden, dass der Benutzer es selbst nachschlagen muss.

Gibt es eine solche API?

Hinweis

Bei meinen Versuchen, einen zu finden, bin ich nur auf Folgendes gestoßen:

  • http://www.govtrack.us/developers/api
    (nicht sicher, wie man eine Adresse oder Postleitzahl übermittelt)

    Die folgenden Ressourcen sind in der API verfügbar

    ... Gesetzentwürfe und Resolutionen im US-Kongress seit 1973 (93. Kongress).

    ... Ein Paar (Rechnung, Person), das Cosponsorship anzeigt, mit Beitritts- und zurückgezogenen Daten.

    ... Mitglieder des Kongresses und US-Präsidenten seit der Gründung der Nation.

    ... Amtszeiten von Kongressmitgliedern und US-Präsidenten. Jede Amtszeit entspricht einer Wahl, dh jede Amtszeit im Repräsentantenhaus umfasst zwei Jahre (ein „Kongress“), als Präsident vier Jahre und im Senat sechs Jahre (drei „Kongresse“).

    ... namentliche Abstimmungen im US-Kongress seit 1789. Über die Vote_voter-API kann auf die Abstimmungen zugegriffen werden.

    ... Wie Menschen seit 1789 im US-Kongress über namentliche Abstimmungen abgestimmt haben. Siehe die Abstimmungs-API. Filtern Sie im Abstimmungsfeld, um die Ergebnisse einer bestimmten Abstimmung zu erhalten ...

  • http://www.opencongress.org/api
    (scheint eine Möglichkeit zu sein, Kongressinformationen zu finden, aber keine Distrikte)

    Diese API bietet Programmierern strukturierten Zugriff auf alle Daten auf OpenCongress, von offiziellen Rechnungsinformationen über Nachrichten und Blog-Berichterstattung bis hin zu benutzergenerierten Abstimmungen über Rechnungen und vielem mehr ...

    Diese API gibt standardmäßig XML zurück. Alle Abfragen können auch JSON zurückgeben ...

  • https://groups.google.com/forum/?fromgroups=#!topic/opendems-discuss/CeKyi_aANaE
    (ähnliche Frage, keine Lösung)

    Ich habe mir Open Dems angesehen und gesehen, was an diesem Punkt aufgedeckt ist und was nicht. Ich arbeite mit Demokraten im Ausland zusammen und bin daran interessiert, Dinge aus dem Labor für ihre Standorte zu verwenden.

    Ich habe mir schnell die Precinct-API angesehen, die mehr und weniger leistet, als ich brauche. Eine ideale Ressource wäre zumindest die Möglichkeit, Adressen in CDs zu übersetzen (es wäre auch gut, Daten aus den Bundesstaaten zu erhalten), da dies der DA-Mitgliedschaft die Möglichkeit erleichtern würde, bei Rennen wie dem NY26-Rennen im letzten Monat einen Unterschied zu machen. .

Aktualisieren

Ich suche in der Quelle nach der Website govtrack.us und die Funktion 'doGeoCode' kann nützlich sein.

Ansichtsquelle: http: //www.govtrack.us/congress/members

Wenn niemand irgendwelche Vorschläge hat, werde ich versuchen, von dem, was sie tun, abzuweichen.

Ardavis
quelle
1
Ich habe meine Frage mit einigen Orten aktualisiert, die ich mir angesehen habe.
Ardavis
Es kann sinnvoll sein, dies in StackOverflow zu verschieben oder dort erneut zu durchsuchen und hier zu verknüpfen, da dies eine gültige, wichtige und nützliche Frage ist.
Chris Moschini

Antworten:

7

Ich habe es nicht verwendet, aber eine schnelle Suche brachte mich von Sunlight Labs zur Congress API . Schauen Sie sich die Bezirke an. GetDistrictsFromZip-Methode - es scheint genau das zu sein, wonach Sie suchen. Möglicherweise erhalten Sie bessere (genauere) Ergebnisse, indem Sie die Adresse selbst geokodieren und dann Bezirke verwenden. GetDistrictFromLatLong - Ich würde davon ausgehen, dass eine bestimmte Postleitzahl Bezirksgrenzen überschreiten könnte.

Caleb
quelle
1
Vielen Dank, dass Sie @Caleb. Ich bin bei der Suche nicht darauf gestoßen, das scheint genau das zu sein, wonach ich suche. Ich schätze es.
Ardavis
Update: Die Sunlight API-Schlüsselseite funktioniert nicht mehr.
Seth Connell
4

Google Civics API ist die beste Lösung. Mit einem einzigen API-Treffer erhalten Sie sowohl gewählte Beamte als auch Distrikte.

Sie können Distrikte über GPS-Koordinaten (lat / lng) wie folgt abrufen:

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

Mit OpenStates können Sie ähnliche Informationen auf Bundesstaatsebene erhalten :

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

Nachträge zur Google Civics-API fallen häufig aus

Die Google Civics-API ist vage, ob sie lat / lng unterstützt, und alle paar Monate oder so wird die Unterstützung von lat / lng für etwa einen Monat eingestellt, bis jemand dies meldet und Google oder insbesondere den einen Mitarbeiter bemerkt Dort arbeiten sie wahrscheinlich in ihren freiwilligen Zeitnotizen ("Chelan") daran und prüfen, ob sie das Problem beheben können:

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

Wenn Ihr Dienst erwartet, dass Civics-API-Daten abstürzen, und wenn Civics-API-Daten nützlich sein müssen, stürzt er möglicherweise nicht ab, ist jedoch monatelang unbrauchbar. Der jüngste Misserfolg war die gesamte Abstimmungsperiode für die meisten Staaten im Jahr 2018, das ist also ziemlich die Ausfallzeit.

Sie können Verteidigung spielen, indem Sie die Geokodierung explizit umkehren:

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

Hier gehen wir also die übliche HTML5-Frage nach dem Standort des Benutzers durch. Wenn er Nein / Block sagt, wird ihm die Meldung "Standort konnte nicht abgerufen werden" angezeigt (mit geoFail). Dann haben wir das lat / lng, aber die Google Civics-API ist unberechenbar, sodass wir Google explizit nach der Adresse fragen. Dies wird als r [0] .formatted_address zurückgegeben. In einigen Antworten empfiehlt Google, dass Sie dem Benutzer anzeigen, um den Ort zu bestätigen, nach dem er sucht. Also setzen wir das in das Adressentextfeld und senden es über ab loadReps(lat, lng, address).

Beachten Sie, dass der Geocode-Aufruf möglicherweise fehlschlägt (auch aufgrund einer unzuverlässigen Internetverbindung). Manchmal ist die Google Civics-API jedoch voll funktionsfähig, sodass dem Benutzer in diesem Szenario noch kein Ergebnis verweigert werden muss. Das Backend, das ich in diesem Fall geschrieben habe, kann lat / lng und optionale Adressen akzeptieren und die fehlende Adresse tolerieren. Dann wird versucht, mit der Google Civics-API zu kommunizieren. Wenn nichts angezeigt wird, muss es dies überleben und dem Benutzer mitteilen, dass die Civics-API fehlerhaft ist.

Historische Antwort

Die Kongress-API der Sunlight Foundation * ist nur auf Bundesebene verfügbar - keine staatliche Ebene, wenn dies für Sie von Bedeutung ist. Und [Sunlight Foundation wird geschlossen, weil sie die Bemühungen von GovTrack nicht duplizieren wollen.

Die API * von GovTrack ist vollständiger. Ihre /roleFrage kommt Ihrer Frage am nächsten:

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

Es informiert Sie über alle derzeitigen Senatoren und Mitglieder des Repräsentantenhauses und darüber, wann ihre nächste Wahl stattfindet. Sie hätten also eine Filterlast.

Für Inhalte auf Bundesstaatsebene möchten Sie OpenStates.org wie:

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

https://openstates.org/

* Schlechte Nachrichten, alles wird die ganze Zeit heruntergefahren. Sunlight Foundation hat ihre API heruntergefahren, um zu vermeiden , dass Govtracks Arbeit dupliziert wird. Govtrack schließt jetzt ihre , um zu vermeiden, dass ProPublicas Arbeit dupliziert wird. Aber Propublica's scheint Ihnen überhaupt keinen Bezirk vom Standort zu geben:

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

Warten Sie also, Sie könnten sagen, das macht keinen Sinn, da Sie auf der Represent-Site von ProPublica , die aus dem heruntergefahrenen Represent-Projekt von NYTimes übertragen wurde, eine Adresse zuordnen und den Distrikt von den GPS-Koordinaten abrufen können. Und sie verlinken von dieser Seite aus auf ihre API. Gut getäuscht, weil diese Seite ihre API nicht verwendet. Tatsächlich wird die Distrikt-Finding-API der Sunlight Foundation verwendet.

Was für ein Chaos.

Chris Moschini
quelle
2
Ein Vertreter von ProPublica schlug vor, die Civic Information API von Google ( developer.google.com/civic-information/docs/v2/representatives/… ) zu verwenden
kmoser
1
@kmoser Danke - ich habe die gleiche Antwort bekommen. Antwort aktualisiert.
Chris Moschini
2

Mir ist klar, dass diese Frage alt ist, aber ich dachte, ich würde meine zwei Cent für jeden einwerfen, der vielleicht noch sucht.

Zunächst einige Hintergrundinformationen. Kongressbezirke sind äußerst spezifisch - bis hin zu einer Adresse selbst, nicht nur der Straße. Ich und mein Nachbar auf der anderen Straßenseite könnten in verschiedenen Kongressbezirken sein. Aus diesem Grund ist es so wichtig, eine gute Postleitzahl + 4 zu erhalten, um sicherzustellen, dass Sie die Adresse im richtigen Bezirk platzieren. Ein System (wie SmartyStreets oder Melissa Data oder QAS usw.), das die Adressvalidierung durchführt, bietet Ihnen eine zuverlässige Postleitzahl + 4, um sicherzustellen, dass der Distrikt korrekt ist.

SmartyStreets verfügt über die LiveAddress-API , die Kongressdaten zusammen mit über 40 anderen Datenpunkten (Geocodes, Wohn- und Geschäftsdaten usw.) zurückgibt.

Michelle
quelle
Angesichts von IL-04 bin ich mir nicht einmal sicher, ob die ZIP + 4 den richtigen Bezirk bekommen würde. (Geojson in einem Kern unter gist.github.com/anonymous/f2e46f17275f6dbb68db, kopiert von github.com/benbalter/congressional-districts/blob/gh-pages/IL/…, da dies derzeit nicht gerendert wird).
... es heißt jedoch, dass zip + 4 Sie zu einem Gebäude bringen sollte und Informationen darüber enthält, auf welcher Straßenseite Sie sich befinden. Also vielleicht, aber dann denken Sie daran, dass der Satz von zip + 4, der einem Bezirk zugeordnet ist, die Anzahl der Gebäude in diesem Bezirk ist, die unhandlich werden könnten.
0

Melissa Data stellt Tools zur Adressüberprüfung bereit, die Informationen zu politischen Bezirken enthalten. Ich weiß nicht, ob sie eine öffentliche API haben; Über den obigen Link gelangen Sie zu einer Adressensuchseite. Sie bieten eine begrenzte Anzahl von kostenlosen Suchanfragen, die mit einem Abonnement erhöht werden können . Bitte überprüfen Sie die Nutzungsbedingungen, bevor Sie diese in eine Produktionsanwendung einfügen.

Während ihre Daten monatlich aktualisiert werden, habe ich festgestellt, dass einige davon nicht die jüngste Umverteilung widerspiegeln.

Viele Staaten haben diese Informationen zur Verfügung, aber ich bezweifle, dass ihre Umsetzung konsistent ist.

TGnat
quelle