¿Existe una API para determinar los distritos del Congreso? [cerrado]

11

Estoy buscando determinar el distrito del Congreso en función de una dirección que proporcione mi usuario. Esto evitará que el usuario lo busque por sí mismo.

¿Existe una API de este tipo?

Nota

A través de mis intentos de encontrar uno, solo he encontrado estos:

  • http://www.govtrack.us/developers/api
    (sin embargo, no estoy seguro de cómo enviar una dirección o código postal)

    Los siguientes recursos están disponibles en la API

    ... Proyectos de ley y resoluciones en el Congreso de los Estados Unidos desde 1973 (el 93º Congreso).

    ... Un par (factura, persona) que indica copatrocinio, con fechas de ingreso y retiro.

    ... Miembros del Congreso y presidentes de los Estados Unidos desde la fundación de la nación.

    ... Términos mantenidos en el cargo por miembros del Congreso y presidentes de los Estados Unidos. Cada término corresponde a una elección, lo que significa que cada período en la Cámara abarca dos años (un 'Congreso'), como Presidente cuatro años, y en el Senado seis años (tres 'Congresos').

    ... Pase de votos en el Congreso de los EE. UU. Desde 1789. Se accede a la forma en que las personas votaron a través de la API Vote_voter.

    ... Cómo votó la gente en las votaciones nominales en el Congreso de los EE. UU. Desde 1789. Consulte la API Vote. Filtrar en el campo de votación para obtener los resultados de una votación en particular ...

  • http://www.opencongress.org/api
    (parece ser una forma de encontrar información del congreso, pero no distritos)

    Esta API proporciona a los programadores acceso estructurado a todos los datos en OpenCongress, desde información oficial de facturas hasta noticias y cobertura de blogs, votos generados por los usuarios sobre facturas y mucho más ...

    Esta API por defecto devuelve XML. Todas las consultas también pueden devolver JSON ...

  • https://groups.google.com/forum/?fromgroups=#!topic/opendems-discuss/CeKyi_aANaE
    (pregunta similar, sin resolución)

    He estado revisando Open Dems y viendo lo que está expuesto en este momento y lo que no. Trabajo con demócratas en el extranjero y estoy interesado en usar cosas del laboratorio para sus sitios.

    Rápidamente revisé la API de precinto, que hace más y menos de lo que necesito. Un recurso ideal sería cualquier forma de traducir direcciones a CD como mínimo (obtener datos del distrito estatal también sería bueno), ya que eso facilitaría la membresía de DA para marcar la diferencia en carreras como la carrera NY26 del mes pasado. .

Actualizar

Estoy mirando la fuente del sitio web govtrack.us y la función 'doGeoCode' puede ser útil.

ver-fuente: http: //www.govtrack.us/congress/members

Si nadie tiene alguna sugerencia, intentaré dejar de hacer lo que están haciendo.

Ardavis
fuente
1
He actualizado mi pregunta con algunos lugares que he estado mirando.
ardavis el
Puede tener sentido mover esto a StackOverflow, o volver a establecerlo allí, y vincularlo aquí, ya que esta es una pregunta válida, importante y útil.
Chris Moschini

Respuestas:

7

No lo he usado, pero una búsqueda rápida me llevó a la API del Congreso desde Sunlight Labs. Echa un vistazo a su método districts.getDistrictsFromZip : parece ser lo que estás buscando. Es posible que obtenga mejores resultados (más precisos) geocodificando la dirección usted mismo y luego usando districts.getDistrictFromLatLong : supongo que un código postal dado podría cruzar los límites del distrito.

Caleb
fuente
1
Gracias @Caleb. No me encontré con eso cuando estaba buscando, eso parece ser exactamente lo que estoy buscando. Lo aprecio.
ardavis el
Actualización: la página clave de Sunlight API ya no funciona.
Seth Connell
4

Google Civics API es la mejor solución. Un solo golpe de API te lleva a los funcionarios electos y a los distritos.

Puede obtener distritos por medio de coordenadas GPS (lat / lng) así:

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

Puede obtener información similar a nivel estatal con OpenStates :

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

Adendas sobre el API de Google Civics que baja con frecuencia

La API de Google Civics es imprecisa sobre si admite lat / lng, y cada pocos meses, dejará de admitir lat / lng durante un mes más o menos, hasta que alguien lo informe y Google se dé cuenta, o más específicamente, el empleado probablemente esté trabajando en esto en sus avisos de tiempo voluntario ("Chelan") y considere arreglarlo:

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

Si su servicio espera que los datos de la API de Civics se bloqueen, y si requiere que la información de la API de Civics sea útil, es posible que no se bloquee, pero será inútil durante meses. El fracaso más reciente fue el período de votación completo para la mayoría de los estados en 2018, por lo que ese es el tiempo de inactividad.

Puedes jugar a la defensa explícitamente revertir la geocodificación:

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

