Kongre bölgelerini belirlemek için bir API var mı? [kapalı]


11

Kongre bölgesini, kullanıcının sağladığı bir adrese göre belirlemek istiyorum. Bu kullanıcının onu aramasını engeller.

Bu tür bir API var mı?

Not

Bir tane bulmaya çalıştığım zaman, sadece bunlarla karşılaştım:

  • http://www.govtrack.us/developers/api
    (ancak nasıl bir adres veya posta kodu göndereceğinizden emin değilsiniz)

    API'da aşağıdaki kaynaklar bulunur

    ... 1973'ten bu yana ABD Kongresi'nde faturalar ve kararlar (93. Kongre).

    ... Birleşme ve geri çekilme tarihleri ​​ile birlikte, kâhyalığı gösteren (fatura, kişi) çifti

    ... Kongre ve ABD Başkanları millet kuruluşundan bu yana.

    ... Kongre Üyeleri ve ABD Başkanları tarafından görev süreleri. Her dönem bir seçime karşılık gelir, yani Meclis'teki her dönem iki yıl (bir 'Kongre'), Başkan olarak dört yıl ve Senato'da altı yıl (üç 'Kongre') kapsar.

    ... 1789'dan beri ABD Kongresi'nde toplanan oylar. Oyların nasıl kullanıldığına Vote_voter API aracılığıyla erişiliyor.

    ... İnsanlar 1789'dan beri ABD Kongresi'nde roll-call oylarına nasıl oy verdi. Belirli bir oylamanın sonuçlarını almak için oy alanını filtreleyin ...

  • http://www.opencongress.org/api
    (kongre bilgilerini bulmanın bir yolu gibi görünüyor, ancak ilçeler değil)

    Bu API, programcılara OpenCongress'teki tüm verilere, resmi fatura bilgisinden haberlere ve blog kapsamından faturalarda kullanıcı tarafından oluşturulan oylara ve daha pek çok şeye yapılandırılmış erişim sağlar ...

    Bu API varsayılan olarak dönen XML'dir. Tüm sorgular ayrıca JSON döndürebilir ...

  • https://groups.google.com/forum/?fromgroups=#!topic/opendems-discuss/CeKyi_aANaE
    (benzer soru, çözüm yok)

    Açık Dems'e baktım ve bu noktada neyin maruz kaldığını ve neyin olmadığını görüyorum. Democrats Abroad ile çalışıyorum ve laboratuvarları için kendi sitelerinde bir şeyler kullanmakla ilgileniyorum.

    Hızla ihtiyacım olandan daha fazla ve daha az yapan Precinct API'ye baktım. İdeal bir kaynak, adresleri en azından CD'ye çevirmenin herhangi bir yolu olabilir (eyalet bölgesi verilerini almak da iyi olurdu), çünkü DA üyeliğinin geçen ayki NY26 yarışında olduğu gibi yarışlarda fark yaratmasını kolaylaştıracaktır. .

Güncelleme

Ben govtrack.us web sitesi için kaynak bakıyorum ve 'doGeoCode' fonksiyonu yararlı olabilir.

kaynağı görüntüle: http: //www.govtrack.us/congress/members

Kimsenin önerisi yoksa, yaptıkları şeyden çıkmaya çalışacağım.


1
Sorumu baktığım bazı yerlerle güncelledim.
ardavis

Bunu StackOverflow'a taşımak veya orada yeniden değerlendirmek ve buraya bağlamak mantıklı olabilir, çünkü bu geçerli, önemli ve yararlı bir soru.
Chris Moschini

Yanıtlar:


7

Kullanmadım, ancak hızlı bir arama beni Sunlight Labs'tan Kongre API'sine getirdi . Onların bölgeleri göz atın. GetDistrictsFromZip yöntemi - aradığınız şey gibi görünüyor. Adresi coğrafi olarak kodlayan ve daha sonra districts.getDistrictFromLatLong kullanarak daha iyi (daha doğru) sonuçlar alabilirsiniz - Belirli bir posta kodunun bölge sınırlarını aşabileceğini varsayabilirim.


1
Teşekkürler @Caleb. Aradığım sırada tam olarak aradığım şey bu değildi. Bunu takdir ediyorum.
ardavis

Güncelleme: Sunlight API anahtar sayfası artık çalışmıyor.
Seth Connell

4

Google Civics API'sı en iyi çözümdür. Tek bir API isabeti size hem Seçilmiş Yetkilileri hem de Bölgeleri sunar.

Aşağıdaki gibi GPS koordinatları (lat / lng) ile İlçeler alabilirsiniz:

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

OpenStates'i kullanarak eyalet düzeyindeki bilgilere benzer olabilirsiniz :

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

Google Civics API'sı Hakkında Sıkça Sorulan Sorular

Google Civics API'sı, lat / lng'yi destekleyip desteklemediğine dair belirsizdir ve birkaç ayda bir, biri bildirene ve Google bir çalışanı veya daha spesifik olarak bir çalışanı bildirene kadar lat / lng'yi bir ay kadar desteklemeyi bırakacaktır. muhtemelen gönüllü zaman bildirimlerinde ("Chelan") bunun üzerinde çalışıyor ve düzeltmeye çalışıyor:

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

Hizmetiniz Civics API verilerinin çökmesini beklerse ve Civics API verilerinin yararlı olmasını gerektiriyorsa çökmeyebilir, ancak aylarca işe yaramaz. En son başarısızlık 2018'deki çoğu eyalet için tüm oylama dönemiydi, bu yüzden bu kesinti süresidir.

Coğrafi kodlamayı açıkça ters çevirerek savunma oynayabilirsiniz:

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

