Google Civics API सबसे अच्छा समाधान है। एक एकल एपीआई हिट से आपको निर्वाचित अधिकारी और जिले दोनों मिलते हैं।
आप GPS कोर्ड्स (lat / lng) द्वारा जिले प्राप्त कर सकते हैं जैसे:
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 का उपयोग करके राज्य-स्तरीय जानकारी के लिए समान प्राप्त कर सकते हैं :
"http://openstates.org/api/v1/legislators/geo/?apikey={0}&lat={1}&long={2}";
Google Civics API के बारे में Addenda बार-बार नीचे जा रहा है
Google Civics API इस बात पर अस्पष्ट है कि क्या यह lat / lng का समर्थन करता है, और हर कुछ महीनों में, यह सिर्फ एक महीने के लिए lat / lng का समर्थन करना बंद कर देगा, जब तक कि कोई इसे रिपोर्ट नहीं करता और Google विशेष रूप से, एक कर्मचारी शायद उनके स्वयंसेवक समय नोटिस ("चेलन") में इस पर काम कर रहे हैं और इसे ठीक कर रहे हैं:
https://groups.google.com/d/msg/google-civicinfo-api/0td48h7JxYA/Zhij3yQiCgAJ
यदि आपकी सेवा को उम्मीद है कि यह Civics API डेटा को क्रैश करने वाला है, और यदि इसे Civics API डेटा उपयोगी होना चाहिए, तो यह क्रैश नहीं हो सकता है, लेकिन यह एक महीने के लिए बेकार हो जाएगा। सबसे हालिया विफलता 2018 में अधिकांश राज्यों के लिए संपूर्ण मतदान की अवधि थी, इसलिए, यह काफी डाउनटाइम है।
आप स्पष्ट रूप से रिवर्स जियोकोडिंग द्वारा रक्षा खेल सकते हैं:
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);
तो यहाँ, हम सामान्य एचटीएमएल 5 के माध्यम से उपयोगकर्ता के स्थान के लिए पूछते हैं, और यदि वे कहते हैं कि नहीं / ब्लॉक हम उन्हें "अपना स्थान प्राप्त नहीं कर सकते" संदेश (जियोफाइल के साथ)। फिर हमें lat / lng मिल गया है, लेकिन, Google Civics API अनियमित है, इसलिए हम पते के लिए Google से स्पष्ट रूप से पूछेंगे। यह r [0] के रूप में वापस आता है ।formatted_address, जो कुछ जवाबों में Google को सलाह देता है कि आप उपयोगकर्ता को उस स्थान की पुष्टि करने के लिए दिखाएं जो वे देख रहे हैं। तो हम पता टेक्स्ट बॉक्स में डालते हैं और इसे बंद भेजते हैं loadReps(lat, lng, address)
।
ध्यान दें कि यह संभव है कि जियोकोड कॉल विफल हो सकती है (एक परतदार इंटरनेट कनेक्शन के कारण सहित), लेकिन, कभी-कभी Google सिविक एपीआई पूरी तरह से चालू होता है, इसलिए, इस परिदृश्य में उपयोगकर्ता को परिणाम से इनकार करने की कोई आवश्यकता नहीं है; इस मामले में मैंने जो बैकएंड लिखा है, वह lat / lng और वैकल्पिक पते को स्वीकार कर सकता है, और लापता पते को सहन कर सकता है। तब यह Google सिविकिक्स एपीआई से बात करने की कोशिश करता है, और अगर इसे कुछ नहीं मिलता है, तो इसे जीवित रहने की जरूरत है और उपयोगकर्ता को बताएं कि सिविक एपीआई टूट गया है, क्षमा करें।
ऐतिहासिक उत्तर
सनलाइट फाउंडेशन * से कांग्रेस एपीआई केवल संघीय है - कोई राज्य-स्तर नहीं, अगर यह आपके लिए मायने रखता है। और [सनलाइट फाउंडेशन बंद हो रहा है, क्योंकि वे सरकार के प्रयासों की नकल नहीं करना चाहते हैं।
GovTrack का API * अधिक पूर्ण है। वे /role
आपके प्रश्न के सबसे करीब हैं:
https://www.govtrack.us/developers/api#endpoint_role
यह आपको सभी वर्तमान सीनेटरों और हाउस सदस्यों को बताता है, और जब उनका अगला चुनाव होता है। तो आपके पास एक फ़िल्टरिंग बोझ होगा।
राज्य-स्तरीय सामान के लिए आप OpenStates.org चाहते हैं, जैसे:
http://openstates.org/api/v1/legislators/geo/?apikey= {0} & lat = {1} & long = {2}
https://openstates.org/
* बुरी खबर, हर समय सब कुछ बंद हो रहा है। सनलाइट फाउंडेशन ने गोविट्रैक के काम की नकल करने से बचने के लिए उनके एपीआई को बंद कर दिया। प्रोप्रिबोसा के काम की नकल करने से बचने के लिए गोव्रीत अब अपना काम बंद कर रहे हैं । लेकिन Propublica आपको स्थान से बिल्कुल जिला नहीं देता है:
https://projects.propublica.org/api-docs/congress-api/
तो प्रतीक्षा करें कि आप कह सकते हैं, इसका कोई मतलब नहीं है, क्योंकि प्रोपब्लिसिया की प्रतिनिधि साइट , जिसे NYTimes के शटडाउन प्रतिनिधि परियोजना से स्थानांतरित किया गया है, आपको एक पते को मैप करने और जीपीएस कोर्ड्स से जिला प्राप्त करने देता है। और वे उस पृष्ठ से अपने एपीआई से लिंक करते हैं। अच्छी तरह से आपको बेवकूफ बनाया गया है, क्यूज वह पेज उनके एपीआई का उपयोग नहीं करता है। वास्तव में, यह Sunlight Foundation के डिस्ट्रिक्ट फाइंडिंग API का उपयोग करता है।
क्या झंझट है।