是否有用于确定国会选区的API?[关闭]


11

我正在根据用户提供的地址确定国会选区。这将避免让用户自己查找。

是否存在此类API?

注意

通过我的尝试,我只遇到了以下问题:

  • http://www.govtrack.us/developers/api
    (但是不确定如何提交地址或邮政编码)

    API中提供以下资源

    ... 1973年以来在美国国会(第93届国会)上的法案和决议。

    ...一对(帐单,人员),表示共同赞助,并有加入和退出日期。

    ……建国以来的国会议员和美国总统。

    ...任期由国会议员和美国总统担任。每届任期与一次选举相对应,这意味着众议院每届任期为两年(一个“国会”),总统任期为四年,而参议院为期六年(三个“国会”)。

    ...自1789年以来在美国国会进行的投票表决。人们如何通过Vote_voter API进行投票。

    ...自1789年以来人们如何在美国国会进行唱名表决。请参阅Vote API。筛选投票字段以获得特定投票的结果...

  • http://www.opencongress.org/api
    (似乎是一种查找国会信息的方法,但不是地区)

    该API为程序员提供了对OpenCongress上所有数据的结构化访问,从官方账单信息到新闻和博客报道,再到用户生成的账单投票等等,...

    该API默认为返回XML。所有查询也可以返回JSON ...

  • https://groups.google.com/forum/?fromgroups=#!topic/opendems-discuss/CeKyi_aANaE
    (类似的问题,无解决方法)

    我一直在研究Open Dems,看看此时暴露了什么,没有发现什么。我与国外民主党人合作,并且对使用实验室中的网站作为他们的网站感兴趣。

    我迅速查看了Precinct API,该API的功能比我需要的多或少。理想的资源是至少将地址转换为CD的任何方式(获取州地区数据也将是很好的),因为这将使DA的会员更容易在上个月的NY26比赛等比赛中发挥作用。 。

更新资料

我正在寻找govtrack.us网站的资源,“ doGeoCode”功能可能会有用。

查看源代码:http://www.govtrack.us/congress/members

如果没有人提出任何建议,我将尝试脱离他们的所作所为。


1
我已经在一些地方更新了我的问题。
ardavis 2012年

将其移至StackOverflow或在此处重新放置并在此处链接可能是有意义的,因为这是一个有效,重要且有用的问题。
克里斯·莫斯基尼

Answers:


7

我没有使用过它,但是快速搜索使我从Sunlight Labs 进入了Congress API。查看他们的districts.getDistrictsFromZip方法-似乎正是您要找的东西。您可能会得到更好的(更准确的)结果,您可以自己对地址进行地理编码,然后使用districts.getDistrictFromLatLong-我假设给定的邮政编码可能会跨越区域边界。


1
谢谢@Caleb。我在搜索时没有遇到任何问题,这似乎正是我想要的。我很感激。
ardavis 2012年

更新:Sunlight API密钥页面不再起作用。
塞斯·康奈尔

4

Google Civics API是最好的解决方案。一次API命中会使您同时当选官员和地区。

您可以通过GPS坐标(纬度/经度)获取地区,如下所示:

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频繁下降的附录

Google Civics API在是否支持lat / lng方面含糊其词,每隔几个月左右,它将停止支持lat / lng一个月左右,直到有人举报并通知Google,或更具体地讲,一名员工可能在他们的志愿者时间通知(“ Chelan”)中对此进行了研究,并希望解决该问题:

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

因此,在这里,我们通过普通的HTML5询问用户的位置,如果他们说“否/阻止”,我们将向他们显示“无法获取您的位置”消息(带有geoFail)。然后我们得到了经度/纬度,但是Google Civics API不稳定,因此我们将向Google明确询问地址。返回为r [0] .formatted_address,在Google的某些答案中,Google建议您显示给用户以确认他们要查找的位置。因此,我们将其放在地址文本框中,然后通过发送loadReps(lat, lng, address)

请注意,地理编码调用可能会失败(包括由于互联网连接中断),但是有时Google Civics API可以完全正常运行,因此,在这种情况下,无需拒绝用户执行任何操作;我在这种情况下编写的后端可以接受lat / lng和可选地址,并且可以容忍丢失的地址。然后,它尝试与Google Civics API进行通信,如果什么也没收到,它需要继续生存下去,并告诉用户Civics API已损坏,对不起。

历史答案

Sunlight Foundation *提供的Congress API仅适用于联邦政府-如果您认为很重要,则无需州一级。[Sunlight Foundation正在关闭,因为他们不想重复GovTrack的工作。

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/

*坏消息,所有事情一直都在关闭。Sunlight Foundation关闭了他们的API,以避免重复Govtrack的工作。为了避免重复ProPublica的工作,Govtrack现在将关闭其工作。但是Propublica似乎根本无法给您提供地区信息:

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

所以请等一下,这没有任何意义,因为ProPublica的Represent站点是从NYTimes的关机Represent项目转移而来的,它确实可以让您映射地址并从GPS坐标中获取地区。他们从该页面链接到其API。骗了您,因为该页面未使用其API。实际上,它使用了Sunlight Foundation的地区查找API。

真是一团糟。


2
ProPublica的代表建议我使用Google的公民信息API(developers.google.com/civic-information/docs/v2/representatives/…
kmoser

1
@kmoser谢谢-我也得到了同样的答复。更新的答案。
克里斯·莫斯基尼

2

我知道这个问题已经老了,但我想我会为可能仍在寻找的任何人投入2美分。

首先,一些背景信息。国会选区非常具体-只是地址本身,而不仅仅是街道。我和我隔壁的邻居可能在不同的国会区。这就是为什么获得良好的ZIP + 4代码以确保将地址放置在正确的区域中如此重要的原因。进行地址验证的系统(如SmartyStreets或Melissa Data或QAS等)将为您提供可靠的ZIP + 4,以确保区域正确。

SmartyStreets具有其LiveAddress API,该API返回国会数据以及40多个其他数据点(地理代码,住宅与商业等)。


给定IL-04,我什至不知道ZIP + 4是否会获得正确的分区。(在一个要点GeoJSON的gist.github.com/anonymous/f2e46f17275f6dbb68db从复制github.com/benbalter/congressional-districts/blob/gh-pages/IL/...因为这不是在此刻渲染)。

……不过,它说zip + 4应该可以带您进入建筑物,并包含诸如您所在街道的哪一侧等信息。因此,也许可以,但是然后考虑映射到一个区域的zip + 4集将是该区域中可能难以理解的建筑物数量。

0

Melissa Data提供了用于地址验证的工具,其中包括有关政治区的信息。我不知道他们是否有公共api。上面的链接将带您进入地址查找页面。他们提供了数量有限的免费查找,可以通过订阅来增加查找数量。在将其放入生产应用程序之前,请检查其使用条款。

尽管他们的数据每月更新一次,但我注意到其中一些并不反映最近的重新划分。

许多都有可用的信息,但是我怀疑它们的实施是否一致。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.