Apakah ada API untuk menentukan distrik kongres? [Tutup]


11

Saya mencari untuk menentukan distrik kongres berdasarkan alamat yang diberikan pengguna saya. Ini akan menghindari memiliki pengguna untuk mencarinya sendiri.

Apakah API semacam ini ada?

Catatan

Melalui upaya saya untuk menemukan satu, saya hanya menemukan ini:

  • http://www.govtrack.us/developers/api
    (tidak yakin bagaimana cara mengirim alamat atau kode pos)

    Sumber daya berikut tersedia di API

    ... Tagihan dan resolusi di Kongres AS sejak 1973 (Kongres ke-93).

    ... Sepasang (tagihan, orang) yang menunjukkan cosponsorship, dengan tanggal bergabung dan ditarik.

    ... Anggota Kongres dan Presiden AS sejak berdirinya negara.

    ... Ketentuan berlaku di kantor oleh Anggota Kongres dan Presiden AS. Setiap istilah sesuai dengan pemilihan, yang berarti setiap istilah di DPR mencakup dua tahun (satu 'Kongres'), sebagai Presiden empat tahun, dan di Senat enam tahun (tiga 'Kongres').

    ... Putar suara panggilan di Kongres AS sejak 1789. Cara orang memilih diakses melalui API Vote_voter.

    ... Bagaimana orang-orang memberikan suara pada daftar panggilan di Kongres AS sejak 1789. Lihat Vote API. Saring pada bidang suara untuk mendapatkan hasil suara tertentu ...

  • http://www.opencongress.org/api
    (tampaknya menjadi cara untuk menemukan informasi kongres, tetapi bukan distrik)

    API ini memberikan akses terstruktur kepada semua programmer ke semua data di OpenCongress, mulai dari info tagihan resmi hingga berita dan liputan blog hingga suara yang dihasilkan pengguna atas tagihan dan banyak lagi ...

    API ini default untuk mengembalikan XML. Semua kueri juga dapat mengembalikan JSON ...

  • https://groups.google.com/forum/?fromgroups=#!topic/opendems-discuss/CeKyi_aANaE
    (pertanyaan serupa, tidak ada resolusi)

    Saya telah melihat Open Dems, dan melihat apa yang terbuka pada saat ini dan apa yang tidak. Saya bekerja dengan Demokrat di Luar Negeri, dan saya tertarik menggunakan barang-barang dari lab untuk situs mereka.

    Saya dengan cepat melihat ke Precinct API, yang melakukan lebih banyak dan lebih sedikit daripada yang saya butuhkan. Sumber yang ideal adalah cara menerjemahkan alamat ke dalam CD paling tidak (mendapatkan data distrik negara juga bagus), karena itu akan memudahkan keanggotaan DA untuk membuat perbedaan dalam balapan seperti balapan NY26 bulan lalu .. .

Memperbarui

Saya mencari sumber untuk situs web govtrack.us dan fungsi 'doGeoCode' mungkin berguna.

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

Jika tidak ada yang punya saran, saya akan mencoba untuk keluar dari apa yang mereka lakukan.


1
Saya telah memperbarui pertanyaan saya dengan beberapa tempat yang telah saya lihat.
ardavis

Mungkin masuk akal untuk memindahkan ini ke StackOverflow, atau memasukkan kembali ke sana, dan menautkannya di sini, karena ini adalah pertanyaan yang valid, penting, dan berguna.
Chris Moschini

Jawaban:


7

Saya belum menggunakannya, tetapi pencarian cepat membawa saya ke API Kongres dari Sunlight Labs. Lihat metode district.getDistrictsFromZip mereka - sepertinya itu yang Anda cari. Anda mungkin mendapatkan hasil yang lebih baik (lebih akurat) geocoding sendiri alamat dan kemudian menggunakan district.getDistrictFromLatLong - Saya berasumsi bahwa kode pos yang diberikan dapat melintasi batas-batas kabupaten.


1
@Caleb terima kasih Saya tidak menemukan itu ketika saya mencari, yang tampaknya persis apa yang saya cari. Saya menghargainya.
ardavis

Pembaruan: Halaman kunci API Sunlight tidak berfungsi lagi.
Seth Connell

4

Google Civics API adalah solusi terbaik. Hit API tunggal memberi Anda baik Pejabat dan Distrik Terpilih.

Anda bisa mendapatkan Distrik dengan koordinat GPS (lat / lng) seperti:

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

Anda bisa mendapatkan yang serupa untuk info tingkat negara menggunakan OpenStates :

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

Tambahan tentang Google Civic API Going Down Sering

Google Civics API tidak jelas apakah mendukung lat / lng, dan setiap beberapa bulan, ia akan berhenti mendukung lat / lng selama sebulan atau lebih, sampai seseorang melaporkannya dan pemberitahuan Google, atau lebih khusus lagi, satu karyawan mungkin ada yang mengerjakan ini dalam pemberitahuan waktu sukarela mereka ("Chelan") dan berusaha memperbaikinya:

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

Jika layanan Anda mengharapkan data Civic API itu akan macet, dan jika itu membutuhkan data Civics API berguna, itu mungkin tidak macet tetapi akan sia-sia selama berbulan-bulan pada suatu waktu. Kegagalan terbaru adalah seluruh periode pemungutan suara untuk sebagian besar negara bagian di 2018, jadi, itu cukup downtime.

Anda dapat bermain pertahanan dengan membalikkan geocoding secara eksplisit:

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