Burada, her zamanki HTML5'ten kullanıcının konumunu soruyoruz ve Hayır / Engelle dediklerinde onlara "Konumunuz alınamadı" mesajını gösteriyoruz (geoFail ile). Daha sonra lat / lng sahibiz, ancak Google Civics API'sı düzensizdir, bu yüzden Google'dan açıkça adresi isteyeceğiz. Bu, r [0] .formatted_address olarak geri döner; bazı yanıtlarda Google, aradıkları konumu onaylamak için kullanıcıya göstermenizi önerir. Bu yüzden bunu adres metin kutusuna koyduk ve üzerinden gönderdik loadReps(lat, lng, address).

Coğrafi kod çağrısının başarısız olabileceğini unutmayın (kesintili bir internet bağlantısı da dahil olmak üzere), ancak bazen Google Civics API tamamen çalışır durumdadır, bu nedenle kullanıcıyı bu senaryoda henüz bir sonucu reddetmeye gerek yoktur; Bu durumda yazdığım arka uç, lat / lng ve isteğe bağlı adresi kabul edebilir ve eksik adresi tolere edebilir. Sonra Google Civics API ile konuşmaya çalışır ve hiçbir şey almazsa, hayatta kalması ve kullanıcıya Civics API'sının bozuk olduğunu söylemek gerekir, üzgünüm.

Tarihsel Cevap

Sunlight Foundation * 'ın Kongre API'sı yalnızca Federal'dir - sizin için önemliyse eyalet düzeyinde yoktur. Ve [Sunlight Foundation kapanıyor, çünkü GovTrack'ın çabalarını çoğaltmak istemiyorlar.

GovTrack API'sı * daha eksiksizdir. Bunlar /rolesorunuza en yakın olanıdır:

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

Size mevcut tüm Senatörleri ve Meclis üyelerini ve bir sonraki seçimlerinin ne zaman yapılacağını söyler. Böylece bir filtreleme yükünüz olur.

İstediğiniz eyalet düzeyinde şeyler için OpenStates.org gibi:

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

https://openstates.org/

* Kötü haber, her şey her zaman kapanıyor. Sunlight Foundation, Govtrack'un çalışmalarını kopyalamaktan kaçınmak için API'larını kapattı. Govtrack, ProPublica'nın çalışmalarını tekrarlamaktan kaçınmak için şimdi onlarınkini kapatıyor . Ancak Propublica'nın size bölgeyi hiç bir yerden vermediği görülüyor:

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

Öyleyse şunu bekleyebilirsiniz, bu mantıklı değil, çünkü NYTimes'ın kapanış Temsilcisi projesinden aktarılan ProPublica'nın Temsilci sitesi , bir adresi haritalamanıza ve bölgeyi GPS kablolarından almanıza izin veriyor. Ve bu sayfadan API'larına bağlanıyorlar. Sizi kandırdım, çünkü bu sayfa API'larını kullanmıyor. Aslında, Sunlight Foundation'ın bölge bulma API'sını kullanıyor.

Ne dağınıklık.


2
ProPublica'dan bir temsilci, Google'ın Sivil Bilgi API'sını ( developers.google.com/civic-information/docs/v2/representatives/… ) kullanmamı önerdi
kmoser

1
@kmoser Teşekkürler - Aynı yanıtı aldım. Cevap güncellendi.
Chris Moschini

2

Bu sorunun eski olduğunu anlıyorum, ama hala bakabilecek herkes için iki sentimi atacağım.

İlk olarak, bazı arka plan bilgileri. Kongre bölgeleri son derece spesifiktir - sadece caddeye değil, bir adrese kadar. Ben ve sokaktaki komşum farklı kongre bölgelerinde olabiliriz. Bu nedenle, adresi doğru bölgeye yerleştirdiğinizden emin olmak için iyi bir ZIP + 4 kodu almak çok önemlidir. Doğrulamayı ele alan bir sistem (SmartyStreets veya Melissa Data veya QAS vb.), Bölgenin doğru olduğundan emin olmak için size güvenilir bir ZIP + 4 verecektir.

SmartyStreets , 40'tan fazla veri noktasıyla birlikte (coğrafi kodlar, yerleşim yerine ticari vs.) kongre verilerini döndüren LiveAddress API'sına sahiptir .


IL-04 verildiğinde ZIP + 4'ün uygun bölgeyi alacağından bile emin değilim. (bir ve özü GeoJSON gist.github.com/anonymous/f2e46f17275f6dbb68db kopyalanan github.com/benbalter/congressional-districts/blob/gh-pages/IL/... anda render değil çünkü).

... ancak zip + 4'ün sizi bir binaya götürmesi gerektiğini söylüyor ve sokağın hangi tarafında olduğunuz gibi bilgileri içeriyor. Belki de, ama sonra bir bölgeyle eşleşen zip + 4 setinin o bölgedeki hantal olabilecek bina sayısı olacağını düşünün.

0

Melissa Data , siyasi bölgeler hakkında bilgi içeren adres doğrulaması için araçlar yapar. Herkese açık bir API'si olup olmadığını bilmiyorum; yukarıdaki bağlantı sizi bir adres arama sayfasına götürür. Bir abonelikle artırılabilecek sınırlı sayıda ücretsiz arama sunarlar . Lütfen bunu bir üretim uygulamasına koymadan önce kullanım koşullarını kontrol edin.

Verileri aylık olarak güncellenirken, bazılarının son yeniden dağıtımı yansıtmadığını fark ettim.

Birçok eyalette bu bilgiler mevcuttur, ancak bunların uygulanmasında herhangi bir tutarlılık olduğundan şüpheliyim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.