Existe-t-il une API pour déterminer les districts du Congrès? [fermé]


11

Je cherche à déterminer le quartier du Congrès en fonction d'une adresse fournie par mon utilisateur. Cela évitera à l'utilisateur de le rechercher lui-même.

Existe-t-il une API de ce type?

Remarque

Grâce à mes tentatives pour en trouver un, je ne les ai rencontrés que:

  • http://www.govtrack.us/developers/api
    (cependant je ne sais pas comment soumettre une adresse ou un code postal)

    Les ressources suivantes sont disponibles dans l'API

    ... Projets de loi et résolutions au Congrès américain depuis 1973 (le 93e Congrès).

    ... Une paire (facture, personne) indiquant le coparrainage, avec des dates d'adhésion et de retrait.

    ... Membres du Congrès et présidents américains depuis la fondation de la nation.

    ... Mandats exercés par des membres du Congrès et des présidents américains. Chaque mandat correspond à une élection, ce qui signifie que chaque mandat à la Chambre couvre deux ans (un «Congrès»), en tant que Président quatre ans et au Sénat six ans (trois «Congrès»).

    ... Votes par appel nominal au Congrès américain depuis 1789. Comment les gens ont voté est accessible via l'API Vote_voter.

    ... Comment les gens ont voté par appel nominal au Congrès américain depuis 1789. Voir l'API Vote. Filtrez sur le champ de vote pour obtenir les résultats d'un vote particulier ...

  • http://www.opencongress.org/api
    (semble être un moyen de trouver des informations sur le congrès, mais pas sur les districts)

    Cette API fournit aux programmeurs un accès structuré à toutes les données sur OpenCongress, de l'info officielle de la facture aux nouvelles et à la couverture du blog, aux votes générés par les utilisateurs sur les factures et bien plus encore ...

    Cette API par défaut renvoie le XML. Toutes les requêtes peuvent également renvoyer JSON ...

  • https://groups.google.com/forum/?fromgroups=#!topic/opendems-discuss/CeKyi_aANaE
    (question similaire, pas de résolution)

    J'ai regardé Open Dems et j'ai vu ce qui était exposé à ce stade et ce qui ne l'était pas. Je travaille avec Democrats Abroad et je suis intéressé à utiliser des trucs du laboratoire pour leurs sites.

    J'ai rapidement examiné l'API Precinct, qui fait à la fois plus et moins que ce dont j'avais besoin. Une ressource idéale serait à tout le moins de traduire des adresses en CD (obtenir des données de district d'État serait également bon), car cela faciliterait la tâche des membres de DA pour faire une différence dans des courses comme la course NY26 du mois dernier. .

Mise à jour

Je regarde la source du site Web govtrack.us et la fonction 'doGeoCode' peut être utile.

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

Si personne n'a de suggestions, je vais essayer de m'éloigner de ce qu'ils font.


1
J'ai mis à jour ma question avec certains endroits que j'ai consultés.
ardavis

Il peut être judicieux de déplacer ceci vers StackOverflow, ou de le rechercher là-bas, et de le lier ici, car il s'agit d'une question valide, importante et utile.
Chris Moschini

Réponses:


7

Je ne l'ai pas utilisé, mais une recherche rapide m'a amené à l' API Congress de Sunlight Labs. Découvrez leur méthode districts.getDistrictsFromZip - cela semble être ce que vous recherchez. Vous pourriez obtenir de meilleurs résultats (plus précis) en géocodant l'adresse vous-même, puis en utilisant districts.getDistrictFromLatLong - je suppose qu'un code postal donné pourrait traverser les limites du district.


1
Merci @Caleb. Je ne l'ai pas rencontré lorsque je cherchais, cela semble être exactement ce que je recherche. Je vous en suis reconnaissant.
ardavis

Mise à jour: la page de clé de l'API Sunlight ne fonctionne plus.
Seth Connell

4

L'API Google Civics est la meilleure solution. Un seul hit API vous permet d'obtenir à la fois des élus et des districts.

Vous pouvez obtenir des districts par des coordonnées GPS (lat / lng) comme ceci:

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

Vous pouvez obtenir des informations similaires au niveau de l'état en utilisant OpenStates :

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

Addenda sur l'API Google Civics en baisse fréquente

L'API Google Civics ne sait pas si elle prend en charge lat / lng, et tous les quelques mois environ, elle cessera simplement de prendre en charge lat / lng pendant un mois environ, jusqu'à ce que quelqu'un le signale et que Google remarque, ou plus précisément, le seul employé il travaille probablement là-dessus dans leurs avis de temps de bénévolat ("Chelan") et cherche à y remédier:

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

Si votre service s'attend à ce que les données de l'API Civics se bloquent, et s'il nécessite que les données de l'API Civics soient utiles, il se peut qu'elles ne se bloquent pas, mais elles seront inutiles pendant des mois. L'échec le plus récent a été la période de vote entière pour la plupart des États en 2018, c'est donc tout à fait le temps d'arrêt.

Vous pouvez jouer à la défense en inversant explicitement le géocodage:

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

