opensecrets

module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 28, 2022 License: MIT

README

OpenSecrets API Go Client

Go Report Card

This is a Go client for the OpenSecrets campaign finance API. It handles HTTP calls and response marshalling, so you can simply call a method and get a struct representing the OpenSecrets response back.

Installation

go get github.com/KiaFarhang/opensecrets

Usage

Constructing a client

First, instantiate an OpenSecretsClient by passing your API key to the constructor function:

package whatever

import (
	"github.com/KiaFarhang/opensecrets/pkg/client"
	"github.com/KiaFarhang/opensecrets/pkg/models"
)

openSecretsClient := client.NewOpenSecretsClient("YOUR_API_KEY")

If you'd like to customize the HTTP client the library uses, call the NewOpenSecretsClientWithHttpClient constructor instead:

httpClient := &http.Client{Timeout: time.Second * 3} // Whatever other configuration you want here...

openSecretsClient := client.NewOpenSecretsClientWithHttpClient("YOUR_API_KEY", httpClient)

The custom HTTP client can be anything that satisfies the following interface:

type OpenSecretsHttpClient interface {
	Do(req *http.Request) (*http.Response, error)
}

The default client has a 5-second HTTP timeout.

The OpenSecretsClient is thread safe; you should construct one and share it throughout your application.

Making API calls

The client has public methods for each of the OpenSecrets API methods. To call one, just pass it the appropriate request object from the models package:

request := models.LegislatorsRequest{Id: "TX"}
legislators, err := client.GetLegislators(request)

The client will either return a struct containing the data from the API call or an error if something went wrong.

The client throws an error if you pass it a request that's missing a required parameter. Required parameters are the same as those noted in the docs for each method, listed in the table below. (Each request struct also includes comments noting the required and optional fields)

Note you never need to pass the apikey or output arguments to the client. It sends the API key passed at construction with every request, and it always requests output in JSON so it can marshal that response into the struct each method returns.

For a full example of each API call, see the end-to-end tests at pkg/client/client_end_to_end_test.go. You can run them locally by pulling down this repo and using the following command from its root directory:

API_KEY=your_key_here go test ./...

Available methods
API method Client method Description Docs
getLegislators GetLegislators Provides a list of Congressional legislators for a specified subset (state or specific CID) Link
memPFDProfile GetMemberPFDProfile Returns data on the personal finances of a member of Congress, as well as judicial + executive branches Link
candSummary GetCandidateSummary Provides summary fundraising information for a politician Link
candContrib GetCandidateContributors Returns top contributors to a candidate for/sitting member of Congress Link
candIndustry GetCandidateIndustries Provides the top 10 industries contributing to a candidate Link
candIndByInd GetCandidateIndustryDetails Provides total contributed to a candidate from an industry. Link
candSector GetCandidateTopSectorDetails Provides sector total of a candidate's receipts Link
congCmteIndus GetCommitteeFundraisingDetails Provides fundraising details for all members of a given committee from the provided industry Link
getOrgs SearchForOrganization Searches for an organization by name or partial name Link
orgSummary GetOrganizationSummary Provides summary fundraising information for an organization Link
independentExpend GetLatestIndependentExpenditures Get the latest 50 independent expenditures reported. Link

Development

Run unit tests with go test -short ./...

Run unit and end-to-end tests with API_KEY=your_key_here go test ./...

Directories

Path Synopsis
internal
pkg
client
Package client provides a client for the OpenSecrets REST API.
Package client provides a client for the OpenSecrets REST API.
models
Package model provides data types representing requests to the OpenSecrets REST API, as well as the responses it returns.
Package model provides data types representing requests to the OpenSecrets REST API, as well as the responses it returns.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL