Skip to content

🧐 Interfacing with ProPublica's Congress API

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE
MIT
LICENSE.md
Notifications You must be signed in to change notification settings

r-congress/ppcong

Repository files navigation

ppcong

Travis build status AppVeyor build status Lifecycle: experimental CRAN status Codecov test coverage

A simple interface for interacting with ProPublica’s Congress API, which provides data about current and former members of both chambers of the U.S. Congress.

Installation

You can install the released version of ppcong from CRAN with:

install.packages("ppcong")

And the development version from GitHub with:

# install.packages("remotes")
remotes::install_github("mkearney/ppcong")

Members

Get “house” data from the “116”th Congress:

## get and preview house data from 116th congress
h116 <- ppc_members(congress = "116", chamber = "house")
h116
#> # A tibble: 444 x 49
#>   id    title short_title api_uri first_name middle_name last_name suffix date_of_birth
#>   <chr> <chr> <chr>       <chr>   <chr>      <chr>       <chr>     <chr>  <date>       
#> 1 A000… Repr… Rep.        https:… Ralph      <NA>        Abraham   <NA>   1954-09-16   
#> 2 A000… Repr… Rep.        https:… Alma       <NA>        Adams     <NA>   1946-05-27   
#> 3 A000… Repr… Rep.        https:… Robert     B.          Aderholt  <NA>   1965-07-22   
#> 4 A000… Repr… Rep.        https:… Pete       <NA>        Aguilar   <NA>   1979-06-19   
#> 5 A000… Repr… Rep.        https:… Rick       <NA>        Allen     <NA>   1951-11-07   
#> # … with 439 more rows, and 40 more variables: gender <chr>, party <chr>,
#> #   leadership_role <chr>, twitter_account <chr>, facebook_account <chr>,
#> #   youtube_account <chr>, govtrack_id <chr>, cspan_id <chr>, votesmart_id <chr>,
#> #   icpsr_id <chr>, crp_id <chr>, google_entity_id <chr>, fec_candidate_id <chr>,
#> #   url <chr>, rss_url <chr>, contact_form <lgl>, in_office <lgl>, cook_pvi <chr>,
#> #   dw_nominate <dbl>, ideal_point <lgl>, seniority <chr>, next_election <chr>,
#> #   total_votes <int>, missed_votes <int>, total_present <int>, last_updated <chr>,
#> #   ocd_id <chr>, office <chr>, phone <chr>, fax <lgl>, state <chr>, district <chr>,
#> #   at_large <lgl>, geoid <chr>, missed_votes_pct <dbl>, votes_with_party_pct <dbl>,
#> #   votes_against_party_pct <dbl>, congress <chr>, chamber <chr>,
#> #   ppc_request_timestamp <dttm>

Get “senate” data from the “110”th Congress:

## get and preview senate data from 110th congress
s110 <- ppc_members(congress = "110", chamber = "senate")
s110
#> # A tibble: 102 x 49
#>   id    title short_title api_uri first_name middle_name last_name suffix date_of_birth
#>   <chr> <chr> <chr>       <chr>   <chr>      <chr>       <chr>     <chr>  <date>       
#> 1 A000… Sena… Sen.        https:… Daniel     K.          Akaka     <NA>   1924-09-11   
#> 2 A000… Sena… Sen.        https:… Lamar      <NA>        Alexander <NA>   1940-07-03   
#> 3 A000… Sena… Sen.        https:… Wayne      A.          Allard    <NA>   1943-12-02   
#> 4 B001… Sena… Sen.        https:… John       <NA>        Barrasso  <NA>   1952-07-21   
#> 5 B000… Sena… Sen.        https:… Max        <NA>        Baucus    <NA>   1941-12-11   
#> # … with 97 more rows, and 40 more variables: gender <chr>, party <chr>,
#> #   leadership_role <lgl>, twitter_account <chr>, facebook_account <chr>,
#> #   youtube_account <chr>, govtrack_id <chr>, cspan_id <chr>, votesmart_id <chr>,
#> #   icpsr_id <chr>, crp_id <chr>, google_entity_id <chr>, fec_candidate_id <chr>,
#> #   url <chr>, rss_url <chr>, contact_form <lgl>, in_office <lgl>, cook_pvi <lgl>,
#> #   dw_nominate <lgl>, ideal_point <lgl>, seniority <chr>, next_election <chr>,
#> #   total_votes <int>, missed_votes <int>, total_present <int>, last_updated <chr>,
#> #   ocd_id <chr>, office <lgl>, phone <lgl>, fax <lgl>, state <chr>, senate_class <chr>,
#> #   state_rank <chr>, lis_id <chr>, missed_votes_pct <dbl>, votes_with_party_pct <dbl>,
#> #   votes_against_party_pct <dbl>, congress <chr>, chamber <chr>,
#> #   ppc_request_timestamp <dttm>

Statements

Get statements released by members of Congress by date

## get and preview statements from congress on a given day
sts <- ppc_statements("2017-05-08")
sts
#> # A tibble: 228 x 13
#>   url   date  title statement_type member_id congress member_uri name  chamber state party
#>   <chr> <chr> <chr> <chr>          <chr>        <int> <chr>      <chr> <chr>   <chr> <chr>
#> 1 http… 2017… Enge… Press Release  E000179        115 https://a… Elio… House   NY    D    
#> 2 http… 2017… Benn… Press Release  B001267        115 https://a… Mich… Senate  CO    D    
#> 3 http… 2017… Benn… Press Release  B001267        115 https://a… Mich… Senate  CO    D    
#> 4 http… 2017… Sull… Press Release  S001198        115 https://a… Dan … Senate  AK    R    
#> 5 http… 2017… Roun… Press Release  R000605        115 https://a… Mike… Senate  SD    R    
#> # … with 223 more rows, and 2 more variables: subjects <list>,
#> #   ppc_request_timestamp <dttm>

Votes

Get statements released by members of Congress by date

## get and preview congressional votes information
vts <- ppc_votes("both")
vts
#> # A tibble: 20 x 29
#>   congress chamber session roll_call source url   vote_uri question question_text
#>      <int> <chr>     <int>     <int> <chr>  <chr> <chr>    <chr>    <chr>        
#> 1      116 House         1       624 http:… http… https:/… On Pass… ""           
#> 2      116 House         1       623 http:… http… https:/… On Moti… ""           
#> 3      116 House         1       622 http:… http… https:/… On Agre… ""           
#> 4      116 House         1       621 http:… http… https:/… On Agre… ""           
#> 5      116 House         1       620 http:… http… https:/… On Agre… ""           
#> # … with 15 more rows, and 20 more variables: description <chr>, vote_type <chr>,
#> #   date <chr>, time <chr>, result <chr>, d_yes <int>, d_no <int>, d_present <int>,
#> #   d_not_voting <int>, d_majority_position <chr>, r_yes <int>, r_no <int>,
#> #   r_present <int>, r_not_voting <int>, r_majority_position <chr>, i_yes <int>,
#> #   i_no <int>, i_present <int>, i_not_voting <int>, ppc_request_timestamp <dttm>

Bills

Search for bills in Congress

## get and preview congressional bills information
hc_bls <- ppc_bills("health care")
hc_bls
#> # A tibble: 20 x 34
#>   bill_id bill_slug bill_type number bill_uri title short_title sponsor_title sponsor_id
#>   <chr>   <chr>     <chr>     <chr>  <chr>    <chr> <chr>       <chr>         <chr>     
#> 1 hr4863… hr4863    hr        H.R.4… https:/… To p… United Sta… Rep.          W000187   
#> 2 s2860-… s2860     s         S.2860 https:/… A bi… A bill to … Sen.          L000575   
#> 3 hres70… hres703   hres      H.RES… https:/… "Sup… "Supportin… Rep.          R000602   
#> 4 hres70… hres704   hres      H.RES… https:/… Expr… "Expressin… Rep.          S001206   
#> 5 sres41… sres415   sres      S.RES… https:/… A re… A resoluti… Sen.          W000817   
#> # … with 15 more rows, and 26 more variables: sponsor_name <chr>, sponsor_state <chr>,
#> #   sponsor_party <chr>, sponsor_uri <chr>, gpo_pdf_uri <lgl>, congressdotgov_url <chr>,
#> #   govtrack_url <chr>, introduced_date <chr>, active <lgl>, last_vote <chr>,
#> #   house_passage <lgl>, senate_passage <lgl>, enacted <lgl>, vetoed <lgl>,
#> #   cosponsors <int>, cosponsors_by_party$D <int>, $R <int>, committees <chr>,
#> #   committee_codes <list>, subcommittee_codes <list>, primary_subject <chr>,
#> #   summary <chr>, summary_short <chr>, latest_major_action_date <chr>,
#> #   latest_major_action <chr>, ppc_request_timestamp <dttm>

Committees

Get lists of congressional committees

## get and preview committees information for Senators in 115th Congress
cmt <- ppc_committees("115", chamber = "senate")
cmt
#> # A tibble: 21 x 13
#>   id    name  chamber url   api_uri chair chair_id chair_party chair_state chair_uri
#>   <chr> <chr> <chr>   <chr> <chr>   <chr> <chr>    <chr>       <chr>       <chr>    
#> 1 SSAF  Comm… Senate  http… https:… Pat … R000307  R           KS          https://…
#> 2 SSAP  Comm… Senate  http… https:… Thad… C000567  R           MS          https://…
#> 3 SSAS  Comm… Senate  http… https:… John… M000303  R           AZ          https://…
#> 4 SSBK  Comm… Senate  http… https:… Mich… C000880  R           ID          https://…
#> 5 SSCM  Comm… Senate  http… https:… John… T000250  R           SD          https://…
#> # … with 16 more rows, and 3 more variables: ranking_member_id <chr>,
#> #   subcommittees <list>, ppc_request_timestamp <dttm>

API Key

Use of the ProPublica API requires a valid key, which you can obtain by completing the form found at the following URL: https://www.propublica.org/datastore/api/propublica-congress-api

Once you’ve obtained an API key, you can either include it in every request, e.g.,

## include API key in request
s116 <- ppc_members(116, "senate", api_key = "as9d78f6aayd9fy2fq378a9ds876fsas89d7f")

Or for the duration of any given session, you can set the API key once via the ppc_api_key() function

## set as environment variable for the remainder of current session
ppc_api_key("as9d78f6aayd9fy2fq378a9ds876fsas89d7f")

If you’d like to set the API key and store it for use in future sessions, use set_renv = TRUE

## append as environment variable in user's home .Renviron file
ppc_api_key("as9d78f6aayd9fy2fq378a9ds876fsas89d7f", set_renv = TRUE)