Entonces, aquí, revisamos la ubicación habitual del usuario de HTML5, y si dicen No / Bloquear, les mostramos el mensaje "No se pudo obtener su ubicación" (con geoFail). Luego tenemos el lat / lng, pero la API de Google Civics es errática, así que le preguntaremos a Google explícitamente la dirección. Eso vuelve como r [0] .formatted_address, que en algunas respuestas Google recomienda que le muestres al usuario para confirmar la ubicación que está buscando. Así que lo ponemos en el cuadro de texto de la dirección y lo enviamos a través de loadReps(lat, lng, address).

Tenga en cuenta que es posible que la llamada de geocodificación pueda fallar (incluso debido a una conexión a Internet débil), pero, a veces, la API de Google Civics está en pleno funcionamiento, por lo que no es necesario negarle al usuario un resultado aún en este escenario; El backend que escribí en este caso puede aceptar lat / lng y dirección opcional, y tolerar la dirección que falta. Luego intenta hablar con Google Civics API y, si no consigue nada, necesita sobrevivir y decirle al usuario que el Civics API está roto, lo siento.

Respuesta historica

La API del Congreso de Sunlight Foundation * es solo federal, no a nivel estatal, si eso es importante para usted. Y [Sunlight Foundation se está cerrando, porque no quieren duplicar los esfuerzos de GovTrack.

La API * de GovTrack es más completa. Su /rolemás cercano a su pregunta:

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

Le informa a todos los senadores y miembros actuales de la Cámara, y cuándo es su próxima elección. Entonces tendrías una carga de filtrado.

Para cosas de nivel estatal que desea OpenStates.org, como:

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

https://openstates.org/

* Malas noticias, todo se está cerrando todo el tiempo. Sunlight Foundation cerró su API para evitar duplicar el trabajo de Govtrack. Govtrack está cerrando el suyo ahora , para evitar duplicar el trabajo de ProPublica. Pero Propublica's no parece brindarle el distrito desde su ubicación:

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

Espere, podría decir, eso no tiene sentido, porque el sitio de representación de ProPublica , que se transfiere desde el proyecto de representación de cierre de NYTimes, le permite mapear una dirección y obtener el distrito de las coordenadas GPS. Y se vinculan a su API desde esa página. Bien engañado, porque esa página no utiliza su API. De hecho, utiliza la API de búsqueda de distrito de la Fundación Sunlight.

Que desastre.

Chris Moschini
fuente
2
Un representante de ProPublica sugirió que use la API de información cívica de Google ( developers.google.com/civic-information/docs/v2/representatives/… )
kmoser
1
@kmoser Gracias, obtuve la misma respuesta. Respuesta actualizada
Chris Moschini
2

Me doy cuenta de que esta pregunta es antigua, pero pensé que arrojaría mis dos centavos por cualquiera que todavía pudiera estar buscando.

Primero, alguna información de fondo. Los distritos del Congreso son extremadamente específicos, hasta una dirección en sí, no solo la calle. Mi vecino y yo al otro lado de la calle podríamos estar en diferentes distritos del Congreso. Es por eso que es tan importante obtener un buen código postal + 4 para asegurarse de colocar la dirección en el distrito correcto. Un sistema (como SmartyStreets o Melissa Data o QAS, etc.) que realiza la validación de la dirección le daría un ZIP + 4 confiable para garantizar que el distrito sea correcto.

SmartyStreets tiene su API LiveAddress , que devuelve datos del Congreso junto con más de 40 otros puntos de datos (códigos geográficos, residenciales frente a comerciales, etc.).

Michelle
fuente
Dado IL-04 , ni siquiera estoy seguro de que el ZIP + 4 obtenga el distrito adecuado. (Geojson en un resumen en gist.github.com/anonymous/f2e46f17275f6dbb68db copiado de github.com/benbalter/congressional-districts/blob/gh-pages/IL/… porque eso no se está procesando en este momento).
... sin embargo, dice que zip + 4 debería llevarte a un edificio e incluye información como en qué lado de la calle estás. Entonces, tal vez, pero luego considere que el conjunto de zip + 4 que se asigna a un distrito sería la cantidad de edificios en ese distrito que podrían volverse difíciles de manejar.
0

Melissa Data crea herramientas para la verificación de direcciones que incluye información sobre distritos políticos. No sé si tienen una API pública; el enlace de arriba lo llevará a una página de búsqueda de direcciones. Ofrecen un número limitado de búsquedas gratuitas que se pueden aumentar con una suscripción . Verifique sus términos de uso antes de poner esto en una aplicación de producción.

Si bien sus datos se actualizan mensualmente, he notado que algunos de ellos no reflejan la reciente redistribución de distritos.

Muchos estados tienen esta información disponible, pero dudo que haya alguna coherencia en su implementación.

TGnat
fuente