Existe uma API para determinar os distritos do congresso? [fechadas]

11

Estou procurando determinar o distrito do congresso com base no endereço que meu usuário está fornecendo. Isso evitará que o usuário procure por si próprio.

Existe uma API desse tipo?

Nota

Através das minhas tentativas de encontrar uma, só encontrei estas:

  • http://www.govtrack.us/developers/api
    (no entanto, não sabe como enviar um endereço ou código postal)

    Os seguintes recursos estão disponíveis na API

    ... Projetos de lei e resoluções no Congresso dos EUA desde 1973 (93º Congresso).

    ... Um par (conta, pessoa) indicando co-patrocínio, com datas de ingresso e retirada.

    ... Membros do Congresso e presidentes dos EUA desde a fundação do país.

    ... Termos de posse de membros do Congresso e presidentes dos EUA. Cada mandato corresponde a uma eleição, ou seja, cada mandato na Câmara abrange dois anos (um 'Congresso'), como Presidente, quatro anos e no Senado, seis anos (três 'Congressos').

    ... Votações por chamada no Congresso dos EUA desde 1789. Como as pessoas votam são acessadas por meio da API Vote_voter.

    ... Como as pessoas votaram em votação nominal no Congresso dos EUA desde 1789. Veja a API Vote. Filtre o campo de votação para obter os resultados de uma votação específica ...

  • http://www.opencongress.org/api
    (parece ser uma maneira de encontrar informações do congresso, mas não distritos)

    Essa API fornece aos programadores acesso estruturado a todos os dados no OpenCongress, desde informações oficiais de contas a notícias e cobertura de blog, até votos gerados por usuários em contas e muito mais ...

    O padrão desta API é retornar XML. Todas as consultas também podem retornar JSON ...

  • https://groups.google.com/forum/?fromgroups=#!topic/opendems-discuss/CeKyi_aANaE
    (pergunta semelhante, sem resolução)

    Estive olhando Open Dems e vendo o que é exposto neste momento e o que não é. Eu trabalho com os democratas no exterior e estou interessado em usar coisas do laboratório em seus sites.

    Eu rapidamente examinei a API do Precinct, que faz mais e menos do que eu precisava. Um recurso ideal seria qualquer forma de traduzir endereços em CD, no mínimo (obter dados do distrito estadual também seria bom), pois isso tornaria mais fácil para os membros da AD fazer a diferença em corridas como a corrida de NY26 do mês passado. .

Atualizar

Estou procurando a fonte do site govtrack.us e a função 'doGeoCode' pode ser útil.

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

Se ninguém tiver sugestões, tentarei deixar de lado o que eles estão fazendo.

ardavis
fonte
1
Atualizei minha pergunta com alguns lugares em que estive procurando.
91112 ardavis
Pode fazer sentido mover isso para o StackOverflow ou levá-lo para lá e vinculá-lo aqui, pois essa é uma pergunta válida, importante e útil.
22618 Chris Moschini

Respostas:

7

Eu não o usei, mas uma pesquisa rápida me levou à API do Congresso do Sunlight Labs. Confira o método districts.getDistrictsFromZip - parece ser o que você está procurando. Você pode obter melhores resultados (mais precisos) geocodificando o endereço por conta própria e, em seguida, usando districts.getDistrictFromLatLong - eu suponho que um determinado CEP possa cruzar os limites do distrito.

Caleb
fonte
1
Obrigado @Caleb. Não encontrei isso quando estava pesquisando, isso parece exatamente o que estou procurando. Eu agradeço.
ardavis 9/11/12
Atualização: a página principal da API do Sunlight não funciona mais.
Seth Connell
4

A API do Google Civics é a melhor solução. Um único hit na API oferece a você funcionários e distritos eleitos.

Você pode obter distritos por cabos de GPS (lat / lng) da seguinte forma:

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

Você pode obter informações semelhantes em nível de estado usando o OpenStates :

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

Adendos sobre a API do Google Civics caindo frequentemente

A API do Google Civics é vaga sobre se ela suporta lat / lng e, a cada poucos meses, apenas para de suportar lat / lng por mais ou menos um mês, até que alguém a relate e o Google perceba, ou mais especificamente, o funcionário provavelmente trabalhando nisso em seus avisos de voluntariado ("Chelan") e procura corrigi-lo:

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

Se o seu serviço espera que os dados da API do Civics falhem, e se exige que os dados da API do Civics sejam úteis, ele pode não falhar, mas será inútil por meses. A falha mais recente foi todo o período de votação para a maioria dos estados em 2018, portanto, esse é o tempo de inatividade.

Você pode jogar defesa invertendo explicitamente a geocodificação:

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