Alors ici, nous passons par la demande habituelle HTML5 pour l'emplacement de l'utilisateur, et s'ils disent Non / Bloquer, nous leur montrons le message "Impossible d'obtenir votre emplacement" (avec geoFail). Ensuite, nous avons le lat / lng, mais l'API Google Civics est erratique, nous allons donc demander explicitement à Google l'adresse. Cela revient sous la forme r [0] .formatted_address, qui, dans certaines réponses, Google vous recommande de montrer à l'utilisateur pour confirmer l'emplacement qu'il recherche. Nous avons donc mis cela dans la zone de texte de l'adresse et l'envoyer via loadReps(lat, lng, address).

Notez qu'il est possible que l'appel de géocodage échoue (y compris en raison d'une connexion Internet instable), mais, parfois, l'API Google Civics est entièrement opérationnelle, donc, pas besoin de refuser à l'utilisateur un résultat pour l'instant dans ce scénario; le backend que j'ai écrit dans ce cas peut accepter lat / lng et l'adresse facultative, et tolérer l'adresse manquante. Ensuite, il essaie de parler à l'API Google Civics, et s'il n'obtient rien, il doit survivre à cela et dire à l'utilisateur que l'API Civics est cassée, désolé.

Réponse historique

L'API du Congrès de Sunlight Foundation * est uniquement fédérale - pas au niveau de l'État, si cela vous importe. Et [Sunlight Foundation ferme ses portes, car ils ne veulent pas dupliquer les efforts de GovTrack.

L'API de GovTrack * est plus complète. Leur /roleest le plus proche de votre question:

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

Il vous informe de tous les sénateurs et membres actuels de la Chambre et de la date de leurs prochaines élections. Vous auriez donc un fardeau de filtrage.

Pour les trucs au niveau de l'état que vous voulez OpenStates.org, comme:

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

https://openstates.org/

* Mauvaise nouvelle, tout s'arrête tout le temps. Sunlight Foundation a fermé son API pour éviter de dupliquer le travail de Govtrack. Govtrack ferme le leur maintenant , pour éviter de dupliquer le travail de ProPublica. Mais Propublica ne semble pas du tout vous donner le quartier de l'emplacement:

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

Alors attendez, vous pourriez dire que cela n'a aucun sens, car le site Represent de ProPublica , qui est transféré du projet Represent de l'arrêt de NYTimes, vous permet de cartographier une adresse et d'obtenir le quartier à partir des coordonnées GPS. Et ils lient à leur API à partir de cette page. Bien trompé, car cette page n'utilise pas son API. En fait, il utilise l'API de recherche de district de la Sunlight Foundation.

Quel bordel.


2
Un représentant de ProPublica m'a suggéré d'utiliser l'API Civic Information de Google ( developers.google.com/civic-information/docs/v2/representatives/… )
kmoser

1
@kmoser Merci - j'ai eu la même réponse. Réponse mise à jour.
Chris Moschini

2

Je me rends compte que cette question est ancienne, mais j'ai pensé que je mettrais mes deux cents pour tous ceux qui pourraient encore regarder.

Tout d'abord, quelques informations générales. Les quartiers du Congrès sont extrêmement spécifiques - jusqu'à une adresse elle-même, pas seulement la rue. Moi et mon voisin de l'autre côté de la rue pourrions être dans différents quartiers du Congrès. C'est pourquoi il est si important d'obtenir un bon code ZIP + 4 pour vous assurer que vous placez l'adresse dans le bon quartier. Un système (comme SmartyStreets ou Melissa Data ou QAS, etc.) qui fait la validation des adresses vous donnerait un ZIP + 4 fiable pour vous assurer que le quartier est correct.

SmartyStreets a son API LiveAddress , qui renvoie les données du Congrès avec plus de 40 autres points de données (géocodes, résidentiel vs commercial, etc.).


Étant donné IL-04, je ne suis même pas sûr que le ZIP + 4 obtiendrait le bon quartier. (geojson dans un gist à gist.github.com/anonymous/f2e46f17275f6dbb68db copié depuis github.com/benbalter/congressional-districts/blob/gh-pages/IL/… parce que ce n'est pas rendu pour le moment).

... cependant, il indique que zip + 4 devrait vous amener à un bâtiment et comprend des informations telles que le côté de la rue où vous vous trouvez. Alors peut-être, mais alors considérez que l'ensemble de zip + 4 qui correspond à un quartier serait le nombre de bâtiments dans ce quartier qui pourraient devenir encombrants.

0

Melissa Data crée des outils de vérification d'adresse qui incluent des informations sur les districts politiques. Je ne sais pas s'ils ont une API publique; le lien ci-dessus vous amènera à une page de recherche d'adresse. Ils offrent un nombre limité de recherches gratuites qui peuvent être augmentées avec un abonnement . Veuillez vérifier leurs conditions d'utilisation avant de les insérer dans une application de production.

Bien que leurs données soient mises à jour mensuellement, j'ai remarqué que certaines d'entre elles ne reflètent pas un redécoupage récent.

De nombreux États disposent de ces informations, mais je doute qu'il y ait une cohérence dans leur mise en œuvre.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.