Jadi di sini, kita pergi melalui HTML5 biasa meminta lokasi pengguna, dan jika mereka mengatakan Tidak / Blok kami menunjukkan kepada mereka pesan "Tidak bisa mendapatkan lokasi Anda" (dengan geoFail). Lalu kita punya lat / lng, tetapi, Google Civics API tidak menentu sehingga kita akan bertanya kepada Google secara eksplisit tentang alamatnya. Itu muncul kembali sebagai r [0] .formatted_address, yang dalam beberapa jawaban Google menyarankan Anda tunjukkan kepada pengguna untuk mengonfirmasi lokasi yang mereka cari. Jadi kami memasukkannya ke dalam kotak teks alamat dan mengirimkannya via loadReps(lat, lng, address).

Perhatikan bahwa ada kemungkinan panggilan geocode bisa gagal (termasuk karena koneksi internet yang tidak stabil), tetapi, kadang-kadang Google Civics API beroperasi penuh, jadi, tidak perlu menyangkal hasil pengguna dalam skenario ini; backend yang saya tulis dalam kasus ini dapat menerima lat / lng dan alamat opsional, dan mentolerir alamat yang hilang. Kemudian ia mencoba berbicara dengan Google Civic API, dan, jika tidak mendapatkan apa-apa, ia perlu bertahan dan memberi tahu pengguna bahwa Civic API rusak, maaf.

Jawaban Historis

API Kongres dari Sunlight Foundation * hanya Federal - tidak ada tingkat negara bagian, jika itu penting bagi Anda. Dan [Yayasan Sunlight ditutup, karena mereka tidak ingin menduplikasi upaya GovTrack.

API * GovTrack lebih lengkap. Mereka /rolepaling dekat dengan pertanyaan Anda:

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

Ini memberitahu Anda semua Senator dan anggota Dewan saat ini, dan kapan pemilihan mereka berikutnya. Jadi, Anda akan memiliki beban penyaringan.

Untuk hal-hal tingkat negara Anda ingin OpenStates.org, seperti:

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

https://openstates.org/

* Berita buruk, semuanya mati setiap saat. Sunlight Foundation mematikan API mereka untuk menghindari duplikasi karya Govtrack. Govtrack sedang mematikan milik mereka sekarang , untuk menghindari duplikasi karya ProPublica. Tetapi Propublica tampaknya tidak memberi Anda kabupaten dari lokasi sama sekali:

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

Jadi tunggu, Anda mungkin berkata, itu tidak masuk akal, karena situs Representasi ProPublica , yang ditransfer dari proyek Representasi shutdown NYTimes, memungkinkan Anda memetakan alamat dan mendapatkan kabupaten dari koordinat GPS. Dan mereka menautkan ke API mereka dari halaman itu. Yah menipu Anda, karena halaman itu tidak menggunakan API mereka. Bahkan, ia menggunakan API temuan distrik Sunlight Foundation.

Berantakan sekali.


2
Seorang perwakilan dari ProPublica menyarankan saya menggunakan Google Civic Information API ( developers.google.com/civic-information/docs/v2/representatives/… )
kmoser

1
@kmoser Terima kasih - Saya mendapat respons yang sama. Jawaban yang diperbarui.
Chris Moschini

2

Saya menyadari pertanyaan ini sudah tua, tetapi saya pikir saya akan memberikan dua sen untuk siapa pun yang mungkin masih mencari.

Pertama, beberapa info latar belakang. Distrik kongres sangat spesifik - sampai ke alamat itu sendiri, bukan hanya jalan. Saya dan tetangga saya di seberang jalan bisa berada di distrik kongres yang berbeda. Inilah sebabnya mengapa sangat penting untuk mendapatkan kode ZIP + 4 yang baik untuk memastikan Anda menempatkan alamat di distrik yang benar. Sebuah sistem (seperti SmartyStreets atau Melissa Data atau QAS, dll.) Yang melakukan validasi alamat akan memberi Anda ZIP + 4 yang andal untuk memastikan bahwa distrik tersebut benar.

SmartyStreets memiliki API LiveAddress mereka , yang mengembalikan data kongres bersama dengan lebih dari 40 titik data lainnya (geocode, perumahan vs komersial, dll.).


Diberikan IL-04 Saya bahkan tidak yakin bahwa ZIP + 4 akan mendapatkan distrik yang tepat. (geojson di intisari di gist.github.com/anonymous/f2e46f17275f6dbb68db disalin dari github.com/benbalter/congressional-districts/blob/gh-pages/IL/… karena itu tidak di-render saat ini).

... meskipun, dikatakan bahwa zip + 4 harus membawa Anda ke gedung dan menyertakan informasi seperti apa sisi jalan yang Anda lewati. Jadi mungkin, tapi kemudian pertimbangkan bahwa set zip + 4 yang memetakan ke sebuah distrik akan menjadi jumlah bangunan di distrik itu yang bisa menjadi berat.

0

Melissa Data membuat alat untuk verifikasi alamat yang mencakup informasi tentang distrik-distrik politik. Saya tidak tahu apakah mereka memiliki api publik; tautan di atas akan membawa Anda ke halaman pencarian alamat. Mereka menawarkan sejumlah pencarian gratis yang dapat ditingkatkan dengan berlangganan . Silakan periksa persyaratan penggunaannya sebelum memasukkan ini ke dalam aplikasi produksi.

Sementara data mereka diperbarui setiap bulan, saya perhatikan bahwa beberapa di antaranya tidak mencerminkan redistricting baru-baru ini.

Banyak negara bagian memiliki informasi ini tersedia, tetapi saya ragu bahwa ada konsistensi dalam implementasinya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.