Então, aqui, analisamos o HTML5 usual, solicitando a localização do usuário e, se ele disser Não / Bloquear, mostramos a mensagem "Não foi possível obter sua localização" (com geoFail). Em seguida, temos o lat / lng, mas a API do Google Civics é irregular, portanto solicitaremos explicitamente o endereço ao Google. Isso volta como r [0] .formatted_address, que em algumas respostas o Google recomenda que você mostre ao usuário para confirmar o local que está pesquisando. Então colocamos isso na caixa de texto do endereço e enviamos via loadReps(lat, lng, address).

Observe que é possível que a chamada do geocódigo possa falhar (inclusive por causa de uma conexão com a Internet inadequada), mas, às vezes, a API do Google Civics está totalmente operacional, portanto, não é necessário negar ao usuário um resultado ainda neste cenário; o back-end que escrevi neste caso pode aceitar lat / lng e endereço opcional e tolerar o endereço ausente. Em seguida, ele tenta conversar com a API do Google Civics e, se não receber nada, precisa sobreviver a isso e informar ao usuário que a API do Civics está com defeito, desculpe.

Resposta Histórica

A API do Congresso da Sunlight Foundation * é apenas federal - sem nível estadual, se isso for importante para você. E [a Sunlight Foundation está encerrando, porque eles não querem duplicar os esforços do GovTrack.

A API do GovTrack * é mais completa. O deles /roleé o mais próximo da sua pergunta:

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

Ele informa todos os atuais senadores e membros da Câmara e quando é a próxima eleição. Então você teria um fardo de filtragem.

Para coisas em nível de estado, você deseja o OpenStates.org, como:

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

https://openstates.org/

* Más notícias, tudo está desligando o tempo todo. A Sunlight Foundation encerrou sua API para evitar duplicar o trabalho de Govtrack. O Govtrack está encerrando o deles agora , para evitar duplicar o trabalho do ProPublica. Mas o Propublica's não parece fornecer distrito a partir da localização:

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

Então, espere, você pode dizer que isso não faz sentido, porque o site Represent do ProPublica , que é transferido do projeto Represent do encerramento do NYTimes, permite mapear um endereço e obter o distrito pelas cordas do GPS. E eles vinculam à API a partir dessa página. Bem enganado, porque essa página não usa sua API. De fato, ele usa a API de localização de distritos da Sunlight Foundation.

Que bagunça.

Chris Moschini
fonte
2
Um representante da ProPublica sugeriu que eu use a API do Google Informações Civic ( developers.google.com/civic-information/docs/v2/representatives/... )
kmoser
1
@ kmoser Obrigado - obtive a mesma resposta. Resposta atualizada.
Chris Moschini
2

Percebo que essa pergunta é antiga, mas imaginei que pagaria dois centavos para quem ainda estivesse olhando.

Primeiro, algumas informações básicas. Os distritos do Congresso são extremamente específicos - até um endereço em si, não apenas na rua. Eu e meu vizinho do outro lado da rua poderíamos estar em diferentes distritos do congresso. É por isso que é tão importante obter um bom código ZIP + 4 para garantir que você coloque o endereço no distrito correto. Um sistema (como SmartyStreets ou Melissa Data ou QAS, etc.) que efetua a validação de endereço forneceria um ZIP + 4 confiável para garantir que o distrito esteja correto.

O SmartyStreets possui sua API LiveAddress , que retorna dados do congresso junto com mais de 40 outros pontos de dados (geocódigos, residencial x comercial, etc.).

Michelle
fonte
Dada a IL-04, eu nem tenho certeza de que o CEP + 4 obterá o distrito apropriado. (geojson em uma lista em gist.github.com/anonymous/f2e46f17275f6dbb68db copiado de github.com/benbalter/congressional-districts/blob/gh-pages/IL/… porque não está sendo processado no momento).
... porém, diz que zip + 4 deve levá-lo a um edifício e inclui informações como em que lado da rua você está. Então, talvez, mas considere que o conjunto de zip + 4 que mapeia para um distrito seria o número de edifícios naquele distrito que poderiam ficar difíceis de manejar.
0

O Melissa Data cria ferramentas para verificação de endereços que incluem informações sobre distritos políticos. Não sei se eles têm uma API pública; o link acima o levará a uma página de busca de endereço. Eles oferecem um número limitado de pesquisas gratuitas que podem ser aumentadas com uma assinatura . Por favor, verifique os termos de uso antes de colocar isso em um aplicativo de produção.

Embora seus dados sejam atualizados mensalmente, notei que alguns deles não refletem a redistribuição recente.

Muitos estados têm essas informações disponíveis, mas duvido que exista alguma consistência em sua implementação.

TGnat
fonte