From 6d25aa582fa8a6a118d3e1a8f38562691d6bc739 Mon Sep 17 00:00:00 2001 From: zhuxiaolong37 Date: Fri, 3 Jan 2025 14:35:12 +0800 Subject: [PATCH] add select object --- alibabacloud_oss_v2/__init__.py | 1 + alibabacloud_oss_v2/client.py | 27 + alibabacloud_oss_v2/crc.py | 17 + alibabacloud_oss_v2/models/__init__.py | 3 +- alibabacloud_oss_v2/models/select_object.py | 721 +++ alibabacloud_oss_v2/operations/__init__.py | 3 +- .../operations/select_object.py | 107 + sample/create_select_object_meta_csv.py | 87 + sample/create_select_object_meta_json.py | 83 + sample/select_object_csv.py | 96 + sample/select_object_csv_file.py | 99 + sample/select_object_json.py | 89 + sample/select_object_json_file.py | 122 + tests/data/sample_data.csv | 304 + tests/data/sample_json.json | 5154 +++++++++++++++++ tests/data/sample_json_lines.json | 5145 ++++++++++++++++ .../integration/test_select_object_client.py | 472 ++ tests/unit/models/test_select_object.py | 410 ++ 18 files changed, 12938 insertions(+), 2 deletions(-) create mode 100644 alibabacloud_oss_v2/models/select_object.py create mode 100644 alibabacloud_oss_v2/operations/select_object.py create mode 100644 sample/create_select_object_meta_csv.py create mode 100644 sample/create_select_object_meta_json.py create mode 100644 sample/select_object_csv.py create mode 100644 sample/select_object_csv_file.py create mode 100644 sample/select_object_json.py create mode 100644 sample/select_object_json_file.py create mode 100644 tests/data/sample_data.csv create mode 100644 tests/data/sample_json.json create mode 100644 tests/data/sample_json_lines.json create mode 100644 tests/integration/test_select_object_client.py create mode 100644 tests/unit/models/test_select_object.py diff --git a/alibabacloud_oss_v2/__init__.py b/alibabacloud_oss_v2/__init__.py index 85013d5..7dcf077 100644 --- a/alibabacloud_oss_v2/__init__.py +++ b/alibabacloud_oss_v2/__init__.py @@ -41,6 +41,7 @@ from .models.bucket_tags import * from .models.bucket_meta_query import * from .models.bucket_https_config import * +from .models.select_object import * from .config import Config from .client import Client diff --git a/alibabacloud_oss_v2/client.py b/alibabacloud_oss_v2/client.py index 375fd82..4a77f70 100644 --- a/alibabacloud_oss_v2/client.py +++ b/alibabacloud_oss_v2/client.py @@ -2148,3 +2148,30 @@ def put_bucket_https_config(self, request: models.PutBucketHttpsConfigRequest, * """ return operations.put_bucket_https_config(self._client, request, **kwargs) + # select object + def select_object(self, request: models.SelectObjectRequest, **kwargs + ) -> models.SelectObjectResult: + """ + SelectObject Executes SQL statements to perform operations on an object and obtains the execution results. + + Args: + request (SelectObjectRequest): Request parameters for SelectObject operation. + + Returns: + SelectObjectResult: Response result for SelectObject operation. + """ + + return operations.select_object(self._client, request, **kwargs) + + def create_select_object_meta(self, request: models.CreateSelectObjectMetaRequest, **kwargs + ) -> models.CreateSelectObjectMetaResult: + """ + CreateSelectObjectMeta You can call the CreateSelectObjectMeta operation to obtain information about an object, such as the total number of rows and the number of splits. + + Args: + request (CreateSelectObjectMetaRequest): Request parameters for CreateSelectObjectMeta operation. + + Returns: + CreateSelectObjectMetaResult: Response result for CreateSelectObjectMeta operation. + """ + return operations.create_select_object_meta(self._client, request, **kwargs) diff --git a/alibabacloud_oss_v2/crc.py b/alibabacloud_oss_v2/crc.py index 89114fd..b366c74 100644 --- a/alibabacloud_oss_v2/crc.py +++ b/alibabacloud_oss_v2/crc.py @@ -236,3 +236,20 @@ def combine(crc1, crc2, size) -> int: int: _description_ """ return _COMBINE_FUNC(crc1, crc2, size) + +class Crc32(object): + _POLY = 0x104C11DB7 + _XOROUT = 0xFFFFFFFF + + def __init__(self, init_crc=0): + self.crc32 = crcmod.Crc(self._POLY, initCrc=init_crc, rev=True, xorOut=self._XOROUT) + + def __call__(self, data): + self.update(data) + + def update(self, data): + self.crc32.update(data) + + @property + def crc(self): + return self.crc32.crcValue \ No newline at end of file diff --git a/alibabacloud_oss_v2/models/__init__.py b/alibabacloud_oss_v2/models/__init__.py index 10c448f..9d88bb2 100644 --- a/alibabacloud_oss_v2/models/__init__.py +++ b/alibabacloud_oss_v2/models/__init__.py @@ -28,4 +28,5 @@ from .bucket_style import * from .bucket_tags import * from .bucket_meta_query import * -from .bucket_https_config import * \ No newline at end of file +from .bucket_https_config import * +from .select_object import * \ No newline at end of file diff --git a/alibabacloud_oss_v2/models/select_object.py b/alibabacloud_oss_v2/models/select_object.py new file mode 100644 index 0000000..3f9fbb2 --- /dev/null +++ b/alibabacloud_oss_v2/models/select_object.py @@ -0,0 +1,721 @@ +import struct +import sys +from .. import serde +from typing import Optional, Any +from ..crc import Crc32 + + +class SelectResult(object): + def __init__(self, resp, progress_callback=None, content_length=None, crc_enabled=False): + self.select_resp = SelectResponseAdapter(resp, progress_callback, content_length, enable_crc=crc_enabled) + + def read(self): + return self.select_resp.response.read() + + def close(self): + self.select_resp.response.close() + + def __iter__(self): + return iter(self.select_resp) + + def __next__(self): + return self.select_resp.next() + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.close() + + +class SelectResponseAdapter(object): + _CHUNK_SIZE = 8 * 1024 + _CONTINIOUS_FRAME_TYPE = 8388612 + _DATA_FRAME_TYPE = 8388609 + _END_FRAME_TYPE = 8388613 + _META_END_FRAME_TYPE = 8388614 + _JSON_META_END_FRAME_TYPE = 8388615 + _FRAMES_FOR_PROGRESS_UPDATE = 10 + + def __init__(self, response, progress_callback=None, content_length=None, enable_crc=False): + self.response = response + self.frame_off_set = 0 + self.frame_length = 0 + self.frame_data = b'' + self.check_sum_flag = 0 + self.file_offset = 0 + self.finished = 0 + self.raw_buffer = b'' + self.raw_buffer_offset = 0 + self.callback = progress_callback + self.frames_since_last_progress_report = 0 + self.content_length = content_length + self.resp_content_iter = response.iter_bytes() + self.enable_crc = enable_crc + self.payload = b'' + self.output_raw_data = response.headers.get("x-oss-select-output-raw", '') == "true" + self.request_id = response.headers.get("x-oss-request-id", '') + self.splits = 0 + self.rows = 0 + self.columns = 0 + + def read(self): + if self.finished: + return b'' + + content = b'' + for data in self: + content += data + + return content + + def __iter__(self): + return self + + def __next__(self): + return self.next() + + def next(self): + if self.output_raw_data == True: + data = next(self.resp_content_iter) + if len(data) != 0: + return data + else: + raise StopIteration + + while self.finished == 0: + if self.frame_off_set < self.frame_length: + data = self.frame_data[self.frame_off_set: self.frame_length] + self.frame_length = self.frame_off_set = 0 + return data + else: + self.read_next_frame() + self.frames_since_last_progress_report += 1 + if (self.frames_since_last_progress_report >= SelectResponseAdapter._FRAMES_FOR_PROGRESS_UPDATE and self.callback is not None): + self.callback(self.file_offset, self.content_length) + self.frames_since_last_progress_report = 0 + + raise StopIteration + + def read_raw(self, amt): + ret = b'' + read_count = 0 + while amt > 0 and self.finished == 0: + size = len(self.raw_buffer) + if size == 0: + self.raw_buffer = next(self.resp_content_iter) + self.raw_buffer_offset = 0 + size = len(self.raw_buffer) + if size == 0: + break + + if size - self.raw_buffer_offset >= amt: + data = self.raw_buffer[self.raw_buffer_offset:self.raw_buffer_offset + amt] + data_size = len(data) + self.raw_buffer_offset += data_size + ret += data + read_count += data_size + amt -= data_size + else: + data = self.raw_buffer[self.raw_buffer_offset:] + data_len = len(data) + ret += data + read_count += data_len + amt -= data_len + self.raw_buffer = b'' + + return ret + + def change_endianness_if_needed(self, bytes_array): + if sys.byteorder == 'little': + bytes_array.reverse() + + def read_next_frame(self): + frame_type = bytearray(self.read_raw(4)) + payload_length = bytearray(self.read_raw(4)) + self.change_endianness_if_needed(payload_length) # convert to little endian + payload_length_val = struct.unpack("I", bytes(payload_length))[0] + header_checksum = bytearray(self.read_raw(4)) + + frame_type[0] = 0 # mask the version bit + self.change_endianness_if_needed(frame_type) # convert to little endian + frame_type_val = struct.unpack("I", bytes(frame_type))[0] + if (frame_type_val != SelectResponseAdapter._DATA_FRAME_TYPE and + frame_type_val != SelectResponseAdapter._CONTINIOUS_FRAME_TYPE and + frame_type_val != SelectResponseAdapter._END_FRAME_TYPE and + frame_type_val != SelectResponseAdapter._META_END_FRAME_TYPE and + frame_type_val != SelectResponseAdapter._JSON_META_END_FRAME_TYPE): + + raise Exception(self.request_id, "Unexpected frame type:" + str(frame_type_val)) + + self.payload = self.read_raw(payload_length_val) + file_offset_bytes = bytearray(self.payload[0:8]) + self.change_endianness_if_needed(file_offset_bytes) + self.file_offset = struct.unpack("Q", bytes(file_offset_bytes))[0] + if frame_type_val == SelectResponseAdapter._DATA_FRAME_TYPE: + self.frame_length = payload_length_val - 8 + self.frame_off_set = 0 + self.check_sum_flag = 1 + self.frame_data = self.payload[8:] + checksum = bytearray(self.read_raw(4)) # read checksum crc32 + self.change_endianness_if_needed(checksum) + checksum_val = struct.unpack("I", bytes(checksum))[0] + if self.enable_crc: + crc32 = Crc32() + crc32.update(self.payload) + checksum_calc = crc32.crc + if checksum_val != checksum_calc: + raise Exception( + "Incorrect checksum: Actual" + str(checksum_val) + ". Calculated:" + str(checksum_calc), + self.request_id) + + elif frame_type_val == SelectResponseAdapter._CONTINIOUS_FRAME_TYPE: + self.frame_length = self.frame_off_set = 0 + self.check_sum_flag = 1 + self.read_raw(4) + elif frame_type_val == SelectResponseAdapter._END_FRAME_TYPE: + self.frame_off_set = 0 + scanned_size_bytes = bytearray(self.payload[8:16]) + status_bytes = bytearray(self.payload[16:20]) + self.change_endianness_if_needed(status_bytes) + status = struct.unpack("I", bytes(status_bytes))[0] + error_msg_size = payload_length_val - 20 + error_msg = b'' + error_code = b'' + if error_msg_size > 0: + error_msg = self.payload[20:error_msg_size + 20] + error_code_index = error_msg.find(b'.') + if error_code_index >= 0 and error_code_index < error_msg_size - 1: + error_code = error_msg[0:error_code_index] + error_msg = error_msg[error_code_index + 1:] + + if status // 100 != 2: + raise Exception(status, error_code, error_msg) + self.frame_length = 0 + if self.callback is not None: + self.callback(self.file_offset, self.content_length) + self.read_raw(4) # read the payload checksum + self.frame_length = 0 + self.finished = 1 + elif frame_type_val == SelectResponseAdapter._META_END_FRAME_TYPE or frame_type_val == SelectResponseAdapter._JSON_META_END_FRAME_TYPE: + self.frame_off_set = 0 + scanned_size_bytes = bytearray(self.payload[8:16]) + status_bytes = bytearray(self.payload[16:20]) + self.change_endianness_if_needed(status_bytes) + status = struct.unpack("I", bytes(status_bytes))[0] + splits_bytes = bytearray(self.payload[20:24]) + self.change_endianness_if_needed(splits_bytes) + self.splits = struct.unpack("I", bytes(splits_bytes))[0] + lines_bytes = bytearray(self.payload[24:32]) + self.change_endianness_if_needed(lines_bytes) + self.rows = struct.unpack("Q", bytes(lines_bytes))[0] + + error_index = 36 + if frame_type_val == SelectResponseAdapter._META_END_FRAME_TYPE: + column_bytes = bytearray(self.payload[32:36]) + self.change_endianness_if_needed(column_bytes) + self.columns = struct.unpack("I", bytes(column_bytes))[0] + else: + error_index = 32 + + error_size = payload_length_val - error_index + error_msg = b'' + error_code = b'' + if (error_size > 0): + error_msg = self.payload[error_index:error_index + error_size] + error_code_index = error_msg.find(b'.') + if error_code_index >= 0 and error_code_index < error_size - 1: + error_code = error_msg[0:error_code_index] + error_msg = error_msg[error_code_index + 1:] + + self.read_raw(4) # read the payload checksum + self.final_status = status + self.frame_length = 0 + self.finished = 1 + if (status / 100 != 2): + raise Exception(status, error_code, error_msg) + + +class JSONInput(serde.Model): + """Input JSON format parameters.""" + + def __init__( + self, + type: Optional[str] = None, + range: Optional[str] = None, + parse_json_number_as_string: Optional[bool] = None, + **kwargs: Any + ) -> None: + """ + Args: + type (str, optional): Specify the type of JSON input: Document, Lines. + range (str, optional): Specify the scope of the query file (optional). Supports two formats: + Search by row: line range=start end. For example, line range=10-20 means scanning lines 10 to 20. + Search by Split: split range=start end. For example, split range=10-20 means scanning the 10th to 20th split. + Both start and end are inclusive. Its format is consistent with the range parameter in range get. + Only used when the document is CSV or JSON type is LINES. + parse_json_number_as_string (bool, optional): Parse numbers (integers and floating-point numbers) in JSON into strings. + At present, parsing floating-point numbers in JSON results in a loss of precision. + If you want to preserve the original data in its entirety, this option is recommended. + If numerical calculations are required, they can be cast into the desired format in SQL, such as int, double, or decimal. + Default value: false + """ + super().__init__(**kwargs) + self.type = type + self.range = range + self.parse_json_number_as_string = parse_json_number_as_string + + + _attribute_map = { + "type": {"tag": "xml", "rename": "Type"}, + "range": {"tag": "xml", "rename": "Range"}, + "parse_json_number_as_string": {"tag": "xml", "rename": "ParseJsonNumberAsString", "type": "bool"}, + } + _xml_map = { + "name": "JSON" + } + + +class CSVInput(serde.Model): + """Input CSV format parameters.""" + + def __init__( + self, + file_header_info: Optional[str] = None, + record_delimiter: Optional[str] = None, + field_delimiter: Optional[str] = None, + quote_character: Optional[str] = None, + comment_character: Optional[str] = None, + range: Optional[str] = None, + allow_quoted_record_delimiter: Optional[bool] = None, + **kwargs: Any + ) -> None: + """ + Args: + file_header_info (str, Optional): Specify CSV file header information (optional) + Value: + Use: This CSV file has header information and can use CSV column names as column names in Select. + Ignore: This CSV file has header information, but CSV column names cannot be used as column names in Select. + None: This file has no header information and is the default value. + record_delimiter (str, Optional): Specify line breaks in Base64 encoding. The default value is \ n (optional). + The value before encoding is at most two characters, represented by the ANSI value of the character, + for example, in Java, \ n is used to represent line breaks. + field_delimiter (str, Optional): Specify CSV column delimiter with Base64 encoding. The default value is, (optional). + The value before encoding must be one character, represented by the ANSI value of the character, + for example, in Java, representing a comma. + quote_character (str, Optional): Specify the quotation mark characters for CSV in Base64 encoding. + The default value is \ "(optional). Line breaks and column separators within quotation marks in CSV will be treated as regular characters. + The value before encoding must be one character, represented by the ANSI value of the character, + for example, using '\' to indicate quotation marks in Java. + comment_character (str, Optional): Specify the annotation character for CSV, encoded in Base64 format. + The default value is empty (i.e. no comment character). + range (str, Optional): Specify the scope of the query file (optional). Supports two formats: + Search by row: line range=start end. For example, line range=10-20 means scanning lines 10 to 20. + Search by Split: split range=start end. For example, split range=10-20 means scanning the 10th to 20th split. + Both start and end are inclusive. Its format is consistent with the range parameter in range get. + Only used when the document is CSV or JSON type is LINES. + allow_quoted_record_delimiter (bool, Optional): Specify whether the CSV content contains line breaks within quotation marks. + For example, if a column value is "abc \ ndef" (where \ n is a line break), then the value needs to be set to true. + When the value is false, select supports the semantics of header range, which enables more efficient sharding queries. + """ + super().__init__(**kwargs) + self.file_header_info = file_header_info + self.record_delimiter = record_delimiter + self.field_delimiter = field_delimiter + self.quote_character = quote_character + self.comment_character = comment_character + self.range = range + self.allow_quoted_record_delimiter = allow_quoted_record_delimiter + + _attribute_map = { + "file_header_info": {"tag": "xml", "rename": "FileHeaderInfo"}, + "record_delimiter": {"tag": "xml", "rename": "RecordDelimiter"}, + "field_delimiter": {"tag": "xml", "rename": "FieldDelimiter"}, + "quote_character": {"tag": "xml", "rename": "QuoteCharacter"}, + "comment_character": {"tag": "xml", "rename": "CommentCharacter"}, + "range": {"tag": "xml", "rename": "Range"}, + "allow_quoted_record_delimiter": {"tag": "xml", "rename": "AllowQuotedRecordDelimiter", "type": "bool"}, + } + _xml_map = { + "name": "CSV" + } + + +class InputSerialization(serde.Model): + """Input serialization parameters.""" + + def __init__( + self, + compression_type: Optional[str] = None, + json_input: Optional[JSONInput] = None, + csv_input: Optional[CSVInput] = None, + **kwargs: Any + ) -> None: + """ + Args: + compression_type (str, Optional): Specify file compression type: None | GZIP. + json_input (JSONInput, Optional): Input JSON format parameters. + csv_input (CSVInput, Optional): Input CSV format parameters. + """ + super().__init__(**kwargs) + self.compression_type = compression_type + self.json_input = json_input + self.csv_input = csv_input + + _attribute_map = { + "compression_type": {"tag": "xml", "rename": "CompressionType"}, + "json_input": {"tag": "xml", "rename": "JSON", "type": "JSONInput"}, + "csv_input": {"tag": "xml", "rename": "CSV", "type": "CSVInput"}, + } + _xml_map = { + "name": "InputSerialization" + } + +class JSONOutput(serde.Model): + """Format parameters for outputting JSON.""" + + def __init__( + self, + record_delimiter: Optional[str] = None, + **kwargs: Any + ) -> None: + """ + Args: + record_delimiter (str, Optional): Specify line breaks in Base64 encoding. The default value is \ n (optional). + The value before encoding is at most two characters, represented by the ANSI value of the character, + for example, in Java, \ n is used to represent line breaks. + """ + super().__init__(**kwargs) + self.record_delimiter = record_delimiter + + _attribute_map = { + "record_delimiter": {"tag": "xml", "rename": "RecordDelimiter"}, + } + _xml_map = { + "name": "JSON" + } + +class CSVOutput(serde.Model): + """Output CSV format parameters.""" + + def __init__( + self, + record_delimiter: Optional[str] = None, + field_delimiter: Optional[str] = None, + quote_character: Optional[str] = None, + **kwargs: Any + ) -> None: + """ + Args: + record_delimiter (str, Optional): Specify line breaks in Base64 encoding. The default value is \ n (optional). + The value before encoding is at most two characters, represented by the ANSI value of the character, + for example, in Java, \ n is used to represent line breaks.. + field_delimiter (str, Optional): Specify CSV column delimiter with Base64 encoding. + The default value is, (optional). The value before encoding must be one character, represented by the ANSI value of the character, + for example, in Java, representing a comma. + quote_character (str, Optional): Specify the quotation mark characters for CSV in Base64 encoding. + The default value is \ "(optional). Line breaks and column separators within quotation marks in CSV will be treated as regular characters. + The value before encoding must be one character, represented by the ANSI value of the character, + for example, using '\' to indicate quotation marks in Java. + """ + super().__init__(**kwargs) + self.record_delimiter = record_delimiter + self.field_delimiter = field_delimiter + self.quote_character = quote_character + + _attribute_map = { + "record_delimiter": {"tag": "xml", "rename": "RecordDelimiter"}, + "field_delimiter": {"tag": "xml", "rename": "FieldDelimiter"}, + "quote_character": {"tag": "xml", "rename": "QuoteCharacter"}, + } + _xml_map = { + "name": "CSV" + } + +class OutputSerialization(serde.Model): + """Output serialization parameters.""" + + def __init__( + self, + csv_output: Optional[CSVOutput] = None, + json_output: Optional[JSONOutput] = None, + output_raw_data: Optional[bool] = None, + keep_all_columns: Optional[bool] = None, + enable_payload_crc: Optional[bool] = None, + output_header: Optional[bool] = None, + **kwargs: Any + ) -> None: + """ + Args: + csv_output (CSVOutput, Optional): Output CSV format parameters. + json_output (JSONOutput, Optional): Format parameters for outputting JSON. + output_raw_data (bool, Optional): Output serialization parameters. + keep_all_columns (bool, Optional): Specify the location of all CSV columns in the return result (optional, default value is false). + But only columns that appear in the select statement will have values, while columns that do not appear will be empty. + The data in each row of the returned result will be arranged in CSV column order from low to high. + enable_payload_crc (bool, Optional): There will be a 32-bit crc32 checksum in each frame. + The client can calculate the Crc32 value of the corresponding payload for data integrity verification. + output_header (bool, Optional): Output CSV header information at the beginning of the returned result. + """ + super().__init__(**kwargs) + self.csv_output = csv_output + self.json_output = json_output + self.output_raw_data = output_raw_data + self.keep_all_columns = keep_all_columns + self.enable_payload_crc = enable_payload_crc + self.output_header = output_header + + _attribute_map = { + "csv_output": {"tag": "xml", "rename": "CSV", "type": "CSVOutput"}, + "json_output": {"tag": "xml", "rename": "JSON", "type": "JSONOutput"}, + "output_raw_data": {"tag": "xml", "rename": "OutputRawData", "type": "bool"}, + "keep_all_columns": {"tag": "xml", "rename": "KeepAllColumns", "type": "bool"}, + "enable_payload_crc": {"tag": "xml", "rename": "EnablePayloadCrc", "type": "bool"}, + "output_header": {"tag": "xml", "rename": "OutputHeader", "type": "bool"}, + } + _xml_map = { + "name": "OutputSerialization" + } + +class SelectOptions(serde.Model): + """Additional optional parameters.""" + + def __init__( + self, + skip_partial_data_record: Optional[bool] = None, + max_skipped_records_allowed: Optional[int] = None, + **kwargs: Any + ) -> None: + """ + Args: + skip_partial_data_record (bool, Optional): Ignore rows with missing data. When the parameter is false, + OSS will ignore missing columns (with values treated as null) without reporting an error. + When the parameter is true, the row of data is skipped as a whole due to incompleteness. + When the number of skipped rows exceeds the specified maximum number of skipped rows, + OSS will report an error and stop processing. + max_skipped_records_allowed (int, Optional): Specify the maximum number of skipped rows that can be tolerated. + When a row of data is skipped due to a mismatch with the expected type in SQL, + or when one or more columns of data are missing and SkipPartialData Record is True, + the row of data will be skipped. If the number of skipped rows exceeds the value of this parameter, + OSS will stop processing and report an error. + """ + super().__init__(**kwargs) + self.skip_partial_data_record = skip_partial_data_record + self.max_skipped_records_allowed = max_skipped_records_allowed + + _attribute_map = { + "skip_partial_data_record": {"tag": "xml", "rename": "SkipPartialDataRecord", "type": "bool"}, + "max_skipped_records_allowed": {"tag": "xml", "rename": "MaxSkippedRecordsAllowed"}, + } + + _xml_map = { + "name": "Options" + } + + +class SelectRequest(serde.Model): + """The request for the Select operation.""" + + def __init__( + self, + expression: Optional[str] = None, + input_serialization: Optional[InputSerialization] = None, + output_serialization: Optional[OutputSerialization] = None, + options: Optional[SelectOptions] = None, + **kwargs: Any + ) -> None: + """ + Args: + expression (str, Optional): SQL statements encoded in Base64. + input_serialization (InputSerialization, Optional): Input serialization parameters. + output_serialization (OutputSerialization, Optional): Output serialization parameters. + options (SelectOptions, optional): Additional optional parameters. + """ + super().__init__(**kwargs) + self.expression = expression + self.input_serialization = input_serialization + self.output_serialization = output_serialization + self.options = options + + _attribute_map = { + "expression": {"tag": "xml", "rename": "Expression"}, + "input_serialization": {"tag": "xml", "rename": "InputSerialization", "type": "InputSerialization"}, + "output_serialization": {"tag": "xml", "rename": "OutputSerialization", "type": "OutputSerialization"}, + "options": {"tag": "xml", "rename": "Options", "type": "SelectOptions"}, + } + + _xml_map = { + "name": "SelectRequest" + } + +class SelectObjectRequest(serde.RequestModel): + """The request for the SelectObject operation.""" + + _attribute_map = { + "bucket": {"tag": "input", "position": "host", "required": True}, + "key": {"tag": "input", "position": "path", "required": True}, + "select_request": {"tag": "input", "position": "body", "rename": "SelectRequest", "type": "xml", "required": True}, + "progress_callback": {}, + "request_payer": {"tag": "input", "position": "header", "rename": "x-oss-request-payer"}, + } + + def __init__( + self, + bucket: Optional[str] = None, + key: Optional[str] = None, + select_request: Optional[SelectRequest] = None, + progress_callback: Optional[Any]= None, + request_payer: Optional[str] = None, + **kwargs: Any + ) -> None: + """ + Args: + bucket (str, required): The name of the bucket. + key (str, required): The name of the object. + select_request (SelectRequest, required): Save the container for the Select request. + request_payer (str, optional): To indicate that the requester is aware that the request and data download will incur costs. + """ + super().__init__(**kwargs) + self.bucket = bucket + self.key = key + self.select_request = select_request + self.progress_callback = progress_callback + self.request_payer = request_payer + + +class SelectObjectResult(serde.ResultModel): + """The result for the SelectObject operation.""" + + def __init__( + self, + body: Optional[SelectResult] = None, + **kwargs: Any + ) -> None: + """ + Args: + body (Any, optional): Object data. + """ + super().__init__(**kwargs) + self.body = body + + _attribute_map = { + "body": {}, + } + + +class CsvMetaRequest(serde.Model): + """ + The container that stores CsvMetaRequest information. + """ + + _attribute_map = { + 'input_serialization': {'tag': 'xml', 'rename': 'InputSerialization', 'type': 'InputSerialization'}, + 'overwrite_if_exists': {'tag': 'xml', 'rename': 'OverwriteIfExists', 'type': 'bool'}, + } + + _xml_map = { + 'name': 'CsvMetaRequest' + } + + _dependency_map = { + 'InputSerialization': {'new': lambda: InputSerialization()}, + } + + def __init__( + self, + input_serialization: Optional[InputSerialization] = None, + overwrite_if_exists: Optional[bool] = None, + **kwargs: Any + ) -> None: + """ + input_serialization (InputSerialization, optional): Specifies input serialization. This parameter is optional. + overwrite_if_exists (bool, optional): Specifies whether to perform the operation again and overwrite the existing data.Default value: false. This indicates that the result is directly returned if the existing data returned from a previous CreateSelectObjectMeta operation is available.Valid values:* true * false + """ + super().__init__(**kwargs) + self.input_serialization = input_serialization + self.overwrite_if_exists = overwrite_if_exists + +class JsonMetaRequest(serde.Model): + """ + The container that stores JsonMetaRequest information. + """ + + _attribute_map = { + 'input_serialization': {'tag': 'xml', 'rename': 'InputSerialization', 'type': 'InputSerialization'}, + 'overwrite_if_exists': {'tag': 'xml', 'rename': 'OverwriteIfExists', 'type': 'bool'}, + } + + _xml_map = { + 'name': 'JsonMetaRequest' + } + + _dependency_map = { + 'InputSerialization': {'new': lambda: InputSerialization()}, + } + + def __init__( + self, + input_serialization: Optional[InputSerialization] = None, + overwrite_if_exists: Optional[bool] = None, + **kwargs: Any + ) -> None: + """ + input_serialization (InputSerialization, optional): Specifies input serialization. This parameter is optional. + overwrite_if_exists (bool, optional): Specifies whether to perform the operation again and overwrite the existing data.Default value: false. This indicates that the result is directly returned if the existing data returned from a previous CreateSelectObjectMeta operation is available.Valid values:* true * false + """ + super().__init__(**kwargs) + self.input_serialization = input_serialization + self.overwrite_if_exists = overwrite_if_exists + +class CreateSelectObjectMetaRequest(serde.RequestModel): + """ + The request for the CreateSelectObjectMeta operation. + """ + + _attribute_map = { + 'bucket': {'tag': 'input', 'position': 'host', 'rename': 'bucket', 'type': 'str', 'required': True}, + 'key': {'tag': 'input', 'position': 'path', 'rename': 'key', 'type': 'str', 'required': True}, + 'csv_meta_request': {'tag': 'input', 'position': 'body', 'rename': 'CsvMetaRequest', 'type': 'xml'}, + 'json_meta_request': {'tag': 'input', 'position': 'body', 'rename': 'JsonMetaRequest', 'type': 'xml'}, + } + + def __init__( + self, + bucket: str = None, + key: str = None, + csv_meta_request: Optional[CsvMetaRequest] = None, + json_meta_request: Optional[JsonMetaRequest] = None, + **kwargs: Any + ) -> None: + """ + bucket (str, required): The name of the bucket. + key (str, required): The full path of the object. + select_meta_request (SelectMetaRequest, optional): The container that stores SelectMetaRequest information. + """ + super().__init__(**kwargs) + self.bucket = bucket + self.key = key + self.csv_meta_request = csv_meta_request + self.json_meta_request = json_meta_request + + +class CreateSelectObjectMetaResult(serde.ResultModel): + """ + The request for the CreateSelectObjectMeta operation. + """ + + def __init__( + self, + body: Optional[SelectResult] = None, + **kwargs: Any + ) -> None: + """ + Args: + body (Any, optional): Object data. + """ + super().__init__(**kwargs) + self.body = body + + _attribute_map = { + "body": {}, + } \ No newline at end of file diff --git a/alibabacloud_oss_v2/operations/__init__.py b/alibabacloud_oss_v2/operations/__init__.py index 68e2ad8..3e49435 100644 --- a/alibabacloud_oss_v2/operations/__init__.py +++ b/alibabacloud_oss_v2/operations/__init__.py @@ -28,4 +28,5 @@ from .bucket_style import * from .bucket_tags import * from .bucket_meta_query import * -from .bucket_https_config import * \ No newline at end of file +from .bucket_https_config import * +from .select_object import * \ No newline at end of file diff --git a/alibabacloud_oss_v2/operations/select_object.py b/alibabacloud_oss_v2/operations/select_object.py new file mode 100644 index 0000000..69997c5 --- /dev/null +++ b/alibabacloud_oss_v2/operations/select_object.py @@ -0,0 +1,107 @@ +from ..types import OperationInput, CaseInsensitiveDict +from .. import serde +from .. import serde_utils +from .. import models +from .._client import _SyncClientImpl +from .. import SelectResult + +def select_object(client: _SyncClientImpl, request: models.SelectObjectRequest, **kwargs) -> models.SelectObjectResult: + """ + SelectObject Executes SQL statements to perform operations on an object and obtains the execution results. + + Args: + client (_SyncClientImpl): A agent that sends the request. + request (SelectObjectRequest): The request for the SelectObject operation. + + Returns: + SelectObjectResult: The result for the SelectObject operation. + """ + + if request.select_request and request.select_request.input_serialization.json_input is None: + process = 'csv/select' + else: + process = 'json/select' + + op_input = serde.serialize_input( + request=request, + op_input=OperationInput( + op_name='SelectObject', + method='POST', + headers=CaseInsensitiveDict({ + 'Content-Type': 'application/xml', + }), + bucket=request.bucket, + key=request.key, + parameters={ + 'x-oss-process': process, + }, + ), + custom_serializer=[ + serde_utils.add_content_md5 + ], + ) + + op_output = client.invoke_operation(op_input, **kwargs) + + enable_payload_crc = None + if request.select_request.output_serialization is not None: + enable_payload_crc = request.select_request.output_serialization.enable_payload_crc + + return serde.deserialize_output( + result=models.SelectObjectResult( + body=SelectResult(op_output.http_response, request.progress_callback, op_input.headers.get('content-length'), enable_payload_crc) + ), + op_output=op_output, + custom_deserializer=[ + serde.deserialize_output_xmlbody, + ], + ) + + +def create_select_object_meta(client: _SyncClientImpl, request: models.CreateSelectObjectMetaRequest, **kwargs) -> models.CreateSelectObjectMetaResult: + """ + create_select_object_meta synchronously + + Args: + client (_SyncClientImpl): A agent that sends the request. + request (CreateSelectObjectMetaRequest): The request for the CreateSelectObjectMeta operation. + + Returns: + CreateSelectObjectMetaResult: The result for the CreateSelectObjectMeta operation. + """ + + if request.csv_meta_request and request.csv_meta_request.input_serialization.json_input is None: + process = 'csv/meta' + else: + process = 'json/meta' + + op_input = serde.serialize_input( + request=request, + op_input=OperationInput( + op_name='CreateSelectObjectMeta', + method='POST', + headers=CaseInsensitiveDict({ + 'Content-Type': 'application/xml', + }), + bucket=request.bucket, + key=request.key, + parameters={ + 'x-oss-process': process, + }, + ), + custom_serializer=[ + serde_utils.add_content_md5 + ] + ) + + op_output = client.invoke_operation(op_input, **kwargs) + + return serde.deserialize_output( + result=models.CreateSelectObjectMetaResult( + body=SelectResult(op_output.http_response, None, op_input.headers.get('content-length'), None) + ), + op_output=op_output, + custom_deserializer=[ + serde.deserialize_output_xmlbody + ], + ) \ No newline at end of file diff --git a/sample/create_select_object_meta_csv.py b/sample/create_select_object_meta_csv.py new file mode 100644 index 0000000..b0eaf3a --- /dev/null +++ b/sample/create_select_object_meta_csv.py @@ -0,0 +1,87 @@ +import argparse +import base64 +import alibabacloud_oss_v2 as oss + + +parser = argparse.ArgumentParser(description="create select object meta csv sample") +parser.add_argument('--region', help='The region in which the bucket is located.', required=True) +parser.add_argument('--bucket', help='The name of the bucket.', required=True) +parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS') +parser.add_argument('--key', help='The name of the object.', required=True) +parser.add_argument('--expression', default='select * from ossobject as s where cast(s.age as int) > 40') + + + +def main(): + + args = parser.parse_args() + + # Loading credentials values from the environment variables + credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() + + # Using the SDK's default configuration + cfg = oss.config.load_default() + cfg.credentials_provider = credentials_provider + cfg.region = args.region + if args.endpoint is not None: + cfg.endpoint = args.endpoint + + client = oss.Client(cfg) + + data = "name,school,company,age\nLora Francis,School,Staples Inc,27\nEleanor Little,School,\"Conectiv, Inc\",43\nRosie Hughes,School,Western Gas Resources Inc,44\nLawrence Ross,School,MetLife Inc.,24\n" + + result = client.put_object(oss.PutObjectRequest( + bucket=args.bucket, + key=args.key, + body=data, + )) + + print(f'status code: {result.status_code},' + f' request id: {result.request_id},' + f' content md5: {result.content_md5},' + f' etag: {result.etag},' + f' hash crc64: {result.hash_crc64},' + f' version id: {result.version_id},' + ) + + request = oss.CreateSelectObjectMetaRequest( + bucket=args.bucket, + key=args.key, + csv_meta_request=oss.CsvMetaRequest( + overwrite_if_exists=True, + input_serialization=oss.InputSerialization( + compression_type=None, + csv_input=oss.CSVInput( + file_header_info='NONE', + record_delimiter=base64.b64encode('\n'.encode()).decode(), + field_delimiter=base64.b64encode(','.encode()).decode(), + quote_character=base64.b64encode('\"'.encode()).decode(), + ), + ), + ), + ) + + result = client.create_select_object_meta(request) + + print(f'status code: {result.status_code},' + f' request id: {result.request_id},' + f' body: {result.body},' + ) + + content = b'' + try: + for chunk in result.body: + content += chunk + except Exception as e: + print(e) + print(f'content: {content}') + print(f'rows: {result.body.select_resp.rows}') + print(f'splits: {result.body.select_resp.splits}') + + assert 5==result.body.select_resp.rows, "An error occurred" + assert 1==result.body.select_resp.splits, "An error occurred" + + +if __name__ == "__main__": + main() + diff --git a/sample/create_select_object_meta_json.py b/sample/create_select_object_meta_json.py new file mode 100644 index 0000000..281f485 --- /dev/null +++ b/sample/create_select_object_meta_json.py @@ -0,0 +1,83 @@ +import argparse +import base64 +import alibabacloud_oss_v2 as oss + + +parser = argparse.ArgumentParser(description="create select object meta json sample") +parser.add_argument('--region', help='The region in which the bucket is located.', required=True) +parser.add_argument('--bucket', help='The name of the bucket.', required=True) +parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS') +parser.add_argument('--key', help='The name of the object.', required=True) +parser.add_argument('--expression', default='select * from ossobject as s where cast(s.age as int) > 40') + + +def main(): + + args = parser.parse_args() + + # Loading credentials values from the environment variables + credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() + + # Using the SDK's default configuration + cfg = oss.config.load_default() + cfg.credentials_provider = credentials_provider + cfg.region = args.region + if args.endpoint is not None: + cfg.endpoint = args.endpoint + + client = oss.Client(cfg) + + data = "{\n\t\"name\": \"Lora Francis\",\n\t\"age\": 27,\n\t\"company\": \"Staples Inc\"\n}\n{\n\t\"k2\": [-1, 79, 90],\n\t\"k3\": {\n\t\t\"k2\": 5,\n\t\t\"k3\": 1,\n\t\t\"k4\": 0\n\t}\n}\n{\n\t\"k1\": 1,\n\t\"k2\": {\n\t\t\"k2\": 5\n\t},\n\t\"k3\": []\n}" + + result = client.put_object(oss.PutObjectRequest( + bucket=args.bucket, + key=args.key, + body=data, + )) + + print(f'status code: {result.status_code},' + f' request id: {result.request_id},' + f' content md5: {result.content_md5},' + f' etag: {result.etag},' + f' hash crc64: {result.hash_crc64},' + f' version id: {result.version_id},' + ) + + request = oss.CreateSelectObjectMetaRequest( + bucket=args.bucket, + key=args.key, + json_meta_request=oss.JsonMetaRequest( + overwrite_if_exists=True, + input_serialization=oss.InputSerialization( + json_input=oss.JSONInput( + type='LINES', + ), + compression_type=None, + ), + ), + ) + + result = client.create_select_object_meta(request) + + print(f'status code: {result.status_code},' + f' request id: {result.request_id},' + f' body: {result.body},' + ) + + content = b'' + try: + for chunk in result.body: + content += chunk + except Exception as e: + print(e) + print(f'content: {content}') + print(f'rows: {result.body.select_resp.rows}') + print(f'splits: {result.body.select_resp.splits}') + + assert 3==result.body.select_resp.rows, "An error occurred" + assert 1==result.body.select_resp.splits, "An error occurred" + + +if __name__ == "__main__": + main() + diff --git a/sample/select_object_csv.py b/sample/select_object_csv.py new file mode 100644 index 0000000..15b2e80 --- /dev/null +++ b/sample/select_object_csv.py @@ -0,0 +1,96 @@ +import argparse +import base64 +import alibabacloud_oss_v2 as oss + + +parser = argparse.ArgumentParser(description="select object csv sample") +parser.add_argument('--region', help='The region in which the bucket is located.', required=True) +parser.add_argument('--bucket', help='The name of the bucket.', required=True) +parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS') +parser.add_argument('--key', help='The name of the object.', required=True) +parser.add_argument('--expression', default='select * from ossobject') + + + +def main(): + + args = parser.parse_args() + + # Loading credentials values from the environment variables + credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() + + # Using the SDK's default configuration + cfg = oss.config.load_default() + cfg.credentials_provider = credentials_provider + cfg.region = args.region + if args.endpoint is not None: + cfg.endpoint = args.endpoint + + client = oss.Client(cfg) + + data = "name,school,company,age\nLora Francis,School,Staples Inc,27\n#Lora Francis,School,Staples Inc,27\nEleanor Little,School,\"Conectiv, Inc\",43\nRosie Hughes,School,Western Gas Resources Inc,44\nLawrence Ross,School,MetLife Inc.,24\n" + + + result = client.put_object(oss.PutObjectRequest( + bucket=args.bucket, + key=args.key, + body=data, + )) + + print(f'status code: {result.status_code},' + f' request id: {result.request_id},' + f' content md5: {result.content_md5},' + f' etag: {result.etag},' + f' hash crc64: {result.hash_crc64},' + f' version id: {result.version_id},' + ) + + result = client.select_object(oss.SelectObjectRequest( + bucket=args.bucket, + key=args.key, + select_request=oss.SelectRequest( + expression=base64.b64encode(args.expression.encode()).decode(), + input_serialization=oss.InputSerialization( + compression_type='None', + csv_input=oss.CSVInput( + file_header_info='Ignore', + record_delimiter=base64.b64encode('\n'.encode()).decode(), + field_delimiter=base64.b64encode(','.encode()).decode(), + quote_character=base64.b64encode('\"'.encode()).decode(), + comment_character=base64.b64encode('#'.encode()).decode(), + allow_quoted_record_delimiter=True, + ), + ), + output_serialization=oss.OutputSerialization( + csv_output=oss.CSVOutput( + record_delimiter=base64.b64encode('\n'.encode()).decode(), + field_delimiter=base64.b64encode(','.encode()).decode(), + quote_character=base64.b64encode('\"'.encode()).decode(), + ), + output_raw_data=False, + keep_all_columns=True, + enable_payload_crc=True, + output_header=False, + ), + options=oss.SelectOptions( + skip_partial_data_record=False, + ), + ), + )) + + print(f'status code: {result.status_code},' + f' request id: {result.request_id},' + f' body: {result.body},' + ) + + content = b'' + try: + for chunk in result.body: + content += chunk + except Exception as e: + print(e) + print(f'content: {content}') + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/sample/select_object_csv_file.py b/sample/select_object_csv_file.py new file mode 100644 index 0000000..88db1fd --- /dev/null +++ b/sample/select_object_csv_file.py @@ -0,0 +1,99 @@ +import argparse +import base64 +import csv +import re + +import alibabacloud_oss_v2 as oss + + +parser = argparse.ArgumentParser(description="select object csv sample") +parser.add_argument('--region', help='The region in which the bucket is located.', required=True) +parser.add_argument('--bucket', help='The name of the bucket.', required=True) +parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS') +parser.add_argument('--key', help='The name of the object.', required=True) +parser.add_argument('--expression', default="select Year,StateAbbr, CityName, Short_Question_Text from ossobject where (data_value || data_value_unit) = '14.8%'") +parser.add_argument('--file_path', default='../tests/data/sample_data.csv') + + + +def main(): + str = ",".encode('utf-8') + + args = parser.parse_args() + + # Loading credentials values from the environment variables + credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() + + # Using the SDK's default configuration + cfg = oss.config.load_default() + cfg.credentials_provider = credentials_provider + cfg.region = args.region + if args.endpoint is not None: + cfg.endpoint = args.endpoint + + client = oss.Client(cfg) + + result = client.put_object_from_file(oss.PutObjectRequest( + bucket=args.bucket, + key=args.key + ), args.file_path) + + print(f'status code: {result.status_code},' + f' request id: {result.request_id},' + f' content md5: {result.content_md5},' + f' etag: {result.etag},' + f' hash crc64: {result.hash_crc64},' + f' version id: {result.version_id},' + ) + + result = client.select_object(oss.SelectObjectRequest( + bucket=args.bucket, + key=args.key, + select_request=oss.SelectRequest( + expression=base64.b64encode(args.expression.encode()).decode(), + input_serialization=oss.InputSerialization( + csv_input=oss.CSVInput( + file_header_info='Use', + ), + ), + + ), + + )) + + print(f'status code: {result.status_code},' + f' request id: {result.request_id},' + f' body: {result.body},' + ) + + content = b'' + try: + for chunk in result.body: + content += chunk + except Exception as e: + print(e) + print(f'content: {content}') + + select_data = b'' + with open(args.file_path, 'r', encoding='utf-8') as csvfile: + spamreader = csv.DictReader(csvfile, delimiter=',', quotechar='"') + for row in spamreader: + line = b'' + if row['Data_Value_Unit'] == '%' and row['Data_Value'] == '14.8': + line += row['Year'].encode('utf-8') + line += ','.encode('utf-8') + line += row['StateAbbr'].encode('utf-8') + line += ','.encode('utf-8') + line += row['CityName'].encode('utf-8') + line += ','.encode('utf-8') + line += row['Short_Question_Text'].encode('utf-8') + line += '\n'.encode('utf-8') + select_data += line + + print(select_data) + assert select_data == content + + +if __name__ == "__main__": + main() + diff --git a/sample/select_object_json.py b/sample/select_object_json.py new file mode 100644 index 0000000..ab8a818 --- /dev/null +++ b/sample/select_object_json.py @@ -0,0 +1,89 @@ +import argparse +import base64 +import alibabacloud_oss_v2 as oss + +parser = argparse.ArgumentParser(description="select object json sample") +parser.add_argument('--region', help='The region in which the bucket is located.', required=True) +parser.add_argument('--bucket', help='The name of the bucket.', required=True) +parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS') +parser.add_argument('--key', help='The name of the object.', required=True) +parser.add_argument('--expression', default='select * from ossobject as s where cast(s.age as int) > 40') + + +def main(): + + args = parser.parse_args() + + # Loading credentials values from the environment variables + credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() + + # Using the SDK's default configuration + cfg = oss.config.load_default() + cfg.credentials_provider = credentials_provider + cfg.region = args.region + if args.endpoint is not None: + cfg.endpoint = args.endpoint + + client = oss.Client(cfg) + + data = "{\t\"name\":\"Eleanor Little\",\n\t\"age\":43,\n\t\"company\":\"Conectiv, Inc\"}\n{\t\"name\":\"Rosie Hughes\",\n\t\"age\":44,\n\t\"company\":\"Western Gas Resources Inc\"}\n" + + result = client.put_object(oss.PutObjectRequest( + bucket=args.bucket, + key=args.key, + body=data, + )) + + print(f'status code: {result.status_code},' + f' request id: {result.request_id},' + f' content md5: {result.content_md5},' + f' etag: {result.etag},' + f' hash crc64: {result.hash_crc64},' + f' version id: {result.version_id},' + ) + + request = oss.SelectObjectRequest( + bucket=args.bucket, + key=args.key, + select_request=oss.SelectRequest( + expression=base64.b64encode(args.expression.encode()).decode(), + input_serialization=oss.InputSerialization( + compression_type=None, + json_input=oss.JSONInput( + type='LINES', + parse_json_number_as_string=True, + ), + ), + output_serialization=oss.OutputSerialization( + json_output=oss.JSONOutput( + record_delimiter=base64.b64encode('\n'.encode()).decode(), + ), + output_raw_data=False, + keep_all_columns=True, + enable_payload_crc=True, + output_header=False, + ), + options=oss.SelectOptions( + skip_partial_data_record=False, + ), + ), + ) + + result = client.select_object(request) + + print(f'status code: {result.status_code},' + f' request id: {result.request_id},' + f' body: {result.body},' + ) + + content = b'' + try: + for chunk in result.body: + content += chunk + except Exception as e: + print(e) + print(f'content: {content}') + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/sample/select_object_json_file.py b/sample/select_object_json_file.py new file mode 100644 index 0000000..42245b0 --- /dev/null +++ b/sample/select_object_json_file.py @@ -0,0 +1,122 @@ +import argparse +import base64 +import csv +import json +import re + +import alibabacloud_oss_v2 as oss + + +parser = argparse.ArgumentParser(description="select object json sample") +parser.add_argument('--region', help='The region in which the bucket is located.', required=True) +parser.add_argument('--bucket', help='The name of the bucket.', required=True) +parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS') +parser.add_argument('--key', help='The name of the object.', required=True) +parser.add_argument('--expression', default="select person.firstname as aaa as firstname, person.lastname, extra from ossobject'") +parser.add_argument('--json_file_path', default='../tests/data/sample_json.json') +parser.add_argument('--json_lines_path', default='../tests/data/sample_json_lines.json') + + +def main(): + str = ",".encode('utf-8') + + args = parser.parse_args() + + # Loading credentials values from the environment variables + credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() + + # Using the SDK's default configuration + cfg = oss.config.load_default() + cfg.credentials_provider = credentials_provider + cfg.region = args.region + if args.endpoint is not None: + cfg.endpoint = args.endpoint + + client = oss.Client(cfg) + + result = client.put_object_from_file(oss.PutObjectRequest( + bucket=args.bucket, + key=args.key + ), args.json_lines_path) + + print(f'status code: {result.status_code},' + f' request id: {result.request_id},' + f' content md5: {result.content_md5},' + f' etag: {result.etag},' + f' hash crc64: {result.hash_crc64},' + f' version id: {result.version_id},' + ) + + request = oss.CreateSelectObjectMetaRequest( + bucket=args.bucket, + key=args.key, + json_meta_request=oss.JsonMetaRequest( + input_serialization=oss.InputSerialization( + json_input=oss.JSONInput( + type='LINES', + ), + ), + ), + ) + + result = client.create_select_object_meta(request) + + result = client.select_object(oss.SelectObjectRequest( + bucket=args.bucket, + key=args.key, + select_request=oss.SelectRequest( + expression=base64.b64encode(args.expression.encode()).decode(), + input_serialization=oss.InputSerialization( + json_input=oss.JSONInput( + type='LINES', + range='line-range=10-50', + ), + + ), + output_serialization=oss.OutputSerialization( + json_output=oss.JSONOutput( + record_delimiter=base64.b64encode(','.encode()).decode(), + ) + ) + ), + + )) + + print(f'status code: {result.status_code},' + f' request id: {result.request_id},' + f' body: {result.body},' + ) + + + content = b'' + try: + for chunk in result.body: + content += chunk + except Exception as e: + print(e) + print(f'content: {content}') + + content = content[0:len(content) - 1] # remove the last ',' + content = b"[" + content + b"]" # make json parser happy + result = json.loads(content.decode('utf-8')) + + result_index = 0 + with open(args.json_file_path, 'r', encoding='utf-8') as json_file: + data = json.load(json_file) + index = 0 + for row in data['objects']: + select_row = {} + if index >= 10 and index < 50: + select_row['firstname'] = row['person']['firstname'] + select_row['lastname'] = row['person']['lastname'] + select_row['extra'] = row['extra'] + assert result[result_index] == select_row + result_index += 1 + elif index >= 50: + break + index += 1 + + +if __name__ == "__main__": + main() + diff --git a/tests/data/sample_data.csv b/tests/data/sample_data.csv new file mode 100644 index 0000000..0c3f3a9 --- /dev/null +++ b/tests/data/sample_data.csv @@ -0,0 +1,304 @@ +Year,StateAbbr,StateDesc,CityName,GeographicLevel,DataSource,Category,UniqueID,Measure,Data_Value_Unit,DataValueTypeID,Data_Value_Type,Data_Value,Low_Confidence_Limit,High_Confidence_Limit,Data_Value_Footnote_Symbol,Data_Value_Footnote,PopulationCount,GeoLocation,CategoryID,MeasureId,CityFIPS,TractFIPS,Short_Question_Text +2015,US,United States,,US,BRFSS,Prevention,59,Current lack of health insurance among adults aged 18–64 Years,%,AgeAdjPrv,Age-adjusted prevalence,15.4,15.1,15.7,,,308745538,,PREVENT,ACCESS2,,,Health Insurance +2015,US,United States,,US,BRFSS,Prevention,59,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,14.8,14.5,15.0,,,308745538,,PREVENT,ACCESS2,,,Health Insurance +2015,US,United States,,US,BRFSS,Health Outcomes,59,Arthritis among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,22.5,22.3,22.7,,,308745538,,HLTHOUT,ARTHRITIS,,,Arthritis +2015,US,United States,,US,BRFSS,Health Outcomes,59,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,24.7,24.5,24.9,,,308745538,,HLTHOUT,ARTHRITIS,,,Arthritis +2015,US,United States,,US,BRFSS,Unhealthy Behaviors,59,Binge drinking among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,17.2,16.9,17.4,,,308745538,,UNHBEH,BINGE,,,Binge Drinking +2015,US,United States,,US,BRFSS,Unhealthy Behaviors,59,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,16.3,16.1,16.5,,,308745538,,UNHBEH,BINGE,,,Binge Drinking +2015,US,United States,,US,BRFSS,Health Outcomes,59,High blood pressure among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,29.4,29.2,29.7,,,308745538,,HLTHOUT,BPHIGH,,,High Blood Pressure +2015,US,United States,,US,BRFSS,Health Outcomes,59,High blood pressure among adults aged >=18 Years,%,CrdPrv,Crude prevalence,31.9,31.6,32.2,,,308745538,,HLTHOUT,BPHIGH,,,High Blood Pressure +2015,US,United States,,US,BRFSS,Prevention,59,Taking medicine for high blood pressure control among adults aged >=18 Years with high blood pressure,%,AgeAdjPrv,Age-adjusted prevalence,57.7,57.1,58.4,,,308745538,,PREVENT,BPMED,,,Taking BP Medication +2015,US,United States,,US,BRFSS,Prevention,59,Taking medicine for high blood pressure control among adults aged >=18 Years with high blood pressure,%,CrdPrv,Crude prevalence,77.2,76.8,77.7,,,308745538,,PREVENT,BPMED,,,Taking BP Medication +2015,US,United States,,US,BRFSS,Health Outcomes,59,Cancer (excluding skin cancer) among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,6.0,5.9,6.1,,,308745538,,HLTHOUT,CANCER,,,Cancer (except skin) +2015,US,United States,,US,BRFSS,Health Outcomes,59,Cancer (excluding skin cancer) among adults aged >=18 Years,%,CrdPrv,Crude prevalence,6.6,6.5,6.8,,,308745538,,HLTHOUT,CANCER,,,Cancer (except skin) +2015,US,United States,,US,BRFSS,Health Outcomes,59,Current asthma among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,8.7,8.6,8.9,,,308745538,,HLTHOUT,CASTHMA,,,Current Asthma +2015,US,United States,,US,BRFSS,Health Outcomes,59,Current asthma among adults aged >=18 Years,%,CrdPrv,Crude prevalence,8.8,8.6,9.0,,,308745538,,HLTHOUT,CASTHMA,,,Current Asthma +2015,US,United States,,US,BRFSS,Health Outcomes,59,Coronary heart disease among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,5.6,5.5,5.8,,,308745538,,HLTHOUT,CHD,,,Coronary Heart Disease +2015,US,United States,,US,BRFSS,Health Outcomes,59,Coronary heart disease among adults aged >=18 Years,%,CrdPrv,Crude prevalence,6.3,6.2,6.5,,,308745538,,HLTHOUT,CHD,,,Coronary Heart Disease +2015,US,United States,,US,BRFSS,Prevention,59,Visits to doctor for routine checkup within the past Year among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,68.6,68.3,68.9,,,308745538,,PREVENT,CHECKUP,,,Annual Checkup +2015,US,United States,,US,BRFSS,Prevention,59,Visits to doctor for routine checkup within the past Year among adults aged >=18 Years,%,CrdPrv,Crude prevalence,70.0,69.7,70.3,,,308745538,,PREVENT,CHECKUP,,,Annual Checkup +2015,US,United States,,US,BRFSS,Prevention,59,Cholesterol screening among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,75.2,74.9,75.5,,,308745538,,PREVENT,CHOLSCREEN,,,Cholesterol Screening +2015,US,United States,,US,BRFSS,Prevention,59,Cholesterol screening among adults aged >=18 Years,%,CrdPrv,Crude prevalence,77.0,76.7,77.3,,,308745538,,PREVENT,CHOLSCREEN,,,Cholesterol Screening +2014,US,United States,,US,BRFSS,Prevention,59,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50–75 Years",%,AgeAdjPrv,Age-adjusted prevalence,64.0,63.5,64.5,,,308745538,,PREVENT,COLON_SCREEN,,,Colorectal Cancer Screening +2014,US,United States,,US,BRFSS,Prevention,59,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50–75 Years",%,CrdPrv,Crude prevalence,63.7,63.3,64.1,,,308745538,,PREVENT,COLON_SCREEN,,,Colorectal Cancer Screening +2015,US,United States,,US,BRFSS,Health Outcomes,59,Chronic obstructive pulmonary disease among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,5.7,5.6,5.9,,,308745538,,HLTHOUT,COPD,,,COPD +2015,US,United States,,US,BRFSS,Health Outcomes,59,Chronic obstructive pulmonary disease among adults aged >=18 Years,%,CrdPrv,Crude prevalence,6.3,6.2,6.4,,,308745538,,HLTHOUT,COPD,,,COPD +2015,US,United States,,US,BRFSS,Health Outcomes,59,Physical health not good for >=14 days among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,11.5,11.3,11.7,,,308745538,,HLTHOUT,PHLTH,,,Physical Health +2014,US,United States,,US,BRFSS,Prevention,59,"Older adult men aged >=65 Years who are up to date on a core set of clinical preventive services: Flu shot past Year, PPV shot ever, Colorectal cancer screening",%,AgeAdjPrv,Age-adjusted prevalence,32.9,32.1,33.6,,,308745538,,PREVENT,COREM,,,Core preventive services for older men +2014,US,United States,,US,BRFSS,Prevention,59,"Older adult men aged >=65 Years who are up to date on a core set of clinical preventive services: Flu shot past Year, PPV shot ever, Colorectal cancer screening",%,CrdPrv,Crude prevalence,32.3,31.5,33.0,,,308745538,,PREVENT,COREM,,,Core preventive services for older men +2014,US,United States,,US,BRFSS,Prevention,59,"Older adult women aged >=65 Years who are up to date on a core set of clinical preventive services: Flu shot past Year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 Years",%,AgeAdjPrv,Age-adjusted prevalence,30.7,30.2,31.4,,,308745538,,PREVENT,COREW,,,Core preventive services for older women +2014,US,United States,,US,BRFSS,Prevention,59,"Older adult women aged >=65 Years who are up to date on a core set of clinical preventive services: Flu shot past Year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 Years",%,CrdPrv,Crude prevalence,30.7,30.1,31.3,,,308745538,,PREVENT,COREW,,,Core preventive services for older women +2015,US,United States,,US,BRFSS,Unhealthy Behaviors,59,Current smoking among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,17.1,16.8,17.3,,,308745538,,UNHBEH,CSMOKING,,,Current Smoking +2015,US,United States,,US,BRFSS,Unhealthy Behaviors,59,Current smoking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,16.8,16.6,17.0,,,308745538,,UNHBEH,CSMOKING,,,Current Smoking +2014,US,United States,,US,BRFSS,Prevention,59,Visits to dentist or dental clinic among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,64.1,63.8,64.4,,,308745538,,PREVENT,DENTAL,,,Dental Visit +2014,US,United States,,US,BRFSS,Prevention,59,Visits to dentist or dental clinic among adults aged >=18 Years,%,CrdPrv,Crude prevalence,64.4,64.1,64.7,,,308745538,,PREVENT,DENTAL,,,Dental Visit +2015,US,United States,,US,BRFSS,Health Outcomes,59,Diagnosed diabetes among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,9.3,9.2,9.5,,,308745538,,HLTHOUT,DIABETES,,,Diabetes +2015,US,United States,,US,BRFSS,Health Outcomes,59,Diagnosed diabetes among adults aged >=18 Years,%,CrdPrv,Crude prevalence,10.4,10.3,10.6,,,308745538,,HLTHOUT,DIABETES,,,Diabetes +2015,US,United States,,US,BRFSS,Health Outcomes,59,High cholesterol among adults aged >=18 Years who have been screened in the past 5 Years,%,AgeAdjPrv,Age-adjusted prevalence,31.1,30.8,31.4,,,308745538,,HLTHOUT,HIGHCHOL,,,High Cholesterol +2015,US,United States,,US,BRFSS,Health Outcomes,59,High cholesterol among adults aged >=18 Years who have been screened in the past 5 Years,%,CrdPrv,Crude prevalence,37.1,36.8,37.4,,,308745538,,HLTHOUT,HIGHCHOL,,,High Cholesterol +2015,US,United States,,US,BRFSS,Health Outcomes,59,Chronic kidney disease among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,2.5,2.4,2.6,,,308745538,,HLTHOUT,KIDNEY,,,Chronic Kidney Disease +2015,US,United States,,US,BRFSS,Health Outcomes,59,Chronic kidney disease among adults aged >=18 Years,%,CrdPrv,Crude prevalence,2.7,2.6,2.8,,,308745538,,HLTHOUT,KIDNEY,,,Chronic Kidney Disease +2015,US,United States,,US,BRFSS,Unhealthy Behaviors,59,No leisure-time physical activity among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,25.5,25.2,25.8,,,308745538,,UNHBEH,LPA,,,Physical Inactivity +2015,US,United States,,US,BRFSS,Unhealthy Behaviors,59,No leisure-time physical activity among adults aged >=18 Years,%,CrdPrv,Crude prevalence,25.9,25.6,26.1,,,308745538,,UNHBEH,LPA,,,Physical Inactivity +2014,US,United States,,US,BRFSS,Prevention,59,Mammography use among women aged 50–74 Years,%,AgeAdjPrv,Age-adjusted prevalence,75.5,75.1,75.9,,,308745538,,PREVENT,MAMMOUSE,,,Mammography +2014,US,United States,,US,BRFSS,Prevention,59,Mammography use among women aged 50–74 Years,%,CrdPrv,Crude prevalence,75.8,75.4,76.2,,,308745538,,PREVENT,MAMMOUSE,,,Mammography +2015,US,United States,,US,BRFSS,Health Outcomes,59,Mental health not good for >=14 days among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,11.6,11.4,11.8,,,308745538,,HLTHOUT,MHLTH,,,Mental Health +2015,US,United States,,US,BRFSS,Health Outcomes,59,Mental health not good for >=14 days among adults aged >=18 Years,%,CrdPrv,Crude prevalence,11.4,11.3,11.6,,,308745538,,HLTHOUT,MHLTH,,,Mental Health +2015,US,United States,,US,BRFSS,Unhealthy Behaviors,59,Obesity among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,28.7,28.4,29.0,,,308745538,,UNHBEH,OBESITY,,,Obesity +2015,US,United States,,US,BRFSS,Unhealthy Behaviors,59,Obesity among adults aged >=18 Years,%,CrdPrv,Crude prevalence,28.8,28.6,29.1,,,308745538,,UNHBEH,OBESITY,,,Obesity +2014,US,United States,,US,BRFSS,Prevention,59,Papanicolaou smear use among adult women aged 21–65 Years,%,AgeAdjPrv,Age-adjusted prevalence,81.1,80.6,81.6,,,308745538,,PREVENT,PAPTEST,,,Pap Smear Test +2014,US,United States,,US,BRFSS,Prevention,59,Papanicolaou smear use among adult women aged 21–65 Years,%,CrdPrv,Crude prevalence,81.8,81.3,82.2,,,308745538,,PREVENT,PAPTEST,,,Pap Smear Test +2015,US,United States,,US,BRFSS,Health Outcomes,59,Physical health not good for >=14 days among adults aged >=18 Years,%,CrdPrv,Crude prevalence,12.0,11.8,12.2,,,308745538,,HLTHOUT,PHLTH,,,Physical Health +2014,US,United States,,US,BRFSS,Unhealthy Behaviors,59,Sleeping less than 7 hours among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,35.1,34.8,35.5,,,308745538,,UNHBEH,SLEEP,,,Sleep < 7 hours +2014,US,United States,,US,BRFSS,Unhealthy Behaviors,59,Sleeping less than 7 hours among adults aged >=18 Years,%,CrdPrv,Crude prevalence,34.8,34.5,35.1,,,308745538,,UNHBEH,SLEEP,,,Sleep < 7 hours +2015,US,United States,,US,BRFSS,Health Outcomes,59,Stroke among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,2.8,2.7,2.8,,,308745538,,HLTHOUT,STROKE,,,Stroke +2015,US,United States,,US,BRFSS,Health Outcomes,59,Stroke among adults aged >=18 Years,%,CrdPrv,Crude prevalence,3.0,3.0,3.1,,,308745538,,HLTHOUT,STROKE,,,Stroke +2014,US,United States,,US,BRFSS,Health Outcomes,59,All teeth lost among adults aged >=65 Years,%,AgeAdjPrv,Age-adjusted prevalence,15.4,15.0,15.8,,,308745538,,HLTHOUT,TEETHLOST,,,Teeth Loss +2014,US,United States,,US,BRFSS,Health Outcomes,59,All teeth lost among adults aged >=65 Years,%,CrdPrv,Crude prevalence,14.9,14.6,15.3,,,308745538,,HLTHOUT,TEETHLOST,,,Teeth Loss +2015,AL,Alabama,Birmingham,City,BRFSS,Prevention,0107000,Current lack of health insurance among adults aged 18–64 Years,%,AgeAdjPrv,Age-adjusted prevalence,19.8,19.5,20.2,,,212237,"(33.5275663773, -86.7988174678)",PREVENT,ACCESS2,0107000,,Health Insurance +2015,AL,Alabama,Birmingham,City,BRFSS,Prevention,0107000,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,19.6,19.2,20.0,,,212237,"(33.5275663773, -86.7988174678)",PREVENT,ACCESS2,0107000,,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073000100,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,23.9,21.2,27.2,,,3042,"(33.5794328326, -86.7228323926)",PREVENT,ACCESS2,0107000,01073000100,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073000300,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,28.8,25.4,32.4,,,2735,"(33.5428208686, -86.752433978)",PREVENT,ACCESS2,0107000,01073000300,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073000400,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,26.1,22.6,29.9,,,3338,"(33.5632449633, -86.7640474064)",PREVENT,ACCESS2,0107000,01073000400,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073000500,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,28.1,24.6,32.0,,,2864,"(33.5442404594, -86.7749130719)",PREVENT,ACCESS2,0107000,01073000500,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073000700,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,31.8,27.0,36.7,,,2577,"(33.5525406139, -86.8016893706)",PREVENT,ACCESS2,0107000,01073000700,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073000800,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,22.4,19.1,26.1,,,3859,"(33.549697789, -86.8330944744)",PREVENT,ACCESS2,0107000,01073000800,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073001100,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,16.8,13.7,20.5,,,5354,"(33.5429143325, -86.8756782852)",PREVENT,ACCESS2,0107000,01073001100,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073001200,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,24.6,22.2,27.2,,,2876,"(33.5278767706, -86.8604161686)",PREVENT,ACCESS2,0107000,01073001200,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073001400,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,22.0,18.4,25.7,,,2181,"(33.5261497258, -86.835146606)",PREVENT,ACCESS2,0107000,01073001400,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073001500,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,26.3,23.1,29.4,,,3189,"(33.5298727342, -86.8197191685)",PREVENT,ACCESS2,0107000,01073001500,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073001600,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,26.8,22.9,30.8,,,3390,"(33.5372993423, -86.8036590482)",PREVENT,ACCESS2,0107000,01073001600,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073001902,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,26.9,24.1,29.8,,,1894,"(33.5532050997, -86.7429801603)",PREVENT,ACCESS2,0107000,01073001902,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073002000,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,24.4,20.8,28.2,,,3885,"(33.5541574106, -86.7167229915)",PREVENT,ACCESS2,0107000,01073002000,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073002100,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,21.5,18.1,25.0,,,3186,"(33.5650015942, -86.7101024766)",PREVENT,ACCESS2,0107000,01073002100,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073002200,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,21.7,18.7,25.0,,,2630,"(33.5521301205, -86.7276759508)",PREVENT,ACCESS2,0107000,01073002200,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073002303,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,27.0,23.7,30.7,,,2936,"(33.5383153207, -86.7270445428)",PREVENT,ACCESS2,0107000,01073002303,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073002305,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,9.9,8.2,12.1,,,2952,"(33.5333415976, -86.7479566084)",PREVENT,ACCESS2,0107000,01073002305,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073002306,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,9.5,8.1,11.2,,,3257,"(33.5213873564, -86.7490031289)",PREVENT,ACCESS2,0107000,01073002306,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073002400,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,25.1,22.4,27.8,,,3629,"(33.5260748309, -86.7830315488)",PREVENT,ACCESS2,0107000,01073002400,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073002700,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,20.7,16.8,24.9,,,3992,"(33.5176008419, -86.8106887452)",PREVENT,ACCESS2,0107000,01073002700,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073002900,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,25.7,21.5,29.9,,,2064,"(33.5132498864, -86.83004749)",PREVENT,ACCESS2,0107000,01073002900,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073003001,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,18.4,15.3,22.4,,,3779,"(33.5125158094, -86.8577164946)",PREVENT,ACCESS2,0107000,01073003001,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073003002,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,26.3,21.7,31.3,,,2203,"(33.512258109, -86.8441439907)",PREVENT,ACCESS2,0107000,01073003002,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073003100,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,23.2,20.2,26.7,,,3637,"(33.5059655756, -86.8745506086)",PREVENT,ACCESS2,0107000,01073003100,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073003200,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,28.7,25.0,32.8,,,931,"(33.5094018502, -86.8859081961)",PREVENT,ACCESS2,0107000,01073003200,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073003300,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,22.2,19.1,25.7,,,947,"(33.5171261108, -86.8913819749)",PREVENT,ACCESS2,0107000,01073003300,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073003400,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,26.8,23.0,30.9,,,2477,"(33.5052229234, -86.9014844656)",PREVENT,ACCESS2,0107000,01073003400,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073003500,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,22.3,19.1,25.7,,,2780,"(33.5065714011, -86.9195910063)",PREVENT,ACCESS2,0107000,01073003500,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073003600,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,17.0,14.5,19.6,,,4683,"(33.48476397, -86.8981392947)",PREVENT,ACCESS2,0107000,01073003600,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073003700,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,21.6,19.2,23.9,,,5063,"(33.4969018589, -86.8907729426)",PREVENT,ACCESS2,0107000,01073003700,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073003802,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,19.0,16.7,21.6,,,5409,"(33.4785707794, -86.890000907)",PREVENT,ACCESS2,0107000,01073003802,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073003803,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,20.9,17.7,24.2,,,4199,"(33.485945214, -86.869692186)",PREVENT,ACCESS2,0107000,01073003803,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073003900,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,29.9,26.9,33.0,,,1783,"(33.4989959327, -86.8647600038)",PREVENT,ACCESS2,0107000,01073003900,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073004000,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,25.8,21.4,30.3,,,3772,"(33.4953246015, -86.8516232073)",PREVENT,ACCESS2,0107000,01073004000,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073004200,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,23.4,20.8,26.1,,,2341,"(33.5007439361, -86.8270720379)",PREVENT,ACCESS2,0107000,01073004200,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073004500,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,22.7,19.3,27.4,,,5003,"(33.5041857556, -86.8033798346)",PREVENT,ACCESS2,0107000,01073004500,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073004701,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,10.6,8.6,13.4,,,3480,"(33.5075242148, -86.7836675838)",PREVENT,ACCESS2,0107000,01073004701,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073004702,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,7.1,6.1,8.7,,,2944,"(33.5119902661, -86.7694550989)",PREVENT,ACCESS2,0107000,01073004702,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073004800,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,8.7,7.3,10.3,,,1861,"(33.4989064008, -86.78269914)",PREVENT,ACCESS2,0107000,01073004800,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073004901,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,11.0,9.1,13.2,,,1167,"(33.4971595645, -86.7917440668)",PREVENT,ACCESS2,0107000,01073004901,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073004902,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,15.2,12.5,18.5,,,3146,"(33.4935824043, -86.8009294603)",PREVENT,ACCESS2,0107000,01073004902,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073005000,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,17.9,15.4,20.7,,,3482,"(33.4866689795, -86.8173262831)",PREVENT,ACCESS2,0107000,01073005000,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073005101,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,30.5,26.5,34.4,,,1507,"(33.4945909008, -86.834763936)",PREVENT,ACCESS2,0107000,01073005101,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073005103,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,17.5,14.4,20.7,,,2587,"(33.485714885, -86.8327817467)",PREVENT,ACCESS2,0107000,01073005103,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073005104,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,24.9,21.3,28.9,,,2881,"(33.4749941816, -86.8335421747)",PREVENT,ACCESS2,0107000,01073005104,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073005200,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,20.2,16.4,24.2,,,3740,"(33.4806708775, -86.8508671514)",PREVENT,ACCESS2,0107000,01073005200,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073005302,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,12.8,10.9,15.1,,,3463,"(33.5766456449, -86.6965590316)",PREVENT,ACCESS2,0107000,01073005302,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073005500,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,26.5,22.9,30.7,,,1824,"(33.5670293898, -86.8005567213)",PREVENT,ACCESS2,0107000,01073005500,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073005600,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,12.3,10.0,15.0,,,4367,"(33.5200981234, -86.7272063198)",PREVENT,ACCESS2,0107000,01073005600,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073005701,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,18.9,15.7,22.3,,,2372,"(33.4629543329, -86.8898406628)",PREVENT,ACCESS2,0107000,01073005701,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073005702,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,19.8,16.4,23.3,,,3413,"(33.4698691385, -86.874290602)",PREVENT,ACCESS2,0107000,01073005702,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073005800,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,19.3,16.4,22.3,,,4216,"(33.479062325, -86.8128063089)",PREVENT,ACCESS2,0107000,01073005800,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073005903,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,15.9,13.9,18.0,,,4933,"(33.597162309, -86.6766736351)",PREVENT,ACCESS2,0107000,01073005903,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073005905,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,21.4,18.2,24.7,,,5039,"(33.603988456, -86.7008123418)",PREVENT,ACCESS2,0107000,01073005905,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073005907,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,12.5,10.3,14.9,,,1975,"(33.6142861501, -86.6691996417)",PREVENT,ACCESS2,0107000,01073005907,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073005908,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,20.9,18.1,23.7,,,1621,"(33.6182924432, -86.6801483084)",PREVENT,ACCESS2,0107000,01073005908,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073005909,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,14.4,11.8,17.5,,,2524,"(33.611811773, -86.7214221514)",PREVENT,ACCESS2,0107000,01073005909,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073005910,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,14.7,12.6,17.1,,,4612,"(33.6299017499, -86.7194311229)",PREVENT,ACCESS2,0107000,01073005910,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073010500,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,21.8,18.2,25.9,,,114,"(33.4363786806, -86.9128923072)",PREVENT,ACCESS2,0107000,01073010500,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073010701,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,18.5,14.4,23.6,,,74,"(33.473886155, -86.8146487762)",PREVENT,ACCESS2,0107000,01073010701,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073010706,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,13.5,11.0,16.3,,,1528,"(33.4443709442, -86.8405352645)",PREVENT,ACCESS2,0107000,01073010706,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073010801,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,5.2,4.4,6.3,,,168,"(33.514097853, -86.7466971362)",PREVENT,ACCESS2,0107000,01073010801,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073010802,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,5.0,3.9,6.5,,,172,"(33.4885493477, -86.780843024)",PREVENT,ACCESS2,0107000,01073010802,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073010803,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,11.3,9.0,14.0,,,514,"(33.5229093892, -86.7102618642)",PREVENT,ACCESS2,0107000,01073010803,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073010805,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,7.3,5.5,9.9,,,86,"(33.4952792472, -86.6987184974)",PREVENT,ACCESS2,0107000,01073010805,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073011104,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,13.6,11.4,16.1,,,1688,"(33.6159436433, -86.6557892507)",PREVENT,ACCESS2,0107000,01073011104,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073011107,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,,,,*,Estimates suppressed for population less than 50,42,"(33.5804845249, -86.6301110961)",PREVENT,ACCESS2,0107000,01073011107,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073011108,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,,,,*,Estimates suppressed for population less than 50,9,"(33.6050742596, -86.6316729386)",PREVENT,ACCESS2,0107000,01073011108,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073011207,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,17.7,15.1,20.6,,,815,"(33.6718848706, -86.6772510465)",PREVENT,ACCESS2,0107000,01073011207,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073011209,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,20.2,17.2,24.2,,,1062,"(33.6557189992, -86.7050698349)",PREVENT,ACCESS2,0107000,01073011209,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073011210,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,21.5,17.0,26.7,,,1385,"(33.6641893755, -86.6956170686)",PREVENT,ACCESS2,0107000,01073011210,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073011803,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,18.1,15.4,21.3,,,928,"(33.6252575173, -86.6998610409)",PREVENT,ACCESS2,0107000,01073011803,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073011804,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,18.3,15.2,21.9,,,1157,"(33.6474916175, -86.7042974424)",PREVENT,ACCESS2,0107000,01073011804,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073011901,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,,,,*,Estimates suppressed for population less than 50,6,"(33.6355414646, -86.736946691)",PREVENT,ACCESS2,0107000,01073011901,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073011904,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,14.4,12.1,16.8,,,1915,"(33.593140185, -86.7357930541)",PREVENT,ACCESS2,0107000,01073011904,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073012001,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,14.5,12.5,16.7,,,304,"(33.5919486112, -86.864384068)",PREVENT,ACCESS2,0107000,01073012001,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073012002,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,,,,*,Estimates suppressed for population less than 50,44,"(33.5859234197, -86.8357007188)",PREVENT,ACCESS2,0107000,01073012002,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073012200,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,,,,*,Estimates suppressed for population less than 50,23,"(33.5967441904, -87.0879396857)",PREVENT,ACCESS2,0107000,01073012200,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073012302,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,12.7,10.6,15.2,,,144,"(33.5542816352, -87.0544691416)",PREVENT,ACCESS2,0107000,01073012302,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073012305,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,12.5,10.2,15.1,,,403,"(33.4695358064, -86.96831739)",PREVENT,ACCESS2,0107000,01073012305,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073012401,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,11.4,8.9,14.2,,,1066,"(33.5571951048, -86.8777935049)",PREVENT,ACCESS2,0107000,01073012401,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073012402,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,16.7,14.6,19.0,,,418,"(33.549984172, -86.8994543327)",PREVENT,ACCESS2,0107000,01073012402,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073012500,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,21.0,17.6,24.4,,,410,"(33.529160486, -86.9346476445)",PREVENT,ACCESS2,0107000,01073012500,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073012602,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,17.5,15.7,19.6,,,371,"(33.570164674, -86.666430582)",PREVENT,ACCESS2,0107000,01073012602,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073012701,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,,,,*,Estimates suppressed for population less than 50,44,"(33.5484078071, -86.6323773455)",PREVENT,ACCESS2,0107000,01073012701,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073012703,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,11.3,8.6,14.9,,,498,"(33.4681180943, -86.6671888213)",PREVENT,ACCESS2,0107000,01073012703,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073012704,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,8.9,6.8,11.5,,,113,"(33.5034195908, -86.6180983403)",PREVENT,ACCESS2,0107000,01073012704,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073012803,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,8.6,6.7,11.2,,,1261,"(33.4439425865, -86.7212936938)",PREVENT,ACCESS2,0107000,01073012803,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073012910,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,,,,*,Estimates suppressed for population less than 50,9,"(33.4345805042, -86.7263292059)",PREVENT,ACCESS2,0107000,01073012910,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073013002,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,21.3,17.1,25.6,,,1514,"(33.46604181, -86.8567287797)",PREVENT,ACCESS2,0107000,01073013002,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073013100,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,21.8,18.8,24.9,,,4424,"(33.44880214, -86.8878401579)",PREVENT,ACCESS2,0107000,01073013100,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073013300,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,23.5,19.5,27.5,,,1782,"(33.4396443569, -86.9248768665)",PREVENT,ACCESS2,0107000,01073013300,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073013901,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,18.0,14.8,21.7,,,952,"(33.4729384906, -86.9547337648)",PREVENT,ACCESS2,0107000,01073013901,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073014302,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,10.0,8.3,12.1,,,2778,"(33.4244658829, -86.8841474217)",PREVENT,ACCESS2,0107000,01073014302,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01073014413,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,7.6,5.9,9.8,,,397,"(33.4226593117, -86.8508620751)",PREVENT,ACCESS2,0107000,01073014413,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01117030213,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,9.3,7.7,11.4,,,644,"(33.4395975193, -86.6735959359)",PREVENT,ACCESS2,0107000,01117030213,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01117030217,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,,,,*,Estimates suppressed for population less than 50,16,"(33.4556995763, -86.6520208639)",PREVENT,ACCESS2,0107000,01117030217,Health Insurance +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Prevention,0107000-01117030303,Current lack of health insurance among adults aged 18–64 Years,%,CrdPrv,Crude prevalence,9.9,8.1,12.0,,,968,"(33.4258661239, -86.713819356)",PREVENT,ACCESS2,0107000,01117030303,Health Insurance +2015,AL,Alabama,Birmingham,City,BRFSS,Health Outcomes,0107000,Arthritis among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,31.0,30.8,31.1,,,212237,"(33.5275663773, -86.7988174678)",HLTHOUT,ARTHRITIS,0107000,,Arthritis +2015,AL,Alabama,Birmingham,City,BRFSS,Health Outcomes,0107000,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,30.9,30.8,31.1,,,212237,"(33.5275663773, -86.7988174678)",HLTHOUT,ARTHRITIS,0107000,,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073000100,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,32.5,31.5,33.6,,,3042,"(33.5794328326, -86.7228323926)",HLTHOUT,ARTHRITIS,0107000,01073000100,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073000300,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,31.3,30.0,32.4,,,2735,"(33.5428208686, -86.752433978)",HLTHOUT,ARTHRITIS,0107000,01073000300,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073000400,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,34.6,33.2,35.9,,,3338,"(33.5632449633, -86.7640474064)",HLTHOUT,ARTHRITIS,0107000,01073000400,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073000500,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,37.8,36.3,39.2,,,2864,"(33.5442404594, -86.7749130719)",HLTHOUT,ARTHRITIS,0107000,01073000500,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073000700,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,38.5,37.1,39.9,,,2577,"(33.5525406139, -86.8016893706)",HLTHOUT,ARTHRITIS,0107000,01073000700,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073000800,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,38.0,36.5,39.3,,,3859,"(33.549697789, -86.8330944744)",HLTHOUT,ARTHRITIS,0107000,01073000800,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073001100,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,34.0,32.4,35.5,,,5354,"(33.5429143325, -86.8756782852)",HLTHOUT,ARTHRITIS,0107000,01073001100,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073001200,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,36.5,35.4,37.6,,,2876,"(33.5278767706, -86.8604161686)",HLTHOUT,ARTHRITIS,0107000,01073001200,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073001400,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,37.1,35.6,38.6,,,2181,"(33.5261497258, -86.835146606)",HLTHOUT,ARTHRITIS,0107000,01073001400,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073001500,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,35.2,34.0,36.4,,,3189,"(33.5298727342, -86.8197191685)",HLTHOUT,ARTHRITIS,0107000,01073001500,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073001600,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,39.9,38.4,41.3,,,3390,"(33.5372993423, -86.8036590482)",HLTHOUT,ARTHRITIS,0107000,01073001600,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073001902,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,35.1,34.0,36.1,,,1894,"(33.5532050997, -86.7429801603)",HLTHOUT,ARTHRITIS,0107000,01073001902,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073002000,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,36.3,34.9,37.7,,,3885,"(33.5541574106, -86.7167229915)",HLTHOUT,ARTHRITIS,0107000,01073002000,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073002100,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,33.1,31.8,34.3,,,3186,"(33.5650015942, -86.7101024766)",HLTHOUT,ARTHRITIS,0107000,01073002100,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073002200,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,32.4,31.2,33.6,,,2630,"(33.5521301205, -86.7276759508)",HLTHOUT,ARTHRITIS,0107000,01073002200,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073002303,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,33.4,32.2,34.6,,,2936,"(33.5383153207, -86.7270445428)",HLTHOUT,ARTHRITIS,0107000,01073002303,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073002305,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,22.3,21.3,23.3,,,2952,"(33.5333415976, -86.7479566084)",HLTHOUT,ARTHRITIS,0107000,01073002305,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073002306,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,26.9,25.9,27.9,,,3257,"(33.5213873564, -86.7490031289)",HLTHOUT,ARTHRITIS,0107000,01073002306,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073002400,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,31.0,30.0,31.9,,,3629,"(33.5260748309, -86.7830315488)",HLTHOUT,ARTHRITIS,0107000,01073002400,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073002700,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,27.2,25.9,28.5,,,3992,"(33.5176008419, -86.8106887452)",HLTHOUT,ARTHRITIS,0107000,01073002700,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073002900,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,38.7,37.0,40.3,,,2064,"(33.5132498864, -86.83004749)",HLTHOUT,ARTHRITIS,0107000,01073002900,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073003001,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,24.3,23.6,25.0,,,3779,"(33.5125158094, -86.8577164946)",HLTHOUT,ARTHRITIS,0107000,01073003001,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073003002,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,40.9,39.1,42.7,,,2203,"(33.512258109, -86.8441439907)",HLTHOUT,ARTHRITIS,0107000,01073003002,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073003100,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,34.1,32.7,35.4,,,3637,"(33.5059655756, -86.8745506086)",HLTHOUT,ARTHRITIS,0107000,01073003100,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073003200,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,39.0,37.6,40.3,,,931,"(33.5094018502, -86.8859081961)",HLTHOUT,ARTHRITIS,0107000,01073003200,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073003300,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,38.6,37.3,39.9,,,947,"(33.5171261108, -86.8913819749)",HLTHOUT,ARTHRITIS,0107000,01073003300,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073003400,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,36.3,34.9,37.7,,,2477,"(33.5052229234, -86.9014844656)",HLTHOUT,ARTHRITIS,0107000,01073003400,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073003500,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,32.8,31.5,34.0,,,2780,"(33.5065714011, -86.9195910063)",HLTHOUT,ARTHRITIS,0107000,01073003500,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073003600,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,33.4,32.1,34.7,,,4683,"(33.48476397, -86.8981392947)",HLTHOUT,ARTHRITIS,0107000,01073003600,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073003700,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,31.2,30.1,32.1,,,5063,"(33.4969018589, -86.8907729426)",HLTHOUT,ARTHRITIS,0107000,01073003700,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073003802,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,32.1,31.0,33.2,,,5409,"(33.4785707794, -86.890000907)",HLTHOUT,ARTHRITIS,0107000,01073003802,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073003803,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,36.0,34.5,37.3,,,4199,"(33.485945214, -86.869692186)",HLTHOUT,ARTHRITIS,0107000,01073003803,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073003900,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,32.9,31.8,33.9,,,1783,"(33.4989959327, -86.8647600038)",HLTHOUT,ARTHRITIS,0107000,01073003900,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073004000,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,37.8,36.4,39.3,,,3772,"(33.4953246015, -86.8516232073)",HLTHOUT,ARTHRITIS,0107000,01073004000,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073004200,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,36.6,35.5,37.7,,,2341,"(33.5007439361, -86.8270720379)",HLTHOUT,ARTHRITIS,0107000,01073004200,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073004500,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,15.1,14.4,15.8,,,5003,"(33.5041857556, -86.8033798346)",HLTHOUT,ARTHRITIS,0107000,01073004500,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073004701,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,23.7,22.5,24.9,,,3480,"(33.5075242148, -86.7836675838)",HLTHOUT,ARTHRITIS,0107000,01073004701,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073004702,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,27.0,25.9,28.1,,,2944,"(33.5119902661, -86.7694550989)",HLTHOUT,ARTHRITIS,0107000,01073004702,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073004800,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,30.1,29.0,31.2,,,1861,"(33.4989064008, -86.78269914)",HLTHOUT,ARTHRITIS,0107000,01073004800,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073004901,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,22.1,21.2,23.0,,,1167,"(33.4971595645, -86.7917440668)",HLTHOUT,ARTHRITIS,0107000,01073004901,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073004902,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,18.4,17.5,19.4,,,3146,"(33.4935824043, -86.8009294603)",HLTHOUT,ARTHRITIS,0107000,01073004902,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073005000,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,19.6,18.7,20.4,,,3482,"(33.4866689795, -86.8173262831)",HLTHOUT,ARTHRITIS,0107000,01073005000,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073005101,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,36.6,35.3,37.8,,,1507,"(33.4945909008, -86.834763936)",HLTHOUT,ARTHRITIS,0107000,01073005101,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073005103,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,40.1,38.6,41.7,,,2587,"(33.485714885, -86.8327817467)",HLTHOUT,ARTHRITIS,0107000,01073005103,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073005104,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,18.9,18.0,19.8,,,2881,"(33.4749941816, -86.8335421747)",HLTHOUT,ARTHRITIS,0107000,01073005104,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073005200,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,37.9,36.1,39.7,,,3740,"(33.4806708775, -86.8508671514)",HLTHOUT,ARTHRITIS,0107000,01073005200,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073005302,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,33.2,31.8,34.5,,,3463,"(33.5766456449, -86.6965590316)",HLTHOUT,ARTHRITIS,0107000,01073005302,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073005500,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,36.7,35.4,37.9,,,1824,"(33.5670293898, -86.8005567213)",HLTHOUT,ARTHRITIS,0107000,01073005500,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073005600,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,31.8,30.3,33.2,,,4367,"(33.5200981234, -86.7272063198)",HLTHOUT,ARTHRITIS,0107000,01073005600,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073005701,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,35.8,34.1,37.3,,,2372,"(33.4629543329, -86.8898406628)",HLTHOUT,ARTHRITIS,0107000,01073005701,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073005702,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,37.8,36.0,39.3,,,3413,"(33.4698691385, -86.874290602)",HLTHOUT,ARTHRITIS,0107000,01073005702,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073005800,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,18.4,17.7,19.1,,,4216,"(33.479062325, -86.8128063089)",HLTHOUT,ARTHRITIS,0107000,01073005800,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073005903,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,32.2,31.1,33.3,,,4933,"(33.597162309, -86.6766736351)",HLTHOUT,ARTHRITIS,0107000,01073005903,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073005905,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,34.2,32.9,35.4,,,5039,"(33.603988456, -86.7008123418)",HLTHOUT,ARTHRITIS,0107000,01073005905,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073005907,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,30.1,28.9,31.3,,,1975,"(33.6142861501, -86.6691996417)",HLTHOUT,ARTHRITIS,0107000,01073005907,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073005908,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,32.5,31.5,33.5,,,1621,"(33.6182924432, -86.6801483084)",HLTHOUT,ARTHRITIS,0107000,01073005908,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073005909,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,28.0,26.5,29.4,,,2524,"(33.611811773, -86.7214221514)",HLTHOUT,ARTHRITIS,0107000,01073005909,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073005910,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,28.0,26.8,29.1,,,4612,"(33.6299017499, -86.7194311229)",HLTHOUT,ARTHRITIS,0107000,01073005910,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073010500,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,41.3,39.4,43.1,,,114,"(33.4363786806, -86.9128923072)",HLTHOUT,ARTHRITIS,0107000,01073010500,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073010701,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,15.1,14.0,16.3,,,74,"(33.473886155, -86.8146487762)",HLTHOUT,ARTHRITIS,0107000,01073010701,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073010706,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,15.3,14.6,16.0,,,1528,"(33.4443709442, -86.8405352645)",HLTHOUT,ARTHRITIS,0107000,01073010706,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073010801,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,24.9,23.9,26.2,,,168,"(33.514097853, -86.7466971362)",HLTHOUT,ARTHRITIS,0107000,01073010801,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073010802,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,33.2,31.7,35.0,,,172,"(33.4885493477, -86.780843024)",HLTHOUT,ARTHRITIS,0107000,01073010802,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073010803,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,23.8,22.6,25.0,,,514,"(33.5229093892, -86.7102618642)",HLTHOUT,ARTHRITIS,0107000,01073010803,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073010805,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,32.0,30.1,34.0,,,86,"(33.4952792472, -86.6987184974)",HLTHOUT,ARTHRITIS,0107000,01073010805,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073011104,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,29.8,28.5,31.1,,,1688,"(33.6159436433, -86.6557892507)",HLTHOUT,ARTHRITIS,0107000,01073011104,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073011107,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,,,,*,Estimates suppressed for population less than 50,42,"(33.5804845249, -86.6301110961)",HLTHOUT,ARTHRITIS,0107000,01073011107,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073011108,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,,,,*,Estimates suppressed for population less than 50,9,"(33.6050742596, -86.6316729386)",HLTHOUT,ARTHRITIS,0107000,01073011108,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073011207,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,25.3,24.3,26.2,,,815,"(33.6718848706, -86.6772510465)",HLTHOUT,ARTHRITIS,0107000,01073011207,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073011209,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,27.2,26.1,28.3,,,1062,"(33.6557189992, -86.7050698349)",HLTHOUT,ARTHRITIS,0107000,01073011209,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073011210,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,23.8,22.3,25.3,,,1385,"(33.6641893755, -86.6956170686)",HLTHOUT,ARTHRITIS,0107000,01073011210,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073011803,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,28.2,27.0,29.4,,,928,"(33.6252575173, -86.6998610409)",HLTHOUT,ARTHRITIS,0107000,01073011803,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073011804,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,25.8,24.6,27.0,,,1157,"(33.6474916175, -86.7042974424)",HLTHOUT,ARTHRITIS,0107000,01073011804,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073011901,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,,,,*,Estimates suppressed for population less than 50,6,"(33.6355414646, -86.736946691)",HLTHOUT,ARTHRITIS,0107000,01073011901,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073011904,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,34.8,33.3,36.3,,,1915,"(33.593140185, -86.7357930541)",HLTHOUT,ARTHRITIS,0107000,01073011904,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073012001,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,44.8,42.9,46.6,,,304,"(33.5919486112, -86.864384068)",HLTHOUT,ARTHRITIS,0107000,01073012001,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073012002,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,,,,*,Estimates suppressed for population less than 50,44,"(33.5859234197, -86.8357007188)",HLTHOUT,ARTHRITIS,0107000,01073012002,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073012200,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,,,,*,Estimates suppressed for population less than 50,23,"(33.5967441904, -87.0879396857)",HLTHOUT,ARTHRITIS,0107000,01073012200,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073012302,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,26.3,25.2,27.5,,,144,"(33.5542816352, -87.0544691416)",HLTHOUT,ARTHRITIS,0107000,01073012302,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073012305,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,30.5,28.6,32.2,,,403,"(33.4695358064, -86.96831739)",HLTHOUT,ARTHRITIS,0107000,01073012305,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073012401,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,27.4,25.6,29.4,,,1066,"(33.5571951048, -86.8777935049)",HLTHOUT,ARTHRITIS,0107000,01073012401,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073012402,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,31.9,30.8,33.0,,,418,"(33.549984172, -86.8994543327)",HLTHOUT,ARTHRITIS,0107000,01073012402,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073012500,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,37.9,36.5,39.4,,,410,"(33.529160486, -86.9346476445)",HLTHOUT,ARTHRITIS,0107000,01073012500,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073012602,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,35.4,34.5,36.3,,,371,"(33.570164674, -86.666430582)",HLTHOUT,ARTHRITIS,0107000,01073012602,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073012701,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,,,,*,Estimates suppressed for population less than 50,44,"(33.5484078071, -86.6323773455)",HLTHOUT,ARTHRITIS,0107000,01073012701,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073012703,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,14.8,13.8,15.9,,,498,"(33.4681180943, -86.6671888213)",HLTHOUT,ARTHRITIS,0107000,01073012703,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073012704,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,27.0,25.2,29.0,,,113,"(33.5034195908, -86.6180983403)",HLTHOUT,ARTHRITIS,0107000,01073012704,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073012803,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,11.9,11.1,12.7,,,1261,"(33.4439425865, -86.7212936938)",HLTHOUT,ARTHRITIS,0107000,01073012803,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073012910,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,,,,*,Estimates suppressed for population less than 50,9,"(33.4345805042, -86.7263292059)",HLTHOUT,ARTHRITIS,0107000,01073012910,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073013002,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,41.0,39.1,42.9,,,1514,"(33.46604181, -86.8567287797)",HLTHOUT,ARTHRITIS,0107000,01073013002,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073013100,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,38.7,37.5,39.9,,,4424,"(33.44880214, -86.8878401579)",HLTHOUT,ARTHRITIS,0107000,01073013100,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073013300,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,39.2,37.6,40.7,,,1782,"(33.4396443569, -86.9248768665)",HLTHOUT,ARTHRITIS,0107000,01073013300,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073013901,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,35.0,33.4,36.6,,,952,"(33.4729384906, -86.9547337648)",HLTHOUT,ARTHRITIS,0107000,01073013901,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073014302,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,19.0,18.1,19.8,,,2778,"(33.4244658829, -86.8841474217)",HLTHOUT,ARTHRITIS,0107000,01073014302,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01073014413,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,17.7,16.9,18.6,,,397,"(33.4226593117, -86.8508620751)",HLTHOUT,ARTHRITIS,0107000,01073014413,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01117030213,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,20.3,19.1,21.5,,,644,"(33.4395975193, -86.6735959359)",HLTHOUT,ARTHRITIS,0107000,01117030213,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01117030217,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,,,,*,Estimates suppressed for population less than 50,16,"(33.4556995763, -86.6520208639)",HLTHOUT,ARTHRITIS,0107000,01117030217,Arthritis +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Health Outcomes,0107000-01117030303,Arthritis among adults aged >=18 Years,%,CrdPrv,Crude prevalence,12.8,12.1,13.6,,,968,"(33.4258661239, -86.713819356)",HLTHOUT,ARTHRITIS,0107000,01117030303,Arthritis +2015,AL,Alabama,Birmingham,City,BRFSS,Unhealthy Behaviors,0107000,Binge drinking among adults aged >=18 Years,%,AgeAdjPrv,Age-adjusted prevalence,11.2,11.1,11.3,,,212237,"(33.5275663773, -86.7988174678)",UNHBEH,BINGE,0107000,,Binge Drinking +2015,AL,Alabama,Birmingham,City,BRFSS,Unhealthy Behaviors,0107000,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,11.3,11.3,11.4,,,212237,"(33.5275663773, -86.7988174678)",UNHBEH,BINGE,0107000,,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073000100,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,10.1,9.7,10.5,,,3042,"(33.5794328326, -86.7228323926)",UNHBEH,BINGE,0107000,01073000100,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073000300,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,10.8,10.3,11.2,,,2735,"(33.5428208686, -86.752433978)",UNHBEH,BINGE,0107000,01073000300,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073000400,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,9.5,9.0,10.0,,,3338,"(33.5632449633, -86.7640474064)",UNHBEH,BINGE,0107000,01073000400,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073000500,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,8.6,8.1,9.0,,,2864,"(33.5442404594, -86.7749130719)",UNHBEH,BINGE,0107000,01073000500,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073000700,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,7.4,6.9,7.9,,,2577,"(33.5525406139, -86.8016893706)",UNHBEH,BINGE,0107000,01073000700,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073000800,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,8.9,8.5,9.3,,,3859,"(33.549697789, -86.8330944744)",UNHBEH,BINGE,0107000,01073000800,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073001100,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,9.6,9.2,10.1,,,5354,"(33.5429143325, -86.8756782852)",UNHBEH,BINGE,0107000,01073001100,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073001200,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,9.4,9.1,9.7,,,2876,"(33.5278767706, -86.8604161686)",UNHBEH,BINGE,0107000,01073001200,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073001400,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,8.9,8.5,9.3,,,2181,"(33.5261497258, -86.835146606)",UNHBEH,BINGE,0107000,01073001400,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073001500,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,9.4,9.1,9.8,,,3189,"(33.5298727342, -86.8197191685)",UNHBEH,BINGE,0107000,01073001500,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073001600,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,8.2,7.7,8.6,,,3390,"(33.5372993423, -86.8036590482)",UNHBEH,BINGE,0107000,01073001600,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073001902,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,9.3,8.9,9.8,,,1894,"(33.5532050997, -86.7429801603)",UNHBEH,BINGE,0107000,01073001902,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073002000,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,9.1,8.7,9.6,,,3885,"(33.5541574106, -86.7167229915)",UNHBEH,BINGE,0107000,01073002000,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073002100,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,10.0,9.6,10.6,,,3186,"(33.5650015942, -86.7101024766)",UNHBEH,BINGE,0107000,01073002100,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073002200,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,10.1,9.7,10.6,,,2630,"(33.5521301205, -86.7276759508)",UNHBEH,BINGE,0107000,01073002200,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073002303,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,8.9,8.5,9.4,,,2936,"(33.5383153207, -86.7270445428)",UNHBEH,BINGE,0107000,01073002303,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073002305,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,16.3,15.8,16.7,,,2952,"(33.5333415976, -86.7479566084)",UNHBEH,BINGE,0107000,01073002305,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073002306,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,15.6,15.2,16.1,,,3257,"(33.5213873564, -86.7490031289)",UNHBEH,BINGE,0107000,01073002306,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073002400,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,11.1,10.8,11.5,,,3629,"(33.5260748309, -86.7830315488)",UNHBEH,BINGE,0107000,01073002400,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073002700,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,13.6,13.0,14.2,,,3992,"(33.5176008419, -86.8106887452)",UNHBEH,BINGE,0107000,01073002700,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073002900,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,8.3,7.8,8.8,,,2064,"(33.5132498864, -86.83004749)",UNHBEH,BINGE,0107000,01073002900,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073003001,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,14.3,13.3,15.3,,,3779,"(33.5125158094, -86.8577164946)",UNHBEH,BINGE,0107000,01073003001,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073003002,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,7.4,7.0,7.8,,,2203,"(33.512258109, -86.8441439907)",UNHBEH,BINGE,0107000,01073003002,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073003100,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,9.5,9.1,10.0,,,3637,"(33.5059655756, -86.8745506086)",UNHBEH,BINGE,0107000,01073003100,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073003200,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,7.6,7.3,8.0,,,931,"(33.5094018502, -86.8859081961)",UNHBEH,BINGE,0107000,01073003200,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073003300,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,8.4,8.0,8.9,,,947,"(33.5171261108, -86.8913819749)",UNHBEH,BINGE,0107000,01073003300,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073002305,Obesity among adults aged >=18 Years,%,CrdPrv,Crude prevalence,31.7,30.4,33.0,,,2952,"(33.5333415976, -86.7479566084)",UNHBEH,OBESITY,0107000,01073002305,Obesity +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073003400,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,8.8,8.3,9.3,,,2477,"(33.5052229234, -86.9014844656)",UNHBEH,BINGE,0107000,01073003400,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073003500,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,10.0,9.5,10.5,,,2780,"(33.5065714011, -86.9195910063)",UNHBEH,BINGE,0107000,01073003500,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073003600,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,9.9,9.4,10.3,,,4683,"(33.48476397, -86.8981392947)",UNHBEH,BINGE,0107000,01073003600,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073003700,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,10.3,9.9,10.7,,,5063,"(33.4969018589, -86.8907729426)",UNHBEH,BINGE,0107000,01073003700,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073003802,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,10.3,9.9,10.7,,,5409,"(33.4785707794, -86.890000907)",UNHBEH,BINGE,0107000,01073003802,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073003803,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,9.2,8.7,9.7,,,4199,"(33.485945214, -86.869692186)",UNHBEH,BINGE,0107000,01073003803,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073003900,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,9.5,9.1,9.8,,,1783,"(33.4989959327, -86.8647600038)",UNHBEH,BINGE,0107000,01073003900,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073004000,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,8.5,8.0,9.0,,,3772,"(33.4953246015, -86.8516232073)",UNHBEH,BINGE,0107000,01073004000,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073004200,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,9.1,8.8,9.4,,,2341,"(33.5007439361, -86.8270720379)",UNHBEH,BINGE,0107000,01073004200,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073004500,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,13.8,12.9,14.8,,,5003,"(33.5041857556, -86.8033798346)",UNHBEH,BINGE,0107000,01073004500,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073004701,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,16.4,15.7,17.2,,,3480,"(33.5075242148, -86.7836675838)",UNHBEH,BINGE,0107000,01073004701,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073004702,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,15.3,14.9,15.7,,,2944,"(33.5119902661, -86.7694550989)",UNHBEH,BINGE,0107000,01073004702,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073004800,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,14.1,13.7,14.5,,,1861,"(33.4989064008, -86.78269914)",UNHBEH,BINGE,0107000,01073004800,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073004901,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,17.0,16.4,17.7,,,1167,"(33.4971595645, -86.7917440668)",UNHBEH,BINGE,0107000,01073004901,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073004902,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,16.3,15.6,17.1,,,3146,"(33.4935824043, -86.8009294603)",UNHBEH,BINGE,0107000,01073004902,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073005000,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,16.1,15.6,16.7,,,3482,"(33.4866689795, -86.8173262831)",UNHBEH,BINGE,0107000,01073005000,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073005101,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,7.9,7.5,8.3,,,1507,"(33.4945909008, -86.834763936)",UNHBEH,BINGE,0107000,01073005101,Binge Drinking +2015,AL,Alabama,Birmingham,Census Tract,BRFSS,Unhealthy Behaviors,0107000-01073005103,Binge drinking among adults aged >=18 Years,%,CrdPrv,Crude prevalence,7.7,7.4,8.0,,,2587,"(33.485714885, -86.8327817467)",UNHBEH,BINGE,0107000,01073005103,Binge Drinking diff --git a/tests/data/sample_json.json b/tests/data/sample_json.json new file mode 100644 index 0000000..0a1eab9 --- /dev/null +++ b/tests/data/sample_json.json @@ -0,0 +1,5154 @@ +{ + "meta": { + "limit": 100, + "offset": 0, + "total_count": 100 + }, + "objects": [ + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Wisconsin", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "709 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.baldwin.senate.gov/feedback", + "fax": "202-225-6942", + "office": "709 Hart Senate Office Building", + "rss_url": "http://www.baldwin.senate.gov/rss/feeds/?type=all" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "B001230", + "birthday": "1962-02-11", + "cspanid": 57884, + "firstname": "Tammy", + "gender": "female", + "gender_label": "Female", + "lastname": "Baldwin", + "link": "https://www.govtrack.us/congress/members/tammy_baldwin/400013", + "middlename": "", + "name": "Sen. Tammy Baldwin [D-WI]", + "namemod": "", + "nickname": "", + "osid": "N00004367", + "pvsid": "3470", + "sortname": "Baldwin, Tammy (Sen.) [D-WI]", + "twitterid": "SenatorBaldwin", + "youtubeid": "witammybaldwin" + }, + "phone": "202-224-5653", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "WI", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.baldwin.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Ohio", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "713 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.brown.senate.gov/contact/", + "fax": "202-228-6321", + "office": "713 Hart Senate Office Building", + "rss_url": "http://www.brown.senate.gov/rss/feeds/?type=all&" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "B000944", + "birthday": "1952-11-09", + "cspanid": 5051, + "firstname": "Sherrod", + "gender": "male", + "gender_label": "Male", + "lastname": "Brown", + "link": "https://www.govtrack.us/congress/members/sherrod_brown/400050", + "middlename": "", + "name": "Sen. Sherrod Brown [D-OH]", + "namemod": "", + "nickname": "", + "osid": "N00003535", + "pvsid": "27018", + "sortname": "Brown, Sherrod (Sen.) [D-OH]", + "twitterid": "SenSherrodBrown", + "youtubeid": "SherrodBrownOhio" + }, + "phone": "202-224-2315", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "OH", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.brown.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Maryland", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "509 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.cardin.senate.gov/contact/", + "fax": "202-224-1651", + "office": "509 Hart Senate Office Building", + "rss_url": "http://www.cardin.senate.gov/rss/feeds/?type=all" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "C000141", + "birthday": "1943-10-05", + "cspanid": 4004, + "firstname": "Benjamin", + "gender": "male", + "gender_label": "Male", + "lastname": "Cardin", + "link": "https://www.govtrack.us/congress/members/benjamin_cardin/400064", + "middlename": "L.", + "name": "Sen. Benjamin Cardin [D-MD]", + "namemod": "", + "nickname": "", + "osid": "N00001955", + "pvsid": "26888", + "sortname": "Cardin, Benjamin (Sen.) [D-MD]", + "twitterid": "SenatorCardin", + "youtubeid": "senatorcardin" + }, + "phone": "202-224-4524", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "MD", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.cardin.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Arizona", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "413 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.flake.senate.gov/public/index.cfm/contact-jeff", + "fax": "202-226-4386", + "office": "413 Russell Senate Office Building", + "rss_url": "http://www.flake.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "F000444", + "birthday": "1962-12-31", + "cspanid": 87582, + "firstname": "Jeff", + "gender": "male", + "gender_label": "Male", + "lastname": "Flake", + "link": "https://www.govtrack.us/congress/members/jeff_flake/400134", + "middlename": "", + "name": "Sen. Jeff Flake [R-AZ]", + "namemod": "", + "nickname": "", + "osid": "N00009573", + "pvsid": "28128", + "sortname": "Flake, Jeff (Sen.) [R-AZ]", + "twitterid": "JeffFlake", + "youtubeid": "flakeoffice" + }, + "phone": "202-224-4521", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "AZ", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.flake.senate.gov/public" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for New Jersey", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "528 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.menendez.senate.gov/contact", + "fax": "202-228-2197", + "office": "528 Hart Senate Office Building", + "rss_url": "http://www.menendez.senate.gov/rss/feeds/index.cfm?type=news" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "M000639", + "birthday": "1954-01-01", + "cspanid": 29608, + "firstname": "Robert", + "gender": "male", + "gender_label": "Male", + "lastname": "Menéndez", + "link": "https://www.govtrack.us/congress/members/robert_menendez/400272", + "middlename": "", + "name": "Sen. Robert “Bob” Menéndez [D-NJ]", + "namemod": "", + "nickname": "Bob", + "osid": "N00000699", + "pvsid": "26961", + "sortname": "Menéndez, Robert “Bob” (Sen.) [D-NJ]", + "twitterid": "SenatorMenendez", + "youtubeid": "SenatorMenendezNJ" + }, + "phone": "202-224-4744", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "NJ", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.menendez.senate.gov" + }, + { + "caucus": "Democrat", + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Vermont", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "332 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "http://www.sanders.senate.gov/contact/", + "fax": "202-228-0776", + "office": "332 Dirksen Senate Office Building", + "rss_url": "http://www.sanders.senate.gov/rss/" + }, + "leadership_title": null, + "party": "Independent", + "person": { + "bioguideid": "S000033", + "birthday": "1941-09-08", + "cspanid": 994, + "firstname": "Bernard", + "gender": "male", + "gender_label": "Male", + "lastname": "Sanders", + "link": "https://www.govtrack.us/congress/members/bernard_sanders/400357", + "middlename": "", + "name": "Sen. Bernard “Bernie” Sanders [I-VT]", + "namemod": "", + "nickname": "Bernie", + "osid": "N00000528", + "pvsid": "27110", + "sortname": "Sanders, Bernard “Bernie” (Sen.) [I-VT]", + "twitterid": "SenSanders", + "youtubeid": "senatorsanders" + }, + "phone": "202-224-5141", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "VT", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.sanders.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Washington", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "511 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.cantwell.senate.gov/public/index.cfm/email-maria", + "fax": "202-228-0514", + "office": "511 Hart Senate Office Building", + "rss_url": "http://www.cantwell.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "C000127", + "birthday": "1958-10-13", + "cspanid": 26137, + "firstname": "Maria", + "gender": "female", + "gender_label": "Female", + "lastname": "Cantwell", + "link": "https://www.govtrack.us/congress/members/maria_cantwell/300018", + "middlename": "", + "name": "Sen. Maria Cantwell [D-WA]", + "namemod": "", + "nickname": "", + "osid": "N00007836", + "pvsid": "27122", + "sortname": "Cantwell, Maria (Sen.) [D-WA]", + "twitterid": "SenatorCantwell", + "youtubeid": "SenatorCantwell" + }, + "phone": "202-224-3441", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "WA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.cantwell.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Delaware", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "513 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.carper.senate.gov/public/index.cfm/email-senator-carper", + "fax": "202-228-2190", + "office": "513 Hart Senate Office Building", + "rss_url": "http://www.carper.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "C000174", + "birthday": "1947-01-23", + "cspanid": 663, + "firstname": "Thomas", + "gender": "male", + "gender_label": "Male", + "lastname": "Carper", + "link": "https://www.govtrack.us/congress/members/thomas_carper/300019", + "middlename": "Richard", + "name": "Sen. Thomas Carper [D-DE]", + "namemod": "", + "nickname": "", + "osid": "N00012508", + "pvsid": "22421", + "sortname": "Carper, Thomas (Sen.) [D-DE]", + "twitterid": "SenatorCarper", + "youtubeid": "senatorcarper" + }, + "phone": "202-224-2441", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "DE", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.carper.senate.gov/public" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for California", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "331 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.feinstein.senate.gov/public/index.cfm/e-mail-me", + "fax": "202-228-3954", + "office": "331 Hart Senate Office Building", + "rss_url": "http://www.feinstein.senate.gov/public/?a=rss.feed" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "F000062", + "birthday": "1933-06-22", + "cspanid": 13061, + "firstname": "Dianne", + "gender": "female", + "gender_label": "Female", + "lastname": "Feinstein", + "link": "https://www.govtrack.us/congress/members/dianne_feinstein/300043", + "middlename": "", + "name": "Sen. Dianne Feinstein [D-CA]", + "namemod": "", + "nickname": "", + "osid": "N00007364", + "pvsid": "53273", + "sortname": "Feinstein, Dianne (Sen.) [D-CA]", + "twitterid": "SenFeinstein", + "youtubeid": "SenatorFeinstein" + }, + "phone": "202-224-3841", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "CA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.feinstein.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Utah", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "104 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.hatch.senate.gov/public/index.cfm/contact?p=Email-Orrin", + "fax": "202-224-6331", + "office": "104 Hart Senate Office Building", + "rss_url": "http://www.hatch.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "H000338", + "birthday": "1934-03-22", + "cspanid": 189, + "firstname": "Orrin", + "gender": "male", + "gender_label": "Male", + "lastname": "Hatch", + "link": "https://www.govtrack.us/congress/members/orrin_hatch/300052", + "middlename": "G.", + "name": "Sen. Orrin Hatch [R-UT]", + "namemod": "", + "nickname": "", + "osid": "N00009869", + "pvsid": "53352", + "sortname": "Hatch, Orrin (Sen.) [R-UT]", + "twitterid": "SenOrrinHatch", + "youtubeid": "SenatorOrrinHatch" + }, + "phone": "202-224-5251", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "UT", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.hatch.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Florida", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "716 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.billnelson.senate.gov/contact-bill", + "fax": "202-228-2183", + "office": "716 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "N000032", + "birthday": "1942-09-29", + "cspanid": 1931, + "firstname": "Bill", + "gender": "male", + "gender_label": "Male", + "lastname": "Nelson", + "link": "https://www.govtrack.us/congress/members/bill_nelson/300078", + "middlename": "", + "name": "Sen. Bill Nelson [D-FL]", + "namemod": "", + "nickname": "", + "osid": "N00009926", + "pvsid": "1606", + "sortname": "Nelson, Bill (Sen.) [D-FL]", + "twitterid": "SenBillNelson", + "youtubeid": "senbillnelson" + }, + "phone": "202-224-5274", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "FL", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.billnelson.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Michigan", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "731 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.stabenow.senate.gov/contact", + "fax": "202-228-0325", + "office": "731 Hart Senate Office Building", + "rss_url": "http://stabenow.senate.gov/rss/?p=news" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "S000770", + "birthday": "1950-04-29", + "cspanid": 45451, + "firstname": "Debbie", + "gender": "female", + "gender_label": "Female", + "lastname": "Stabenow", + "link": "https://www.govtrack.us/congress/members/debbie_stabenow/300093", + "middlename": "Ann", + "name": "Sen. Debbie Stabenow [D-MI]", + "namemod": "", + "nickname": "", + "osid": "N00004118", + "pvsid": "515", + "sortname": "Stabenow, Debbie (Sen.) [D-MI]", + "twitterid": "SenStabenow", + "youtubeid": "senatorstabenow" + }, + "phone": "202-224-4822", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "MI", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.stabenow.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Connecticut", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "136 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.murphy.senate.gov/contact", + "fax": "202-225-5933", + "office": "136 Hart Senate Office Building", + "rss_url": "http://www.theday.com/article/20121216/nws12/312169935/1069/rss" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "M001169", + "birthday": "1973-08-03", + "cspanid": 1021270, + "firstname": "Christopher", + "gender": "male", + "gender_label": "Male", + "lastname": "Murphy", + "link": "https://www.govtrack.us/congress/members/christopher_murphy/412194", + "middlename": "S.", + "name": "Sen. Christopher Murphy [D-CT]", + "namemod": "", + "nickname": "", + "osid": "N00027566", + "pvsid": "17189", + "sortname": "Murphy, Christopher (Sen.) [D-CT]", + "twitterid": "senmurphyoffice", + "youtubeid": "senchrismurphy" + }, + "phone": "202-224-4041", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "CT", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.murphy.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Hawaii", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "730 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.hirono.senate.gov/contact", + "fax": "202-225-4987", + "office": "730 Hart Senate Office Building", + "rss_url": "http://www.hirono.senate.gov/rss/feeds/?type=all" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "H001042", + "birthday": "1947-11-03", + "cspanid": 91216, + "firstname": "Mazie", + "gender": "female", + "gender_label": "Female", + "lastname": "Hirono", + "link": "https://www.govtrack.us/congress/members/mazie_hirono/412200", + "middlename": "K.", + "name": "Sen. Mazie Hirono [D-HI]", + "namemod": "", + "nickname": "", + "osid": "N00028139", + "pvsid": "1677", + "sortname": "Hirono, Mazie (Sen.) [D-HI]", + "twitterid": "MazieHirono", + "youtubeid": "CongresswomanHirono" + }, + "phone": "202-224-6361", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "HI", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.hirono.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Indiana", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "720 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.donnelly.senate.gov/contact/email-joe", + "fax": "202-225-6798", + "office": "720 Hart Senate Office Building", + "rss_url": "http://www.donnelly.senate.gov/rss/feeds/?type=all" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "D000607", + "birthday": "1955-09-28", + "cspanid": 1012000, + "firstname": "Joe", + "gender": "male", + "gender_label": "Male", + "lastname": "Donnelly", + "link": "https://www.govtrack.us/congress/members/joe_donnelly/412205", + "middlename": "", + "name": "Sen. Joe Donnelly [D-IN]", + "namemod": "", + "nickname": "", + "osid": "N00026586", + "pvsid": "34212", + "sortname": "Donnelly, Joe (Sen.) [D-IN]", + "twitterid": "SenDonnelly", + "youtubeid": "sendonnelly" + }, + "phone": "202-224-4814", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "IN", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.donnelly.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Nevada", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "324 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.heller.senate.gov/public/index.cfm/contact-form", + "fax": "202-228-6753", + "office": "324 Hart Senate Office Building", + "rss_url": "http://www.heller.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "H001041", + "birthday": "1960-05-10", + "cspanid": 1012368, + "firstname": "Dean", + "gender": "male", + "gender_label": "Male", + "lastname": "Heller", + "link": "https://www.govtrack.us/congress/members/dean_heller/412218", + "middlename": "", + "name": "Sen. Dean Heller [R-NV]", + "namemod": "", + "nickname": "", + "osid": "N00027522", + "pvsid": "2291", + "sortname": "Heller, Dean (Sen.) [R-NV]", + "twitterid": "SenDeanHeller", + "youtubeid": "SenDeanHeller" + }, + "phone": "202-224-6244", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "NV", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.heller.senate.gov/public" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for New York", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "478 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.gillibrand.senate.gov/contact/email-me", + "fax": "202-228-0282", + "office": "478 Russell Senate Office Building", + "rss_url": "http://www.gillibrand.senate.gov/rss/" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "G000555", + "birthday": "1966-12-09", + "cspanid": 1022862, + "firstname": "Kirsten", + "gender": "female", + "gender_label": "Female", + "lastname": "Gillibrand", + "link": "https://www.govtrack.us/congress/members/kirsten_gillibrand/412223", + "middlename": "E.", + "name": "Sen. Kirsten Gillibrand [D-NY]", + "namemod": "", + "nickname": "", + "osid": "N00027658", + "pvsid": "65147", + "sortname": "Gillibrand, Kirsten (Sen.) [D-NY]", + "twitterid": "SenGillibrand", + "youtubeid": "KirstenEGillibrand" + }, + "phone": "202-224-4451", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "NY", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.gillibrand.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Minnesota", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "302 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.klobuchar.senate.gov/public/index.cfm/contact", + "fax": "202-228-2186", + "office": "302 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "K000367", + "birthday": "1960-05-25", + "cspanid": 83701, + "firstname": "Amy", + "gender": "female", + "gender_label": "Female", + "lastname": "Klobuchar", + "link": "https://www.govtrack.us/congress/members/amy_klobuchar/412242", + "middlename": "Jean", + "name": "Sen. Amy Klobuchar [D-MN]", + "namemod": "", + "nickname": "", + "osid": "N00027500", + "pvsid": "65092", + "sortname": "Klobuchar, Amy (Sen.) [D-MN]", + "twitterid": "SenAmyKlobuchar", + "youtubeid": "senatorklobuchar" + }, + "phone": "202-224-3244", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "MN", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.klobuchar.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Missouri", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "503 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.mccaskill.senate.gov/contact", + "fax": "202-228-6326", + "office": "503 Hart Senate Office Building", + "rss_url": "http://mccaskill.senate.gov/rss/?p=news" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "M001170", + "birthday": "1953-07-24", + "cspanid": 44501, + "firstname": "Claire", + "gender": "female", + "gender_label": "Female", + "lastname": "McCaskill", + "link": "https://www.govtrack.us/congress/members/claire_mccaskill/412243", + "middlename": "", + "name": "Sen. Claire McCaskill [D-MO]", + "namemod": "", + "nickname": "", + "osid": "N00027694", + "pvsid": "2109", + "sortname": "McCaskill, Claire (Sen.) [D-MO]", + "twitterid": "McCaskillOffice", + "youtubeid": "SenatorMcCaskill" + }, + "phone": "202-224-6154", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "MO", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.mccaskill.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Montana", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "311 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.tester.senate.gov/?p=email_senator", + "fax": "202-224-8594", + "office": "311 Hart Senate Office Building", + "rss_url": "http://www.tester.senate.gov/rss/?p=hot_topic" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "T000464", + "birthday": "1956-08-21", + "cspanid": 1020176, + "firstname": "Jon", + "gender": "male", + "gender_label": "Male", + "lastname": "Tester", + "link": "https://www.govtrack.us/congress/members/jon_tester/412244", + "middlename": "", + "name": "Sen. Jon Tester [D-MT]", + "namemod": "", + "nickname": "", + "osid": "N00027605", + "pvsid": "20928", + "sortname": "Tester, Jon (Sen.) [D-MT]", + "twitterid": "SenatorTester", + "youtubeid": "senatorjontester" + }, + "phone": "202-224-2644", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "MT", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.tester.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Pennsylvania", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "393 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.casey.senate.gov/contact/", + "fax": "202-228-0604", + "office": "393 Russell Senate Office Building", + "rss_url": "http://www.casey.senate.gov/rss/feeds/?all" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "C001070", + "birthday": "1960-04-13", + "cspanid": 47036, + "firstname": "Robert", + "gender": "male", + "gender_label": "Male", + "lastname": "Casey", + "link": "https://www.govtrack.us/congress/members/robert_casey/412246", + "middlename": "P.", + "name": "Sen. Robert “Bob” Casey [D-PA]", + "namemod": "Jr.", + "nickname": "Bob", + "osid": "N00027503", + "pvsid": "2541", + "sortname": "Casey, Robert “Bob” (Sen.) [D-PA]", + "twitterid": "SenBobCasey", + "youtubeid": "SenatorBobCasey" + }, + "phone": "202-224-6324", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "PA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.casey.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Rhode Island", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "530 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.whitehouse.senate.gov/contact/email-sheldon", + "fax": "202-228-6362", + "office": "530 Hart Senate Office Building", + "rss_url": "http://www.whitehouse.senate.gov/rss/feeds/?type=all&cachebuster=1" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "W000802", + "birthday": "1955-10-20", + "cspanid": 92235, + "firstname": "Sheldon", + "gender": "male", + "gender_label": "Male", + "lastname": "Whitehouse", + "link": "https://www.govtrack.us/congress/members/sheldon_whitehouse/412247", + "middlename": "", + "name": "Sen. Sheldon Whitehouse [D-RI]", + "namemod": "", + "nickname": "", + "osid": "N00027533", + "pvsid": "2572", + "sortname": "Whitehouse, Sheldon (Sen.) [D-RI]", + "twitterid": "SenWhitehouse", + "youtubeid": "SenatorWhitehouse" + }, + "phone": "202-224-2921", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "RI", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.whitehouse.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Tennessee", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "425 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.corker.senate.gov/public/index.cfm/emailme", + "fax": "202-228-0566", + "office": "425 Dirksen Senate Office Building", + "rss_url": "http://www.corker.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "C001071", + "birthday": "1952-08-24", + "cspanid": 1021114, + "firstname": "Bob", + "gender": "male", + "gender_label": "Male", + "lastname": "Corker", + "link": "https://www.govtrack.us/congress/members/bob_corker/412248", + "middlename": "", + "name": "Sen. Bob Corker [R-TN]", + "namemod": "", + "nickname": "", + "osid": "N00027441", + "pvsid": "65905", + "sortname": "Corker, Bob (Sen.) [R-TN]", + "twitterid": "SenBobCorker", + "youtubeid": "senatorcorker" + }, + "phone": "202-224-3344", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "TN", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.corker.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Wyoming", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "307 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.barrasso.senate.gov/public/index.cfm/contact-form", + "fax": "202-224-1724", + "office": "307 Dirksen Senate Office Building", + "rss_url": "http://www.barrasso.senate.gov/public/index.cfm?FuseAction=Rss.Feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "B001261", + "birthday": "1952-07-21", + "cspanid": 1024777, + "firstname": "John", + "gender": "male", + "gender_label": "Male", + "lastname": "Barrasso", + "link": "https://www.govtrack.us/congress/members/john_barrasso/412251", + "middlename": "A.", + "name": "Sen. John Barrasso [R-WY]", + "namemod": "", + "nickname": "", + "osid": "N00006236", + "pvsid": "52662", + "sortname": "Barrasso, John (Sen.) [R-WY]", + "twitterid": "SenJohnBarrasso", + "youtubeid": "barrassowyo" + }, + "phone": "202-224-6441", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "WY", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.barrasso.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for New Mexico", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "303 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.heinrich.senate.gov/contact", + "fax": "202-225-4975", + "office": "303 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "H001046", + "birthday": "1971-10-17", + "cspanid": 1030686, + "firstname": "Martin", + "gender": "male", + "gender_label": "Male", + "lastname": "Heinrich", + "link": "https://www.govtrack.us/congress/members/martin_heinrich/412281", + "middlename": "", + "name": "Sen. Martin Heinrich [D-NM]", + "namemod": "", + "nickname": "", + "osid": "N00029835", + "pvsid": "74517", + "sortname": "Heinrich, Martin (Sen.) [D-NM]", + "twitterid": "MartinHeinrich", + "youtubeid": "SenMartinHeinrich" + }, + "phone": "202-224-5521", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "NM", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.heinrich.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for West Virginia", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "306 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.manchin.senate.gov/public/index.cfm/contact-form", + "fax": "202-228-0002", + "office": "306 Hart Senate Office Building", + "rss_url": "http://www.manchin.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "M001183", + "birthday": "1947-08-24", + "cspanid": 62864, + "firstname": "Joe", + "gender": "male", + "gender_label": "Male", + "lastname": "Manchin", + "link": "https://www.govtrack.us/congress/members/joe_manchin/412391", + "middlename": "", + "name": "Sen. Joe Manchin [D-WV]", + "namemod": "III", + "nickname": "", + "osid": "N00032838", + "pvsid": "7547", + "sortname": "Manchin, Joe (Sen.) [D-WV]", + "twitterid": "Sen_JoeManchin", + "youtubeid": "SenatorJoeManchin" + }, + "phone": "202-224-3954", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "WV", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.manchin.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Massachusetts", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "317 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.warren.senate.gov/?p=email_senator", + "fax": "202-228-2072", + "office": "317 Hart Senate Office Building", + "rss_url": "http://www.warren.senate.gov/rss/?p=hot_topic" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "W000817", + "birthday": "1949-06-22", + "cspanid": 1023023, + "firstname": "Elizabeth", + "gender": "female", + "gender_label": "Female", + "lastname": "Warren", + "link": "https://www.govtrack.us/congress/members/elizabeth_warren/412542", + "middlename": "", + "name": "Sen. Elizabeth Warren [D-MA]", + "namemod": "", + "nickname": "", + "osid": "N00033492", + "pvsid": "141272", + "sortname": "Warren, Elizabeth (Sen.) [D-MA]", + "twitterid": "SenWarren", + "youtubeid": "senelizabethwarren" + }, + "phone": "202-224-4543", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "MA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.warren.senate.gov" + }, + { + "caucus": "Democrat", + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Maine", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "133 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.king.senate.gov/contact", + "fax": "202-224-1946", + "office": "133 Hart Senate Office Building", + "rss_url": "http://www.king.senate.gov/rss/feeds/?type=all" + }, + "leadership_title": null, + "party": "Independent", + "person": { + "bioguideid": "K000383", + "birthday": "1944-03-31", + "cspanid": 37413, + "firstname": "Angus", + "gender": "male", + "gender_label": "Male", + "lastname": "King", + "link": "https://www.govtrack.us/congress/members/angus_king/412545", + "middlename": "", + "name": "Sen. Angus King [I-ME]", + "namemod": "", + "nickname": "", + "osid": "N00034580", + "pvsid": "22381", + "sortname": "King, Angus (Sen.) [I-ME]", + "twitterid": "SenAngusKing", + "youtubeid": "SenatorAngusKing" + }, + "phone": "202-224-5344", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "ME", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.king.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for North Dakota", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "516 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.heitkamp.senate.gov/public/index.cfm/contact", + "fax": "202-224-7776", + "office": "516 Hart Senate Office Building", + "rss_url": "http://www.heitkamp.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "H001069", + "birthday": "1955-10-30", + "cspanid": 95414, + "firstname": "Heidi", + "gender": "female", + "gender_label": "Female", + "lastname": "Heitkamp", + "link": "https://www.govtrack.us/congress/members/heidi_heitkamp/412554", + "middlename": "", + "name": "Sen. Heidi Heitkamp [D-ND]", + "namemod": "", + "nickname": "", + "osid": "N00033782", + "pvsid": "41716", + "sortname": "Heitkamp, Heidi (Sen.) [D-ND]", + "twitterid": "SenatorHeitkamp", + "youtubeid": "senatorheidiheitkamp" + }, + "phone": "202-224-2043", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "ND", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.heitkamp.senate.gov/public" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Nebraska", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "454 Russell Senate Office Building Washington DC 20510", + "contact_form": "http://www.fischer.senate.gov/public/index.cfm/contact", + "fax": "202-228-1325", + "office": "454 Russell Senate Office Building", + "rss_url": "http://www.fischer.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "F000463", + "birthday": "1951-03-01", + "cspanid": 1034067, + "firstname": "Deb", + "gender": "female", + "gender_label": "Female", + "lastname": "Fischer", + "link": "https://www.govtrack.us/congress/members/deb_fischer/412556", + "middlename": "", + "name": "Sen. Deb Fischer [R-NE]", + "namemod": "", + "nickname": "", + "osid": "N00033443", + "pvsid": "41963", + "sortname": "Fischer, Deb (Sen.) [R-NE]", + "twitterid": "SenatorFischer", + "youtubeid": "senatordebfischer" + }, + "phone": "202-224-6551", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "NE", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.fischer.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Texas", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "404 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.cruz.senate.gov/?p=form&id=16", + "fax": "202-228-3398", + "office": "404 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "C001098", + "birthday": "1970-12-22", + "cspanid": 1019953, + "firstname": "Ted", + "gender": "male", + "gender_label": "Male", + "lastname": "Cruz", + "link": "https://www.govtrack.us/congress/members/ted_cruz/412573", + "middlename": "", + "name": "Sen. Ted Cruz [R-TX]", + "namemod": "", + "nickname": "", + "osid": "N00033085", + "pvsid": "135705", + "sortname": "Cruz, Ted (Sen.) [R-TX]", + "twitterid": "SenTedCruz", + "youtubeid": "sentedcruz" + }, + "phone": "202-224-5922", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "TX", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.cruz.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Virginia", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "231 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.kaine.senate.gov/contact", + "fax": "202-228-6363", + "office": "231 Russell Senate Office Building", + "rss_url": "http://www.kaine.senate.gov/rss/feeds/?type=all" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "K000384", + "birthday": "1958-02-26", + "cspanid": 49219, + "firstname": "Timothy", + "gender": "male", + "gender_label": "Male", + "lastname": "Kaine", + "link": "https://www.govtrack.us/congress/members/timothy_kaine/412582", + "middlename": "", + "name": "Sen. Timothy Kaine [D-VA]", + "namemod": "", + "nickname": "", + "osid": "N00033177", + "pvsid": "50772", + "sortname": "Kaine, Timothy (Sen.) [D-VA]", + "twitterid": null, + "youtubeid": "SenatorTimKaine" + }, + "phone": "202-224-4024", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "VA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.kaine.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Mississippi", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "555 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.wicker.senate.gov/public/index.cfm/contact", + "fax": "202-228-0378", + "office": "555 Dirksen Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "W000437", + "birthday": "1951-07-05", + "cspanid": 18203, + "firstname": "Roger", + "gender": "male", + "gender_label": "Male", + "lastname": "Wicker", + "link": "https://www.govtrack.us/congress/members/roger_wicker/400432", + "middlename": "F.", + "name": "Sen. Roger Wicker [R-MS]", + "namemod": "", + "nickname": "", + "osid": "N00003280", + "pvsid": "21926", + "sortname": "Wicker, Roger (Sen.) [R-MS]", + "twitterid": "SenatorWicker", + "youtubeid": "SenatorWicker" + }, + "phone": "202-224-6253", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "MS", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.wicker.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Tennessee", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "455 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "http://www.alexander.senate.gov/public/index.cfm?p=Email", + "fax": "202-228-3398", + "office": "455 Dirksen Senate Office Building", + "rss_url": "http://www.alexander.senate.gov/public/?a=rss.feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "A000360", + "birthday": "1940-07-03", + "cspanid": 5, + "firstname": "Lamar", + "gender": "male", + "gender_label": "Male", + "lastname": "Alexander", + "link": "https://www.govtrack.us/congress/members/lamar_alexander/300002", + "middlename": "", + "name": "Sen. Lamar Alexander [R-TN]", + "namemod": "", + "nickname": "", + "osid": "N00009888", + "pvsid": "15691", + "sortname": "Alexander, Lamar (Sen.) [R-TN]", + "twitterid": "SenAlexander", + "youtubeid": "lamaralexander" + }, + "phone": "202-224-4944", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "TN", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.alexander.senate.gov/public" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Maine", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "413 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "http://www.collins.senate.gov/contact", + "fax": "202-224-2693", + "office": "413 Dirksen Senate Office Building", + "rss_url": "http://www.collins.senate.gov/public/?a=rss.feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "C001035", + "birthday": "1952-12-07", + "cspanid": 45738, + "firstname": "Susan", + "gender": "female", + "gender_label": "Female", + "lastname": "Collins", + "link": "https://www.govtrack.us/congress/members/susan_collins/300025", + "middlename": "M.", + "name": "Sen. Susan Collins [R-ME]", + "namemod": "", + "nickname": "", + "osid": "N00000491", + "pvsid": "379", + "sortname": "Collins, Susan (Sen.) [R-ME]", + "twitterid": "SenatorCollins", + "youtubeid": "SenatorSusanCollins" + }, + "phone": "202-224-2523", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "ME", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.collins.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Texas", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "517 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.cornyn.senate.gov/contact", + "fax": "202-228-2856", + "office": "517 Hart Senate Office Building", + "rss_url": "http://www.cornyn.senate.gov/public/?a=rss.feed" + }, + "leadership_title": "Majority Whip", + "party": "Republican", + "person": { + "bioguideid": "C001056", + "birthday": "1952-02-02", + "cspanid": 93131, + "firstname": "John", + "gender": "male", + "gender_label": "Male", + "lastname": "Cornyn", + "link": "https://www.govtrack.us/congress/members/john_cornyn/300027", + "middlename": "", + "name": "Sen. John Cornyn [R-TX]", + "namemod": "", + "nickname": "", + "osid": "N00024852", + "pvsid": "15375", + "sortname": "Cornyn, John (Sen.) [R-TX]", + "twitterid": "JohnCornyn", + "youtubeid": "senjohncornyn" + }, + "phone": "202-224-2934", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "TX", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.cornyn.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Illinois", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "711 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.durbin.senate.gov/contact/", + "fax": "202-228-0400", + "office": "711 Hart Senate Office Building", + "rss_url": "http://durbin.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": "Minority Whip", + "party": "Democrat", + "person": { + "bioguideid": "D000563", + "birthday": "1944-11-21", + "cspanid": 6741, + "firstname": "Richard", + "gender": "male", + "gender_label": "Male", + "lastname": "Durbin", + "link": "https://www.govtrack.us/congress/members/richard_durbin/300038", + "middlename": "J.", + "name": "Sen. Richard Durbin [D-IL]", + "namemod": "", + "nickname": "", + "osid": "N00004981", + "pvsid": "26847", + "sortname": "Durbin, Richard (Sen.) [D-IL]", + "twitterid": "SenatorDurbin", + "youtubeid": "SenatorDurbin" + }, + "phone": "202-224-2152", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "IL", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.durbin.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Wyoming", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "379A Russell Senate Office Building Washington DC 20510", + "contact_form": "http://www.enzi.senate.gov/public/index.cfm/contact?p=e-mail-senator-enzi", + "fax": "202-228-0359", + "office": "379a Russell Senate Office Building", + "rss_url": "http://www.enzi.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "E000285", + "birthday": "1944-02-01", + "cspanid": 45824, + "firstname": "Michael", + "gender": "male", + "gender_label": "Male", + "lastname": "Enzi", + "link": "https://www.govtrack.us/congress/members/michael_enzi/300041", + "middlename": "B.", + "name": "Sen. Michael Enzi [R-WY]", + "namemod": "", + "nickname": "", + "osid": "N00006249", + "pvsid": "558", + "sortname": "Enzi, Michael (Sen.) [R-WY]", + "twitterid": "SenatorEnzi", + "youtubeid": "senatorenzi" + }, + "phone": "202-224-3424", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "WY", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.enzi.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for South Carolina", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "290 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.lgraham.senate.gov/public/index.cfm/e-mail-senator-graham", + "fax": "202-224-3808", + "office": "290 Russell Senate Office Building", + "rss_url": "http://www.lgraham.senate.gov/public/index.cfm?FuseAction=Rss.Feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "G000359", + "birthday": "1955-07-09", + "cspanid": 36782, + "firstname": "Lindsey", + "gender": "male", + "gender_label": "Male", + "lastname": "Graham", + "link": "https://www.govtrack.us/congress/members/lindsey_graham/300047", + "middlename": "O.", + "name": "Sen. Lindsey Graham [R-SC]", + "namemod": "", + "nickname": "", + "osid": "N00009975", + "pvsid": "21992", + "sortname": "Graham, Lindsey (Sen.) [R-SC]", + "twitterid": "GrahamBlog", + "youtubeid": "USSenLindseyGraham" + }, + "phone": "202-224-5972", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "SC", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.lgraham.senate.gov/public" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Oklahoma", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "205 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.inhofe.senate.gov/contact", + "fax": "202-228-0380", + "office": "205 Russell Senate Office Building", + "rss_url": "http://www.inhofe.senate.gov/rss/feeds/?type=all&cachebuster=eea6c4d7%2d939c%2d5c1e%2db6c7aa3b8b291208" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "I000024", + "birthday": "1934-11-17", + "cspanid": 5619, + "firstname": "James", + "gender": "male", + "gender_label": "Male", + "lastname": "Inhofe", + "link": "https://www.govtrack.us/congress/members/james_inhofe/300055", + "middlename": "M.", + "name": "Sen. James “Jim” Inhofe [R-OK]", + "namemod": "", + "nickname": "Jim", + "osid": "N00005582", + "pvsid": "27027", + "sortname": "Inhofe, James “Jim” (Sen.) [R-OK]", + "twitterid": "InhofePress", + "youtubeid": "jiminhofepressoffice" + }, + "phone": "202-224-4721", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "OK", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.inhofe.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Kentucky", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "317 Russell Senate Office Building Washington DC 20510", + "contact_form": "http://www.mcconnell.senate.gov/public/index.cfm?p=contact", + "fax": "202-224-2499", + "office": "317 Russell Senate Office Building", + "rss_url": "http://www.mcconnell.senate.gov/public/?a=rss.feed" + }, + "leadership_title": "Majority Leader", + "party": "Republican", + "person": { + "bioguideid": "M000355", + "birthday": "1942-02-20", + "cspanid": 2351, + "firstname": "Mitch", + "gender": "male", + "gender_label": "Male", + "lastname": "McConnell", + "link": "https://www.govtrack.us/congress/members/mitch_mcconnell/300072", + "middlename": "", + "name": "Sen. Mitch McConnell [R-KY]", + "namemod": "", + "nickname": "", + "osid": "N00003389", + "pvsid": "53298", + "sortname": "McConnell, Mitch (Sen.) [R-KY]", + "twitterid": "McConnellPress", + "youtubeid": null + }, + "phone": "202-224-2541", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "KY", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.mcconnell.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Rhode Island", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "728 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.reed.senate.gov/contact/", + "fax": "202-224-4680", + "office": "728 Hart Senate Office Building", + "rss_url": "https://www.reed.senate.gov//rss/feeds/?type=all" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "R000122", + "birthday": "1949-11-12", + "cspanid": 24239, + "firstname": "John", + "gender": "male", + "gender_label": "Male", + "lastname": "Reed", + "link": "https://www.govtrack.us/congress/members/john_reed/300081", + "middlename": "F.", + "name": "Sen. John “Jack” Reed [D-RI]", + "namemod": "", + "nickname": "Jack", + "osid": "N00000362", + "pvsid": "27060", + "sortname": "Reed, John “Jack” (Sen.) [D-RI]", + "twitterid": "SenJackReed", + "youtubeid": "SenatorReed" + }, + "phone": "202-224-4642", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "RI", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.reed.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Kansas", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "109 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.roberts.senate.gov/public/?p=EmailPat", + "fax": "202-224-3514", + "office": "109 Hart Senate Office Building", + "rss_url": "http://www.roberts.senate.gov/public/?a=rss.feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "R000307", + "birthday": "1936-04-20", + "cspanid": 16354, + "firstname": "Pat", + "gender": "male", + "gender_label": "Male", + "lastname": "Roberts", + "link": "https://www.govtrack.us/congress/members/pat_roberts/300083", + "middlename": "", + "name": "Sen. Pat Roberts [R-KS]", + "namemod": "", + "nickname": "", + "osid": "N00005285", + "pvsid": "26866", + "sortname": "Roberts, Pat (Sen.) [R-KS]", + "twitterid": "SenPatRoberts", + "youtubeid": "SenPatRoberts" + }, + "phone": "202-224-4774", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "KS", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.roberts.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for West Virginia", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "172 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.capito.senate.gov/contact/contact-shelley", + "fax": "202-225-7856", + "office": "172 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "C001047", + "birthday": "1953-11-26", + "cspanid": 83737, + "firstname": "Shelley", + "gender": "female", + "gender_label": "Female", + "lastname": "Capito", + "link": "https://www.govtrack.us/congress/members/shelley_capito/400061", + "middlename": "Moore", + "name": "Sen. Shelley Capito [R-WV]", + "namemod": "", + "nickname": "", + "osid": "N00009771", + "pvsid": "11701", + "sortname": "Capito, Shelley (Sen.) [R-WV]", + "twitterid": "SenCapito", + "youtubeid": null + }, + "phone": "202-224-6472", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "WV", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.capito.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Massachusetts", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "255 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.markey.senate.gov/contact", + "office": "255 Dirksen Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "M000133", + "birthday": "1946-07-11", + "cspanid": 260, + "firstname": "Edward", + "gender": "male", + "gender_label": "Male", + "lastname": "Markey", + "link": "https://www.govtrack.us/congress/members/edward_markey/400253", + "middlename": "J.", + "name": "Sen. Edward “Ed” Markey [D-MA]", + "namemod": "", + "nickname": "Ed", + "osid": "N00000270", + "pvsid": "26900", + "sortname": "Markey, Edward “Ed” (Sen.) [D-MA]", + "twitterid": "SenMarkey", + "youtubeid": "RepMarkey" + }, + "phone": "202-224-2742", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "MA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.markey.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for New Mexico", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "531 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.tomudall.senate.gov/?p=contact", + "fax": "202-228-3261", + "office": "531 Hart Senate Office Building", + "rss_url": "http://tomudall.senate.gov/rss/?p=blog" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "U000039", + "birthday": "1948-05-18", + "cspanid": 10075, + "firstname": "Tom", + "gender": "male", + "gender_label": "Male", + "lastname": "Udall", + "link": "https://www.govtrack.us/congress/members/tom_udall/400413", + "middlename": "S.", + "name": "Sen. Tom Udall [D-NM]", + "namemod": "", + "nickname": "", + "osid": "N00006561", + "pvsid": "22658", + "sortname": "Udall, Tom (Sen.) [D-NM]", + "twitterid": "SenatorTomUdall", + "youtubeid": "senatortomudall" + }, + "phone": "202-224-6621", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "NM", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.tomudall.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Louisiana", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "520 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.cassidy.senate.gov/contact", + "fax": "202-225-7313", + "office": "520 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "C001075", + "birthday": "1957-09-28", + "cspanid": 1030546, + "firstname": "Bill", + "gender": "male", + "gender_label": "Male", + "lastname": "Cassidy", + "link": "https://www.govtrack.us/congress/members/bill_cassidy/412269", + "middlename": "", + "name": "Sen. Bill Cassidy [R-LA]", + "namemod": "", + "nickname": "", + "osid": "N00030245", + "pvsid": "69494", + "sortname": "Cassidy, Bill (Sen.) [R-LA]", + "twitterid": null, + "youtubeid": "SenatorBillCassidy" + }, + "phone": "202-224-5824", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "LA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.cassidy.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Michigan", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "724 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.peters.senate.gov/contact/email-gary", + "fax": "202-226-2356", + "office": "724 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "P000595", + "birthday": "1958-12-01", + "cspanid": 50199, + "firstname": "Gary", + "gender": "male", + "gender_label": "Male", + "lastname": "Peters", + "link": "https://www.govtrack.us/congress/members/gary_peters/412305", + "middlename": "C.", + "name": "Sen. Gary Peters [D-MI]", + "namemod": "", + "nickname": "", + "osid": "N00029277", + "pvsid": "8749", + "sortname": "Peters, Gary (Sen.) [D-MI]", + "twitterid": "SenGaryPeters", + "youtubeid": "RepGaryPeters" + }, + "phone": "202-224-6221", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "MI", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.peters.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Virginia", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "703 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.warner.senate.gov/public/index.cfm?p=Contact", + "fax": "202-224-6295", + "office": "703 Hart Senate Office Building", + "rss_url": "http://www.warner.senate.gov/public/?a=rss.feed" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "W000805", + "birthday": "1954-12-15", + "cspanid": 7630, + "firstname": "Mark", + "gender": "male", + "gender_label": "Male", + "lastname": "Warner", + "link": "https://www.govtrack.us/congress/members/mark_warner/412321", + "middlename": "", + "name": "Sen. Mark Warner [D-VA]", + "namemod": "", + "nickname": "", + "osid": "N00002097", + "pvsid": "535", + "sortname": "Warner, Mark (Sen.) [D-VA]", + "twitterid": "MarkWarner", + "youtubeid": "SenatorMarkWarner" + }, + "phone": "202-224-2023", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "VA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.warner.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Idaho", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "483 Russell Senate Office Building Washington DC 20510", + "contact_form": "http://www.risch.senate.gov/public/index.cfm?p=Email", + "fax": "202-224-2573", + "office": "483 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "R000584", + "birthday": "1943-05-03", + "cspanid": 1020034, + "firstname": "James", + "gender": "male", + "gender_label": "Male", + "lastname": "Risch", + "link": "https://www.govtrack.us/congress/members/james_risch/412322", + "middlename": "", + "name": "Sen. James Risch [R-ID]", + "namemod": "", + "nickname": "", + "osid": "N00029441", + "pvsid": "2919", + "sortname": "Risch, James (Sen.) [R-ID]", + "twitterid": "SenatorRisch", + "youtubeid": "SenatorJamesRisch" + }, + "phone": "202-224-2752", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "ID", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.risch.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for New Hampshire", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "506 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.shaheen.senate.gov/contact/contact-jeanne", + "fax": "202-228-3194", + "office": "506 Hart Senate Office Building", + "rss_url": "http://www.shaheen.senate.gov/rss/" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "S001181", + "birthday": "1947-01-28", + "cspanid": 22850, + "firstname": "Jeanne", + "gender": "female", + "gender_label": "Female", + "lastname": "Shaheen", + "link": "https://www.govtrack.us/congress/members/jeanne_shaheen/412323", + "middlename": "", + "name": "Sen. Jeanne Shaheen [D-NH]", + "namemod": "", + "nickname": "", + "osid": "N00024790", + "pvsid": "1663", + "sortname": "Shaheen, Jeanne (Sen.) [D-NH]", + "twitterid": "SenatorShaheen", + "youtubeid": "senatorshaheen" + }, + "phone": "202-224-2841", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "NH", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.shaheen.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Oregon", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "313 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.merkley.senate.gov/contact/", + "fax": "202-228-3997", + "office": "313 Hart Senate Office Building", + "rss_url": "http://www.merkley.senate.gov/rss/" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "M001176", + "birthday": "1956-10-24", + "cspanid": 1029842, + "firstname": "Jeff", + "gender": "male", + "gender_label": "Male", + "lastname": "Merkley", + "link": "https://www.govtrack.us/congress/members/jeff_merkley/412325", + "middlename": "", + "name": "Sen. Jeff Merkley [D-OR]", + "namemod": "", + "nickname": "", + "osid": "N00029303", + "pvsid": "23644", + "sortname": "Merkley, Jeff (Sen.) [D-OR]", + "twitterid": "SenJeffMerkley", + "youtubeid": "SenatorJeffMerkley" + }, + "phone": "202-224-3753", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "OR", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.merkley.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Delaware", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "127A Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.coons.senate.gov/contact", + "fax": "202-228-3075", + "office": "127a Russell Senate Office Building", + "rss_url": "http://www.coons.senate.gov/rss/feeds/?type=all" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "C001088", + "birthday": "1963-09-09", + "cspanid": 9269028, + "firstname": "Chris", + "gender": "male", + "gender_label": "Male", + "lastname": "Coons", + "link": "https://www.govtrack.us/congress/members/chris_coons/412390", + "middlename": "Andrew", + "name": "Sen. Chris Coons [D-DE]", + "namemod": "", + "nickname": "", + "osid": "N00031820", + "pvsid": "122834", + "sortname": "Coons, Chris (Sen.) [D-DE]", + "twitterid": "ChrisCoons", + "youtubeid": "senatorchriscoons" + }, + "phone": "202-224-5042", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "DE", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.coons.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Colorado", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "354 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.gardner.senate.gov/contact-cory/email-cory", + "fax": "202-225-5870", + "office": "354 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "G000562", + "birthday": "1974-08-22", + "cspanid": 623308, + "firstname": "Cory", + "gender": "male", + "gender_label": "Male", + "lastname": "Gardner", + "link": "https://www.govtrack.us/congress/members/cory_gardner/412406", + "middlename": "", + "name": "Sen. Cory Gardner [R-CO]", + "namemod": "", + "nickname": "", + "osid": "N00030780", + "pvsid": "30004", + "sortname": "Gardner, Cory (Sen.) [R-CO]", + "twitterid": "SenCoryGardner", + "youtubeid": null + }, + "phone": "202-224-5941", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "CO", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.gardner.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Arkansas", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "124 Russell Senate Office Building Washington DC 20510", + "contact_form": "http://www.cotton.senate.gov/?p=contact", + "office": "124 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "C001095", + "birthday": "1977-05-13", + "cspanid": 63928, + "firstname": "Tom", + "gender": "male", + "gender_label": "Male", + "lastname": "Cotton", + "link": "https://www.govtrack.us/congress/members/tom_cotton/412508", + "middlename": "", + "name": "Sen. Tom Cotton [R-AR]", + "namemod": "", + "nickname": "", + "osid": "N00033363", + "pvsid": "135651", + "sortname": "Cotton, Tom (Sen.) [R-AR]", + "twitterid": "SenTomCotton", + "youtubeid": "RepTomCotton" + }, + "phone": "202-224-2353", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "AR", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.cotton.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Montana", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "320 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.daines.senate.gov/connect/email-steve", + "fax": "202-228-1236", + "office": "320 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "D000618", + "birthday": "1962-08-20", + "cspanid": 1034037, + "firstname": "Steve", + "gender": "male", + "gender_label": "Male", + "lastname": "Daines", + "link": "https://www.govtrack.us/congress/members/steve_daines/412549", + "middlename": "", + "name": "Sen. Steve Daines [R-MT]", + "namemod": "", + "nickname": "", + "osid": "N00033054", + "pvsid": "135720", + "sortname": "Daines, Steve (Sen.) [R-MT]", + "twitterid": "SteveDaines", + "youtubeid": "SteveDainesMT" + }, + "phone": "202-224-2651", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "MT", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.daines.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for New Jersey", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "359 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.booker.senate.gov/?p=contact", + "fax": "202-224-8378", + "office": "359 Dirksen Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "B001288", + "birthday": "1969-04-27", + "cspanid": 84679, + "firstname": "Cory", + "gender": "male", + "gender_label": "Male", + "lastname": "Booker", + "link": "https://www.govtrack.us/congress/members/cory_booker/412598", + "middlename": "Anthony", + "name": "Sen. Cory Booker [D-NJ]", + "namemod": "", + "nickname": "", + "osid": "N00035267", + "pvsid": "76151", + "sortname": "Booker, Cory (Sen.) [D-NJ]", + "twitterid": "SenBooker", + "youtubeid": "SenCoryBooker" + }, + "phone": "202-224-3224", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "NJ", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.booker.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Alaska", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "702 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.sullivan.senate.gov/contact/email", + "office": "702 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "S001198", + "birthday": "1964-11-13", + "cspanid": 1023262, + "firstname": "Dan", + "gender": "male", + "gender_label": "Male", + "lastname": "Sullivan", + "link": "https://www.govtrack.us/congress/members/dan_sullivan/412665", + "middlename": "", + "name": "Sen. Dan Sullivan [R-AK]", + "namemod": "", + "nickname": "", + "osid": "N00035774", + "pvsid": "114964", + "sortname": "Sullivan, Dan (Sen.) [R-AK]", + "twitterid": "SenDanSullivan", + "youtubeid": null + }, + "phone": "202-224-3004", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "AK", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.sullivan.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Georgia", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "455 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.perdue.senate.gov/connect/email", + "office": "455 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "P000612", + "birthday": "1949-12-10", + "cspanid": 75920, + "firstname": "David", + "gender": "male", + "gender_label": "Male", + "lastname": "Perdue", + "link": "https://www.govtrack.us/congress/members/david_perdue/412666", + "middlename": "", + "name": "Sen. David Perdue [R-GA]", + "namemod": "", + "nickname": "", + "osid": "N00035516", + "pvsid": "151330", + "sortname": "Perdue, David (Sen.) [R-GA]", + "twitterid": "sendavidperdue", + "youtubeid": null + }, + "phone": "202-224-3521", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "GA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.perdue.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Iowa", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "111 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.ernst.senate.gov/public/index.cfm/contact", + "office": "111 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "E000295", + "birthday": "1970-07-01", + "cspanid": 75342, + "firstname": "Joni", + "gender": "female", + "gender_label": "Female", + "lastname": "Ernst", + "link": "https://www.govtrack.us/congress/members/joni_ernst/412667", + "middlename": "", + "name": "Sen. Joni Ernst [R-IA]", + "namemod": "", + "nickname": "", + "osid": "N00035483", + "pvsid": "128583", + "sortname": "Ernst, Joni (Sen.) [R-IA]", + "twitterid": "SenJoniErnst", + "youtubeid": null + }, + "phone": "202-224-3254", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "IA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.ernst.senate.gov/public" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for North Carolina", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "185 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.tillis.senate.gov/public/index.cfm/email-me", + "office": "185 Dirksen Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "T000476", + "birthday": "1960-08-30", + "cspanid": 77055, + "firstname": "Thom", + "gender": "male", + "gender_label": "Male", + "lastname": "Tillis", + "link": "https://www.govtrack.us/congress/members/thom_tillis/412668", + "middlename": "", + "name": "Sen. Thom Tillis [R-NC]", + "namemod": "", + "nickname": "", + "osid": "N00035492", + "pvsid": "57717", + "sortname": "Tillis, Thom (Sen.) [R-NC]", + "twitterid": "senthomtillis", + "youtubeid": null + }, + "phone": "202-224-6342", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "NC", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.tillis.senate.gov/public" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for South Dakota", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "502 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.rounds.senate.gov/contact/email-mike", + "office": "502 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "R000605", + "birthday": "1954-10-24", + "cspanid": 78317, + "firstname": "Mike", + "gender": "male", + "gender_label": "Male", + "lastname": "Rounds", + "link": "https://www.govtrack.us/congress/members/mike_rounds/412669", + "middlename": "", + "name": "Sen. Mike Rounds [R-SD]", + "namemod": "", + "nickname": "", + "osid": "N00035187", + "pvsid": "7455", + "sortname": "Rounds, Mike (Sen.) [R-SD]", + "twitterid": "SenatorRounds", + "youtubeid": null + }, + "phone": "202-224-5842", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "SD", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.rounds.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Nebraska", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "136 Russell Senate Office Building Washington DC 20510", + "contact_form": "http://www.sasse.senate.gov/public/index.cfm/email-ben", + "office": "136 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "S001197", + "birthday": "1972-02-22", + "cspanid": 77429, + "firstname": "Benjamin", + "gender": "male", + "gender_label": "Male", + "lastname": "Sasse", + "link": "https://www.govtrack.us/congress/members/benjamin_sasse/412671", + "middlename": "Eric", + "name": "Sen. Benjamin Sasse [R-NE]", + "namemod": "", + "nickname": "", + "osid": "N00035544", + "pvsid": "150182", + "sortname": "Sasse, Benjamin (Sen.) [R-NE]", + "twitterid": "SenSasse", + "youtubeid": null + }, + "phone": "202-224-4224", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "NE", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.sasse.senate.gov/public" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Idaho", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "239 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.crapo.senate.gov/contact", + "fax": "202-228-1375", + "office": "239 Dirksen Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "C000880", + "birthday": "1951-05-20", + "cspanid": 26440, + "firstname": "Michael", + "gender": "male", + "gender_label": "Male", + "lastname": "Crapo", + "link": "https://www.govtrack.us/congress/members/michael_crapo/300030", + "middlename": "D.", + "name": "Sen. Michael Crapo [R-ID]", + "namemod": "", + "nickname": "", + "osid": "N00006267", + "pvsid": "26830", + "sortname": "Crapo, Michael (Sen.) [R-ID]", + "twitterid": "MikeCrapo", + "youtubeid": "senatorcrapo" + }, + "phone": "202-224-6142", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "ID", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.crapo.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Iowa", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "135 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.grassley.senate.gov/contact", + "fax": "202-224-6020", + "office": "135 Hart Senate Office Building", + "rss_url": "http://grassley.senate.gov/customcf/rss_feed.cfm" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "G000386", + "birthday": "1933-09-17", + "cspanid": 1167, + "firstname": "Charles", + "gender": "male", + "gender_label": "Male", + "lastname": "Grassley", + "link": "https://www.govtrack.us/congress/members/charles_grassley/300048", + "middlename": "E.", + "name": "Sen. Charles “Chuck” Grassley [R-IA]", + "namemod": "", + "nickname": "Chuck", + "osid": "N00001758", + "pvsid": "53293", + "sortname": "Grassley, Charles “Chuck” (Sen.) [R-IA]", + "twitterid": "ChuckGrassley", + "youtubeid": "senchuckgrassley" + }, + "phone": "202-224-3744", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "IA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.grassley.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Vermont", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "437 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.leahy.senate.gov/contact/", + "fax": "202-224-3479", + "office": "437 Russell Senate Office Building", + "rss_url": "http://www.leahy.senate.gov/rss/feeds/press/" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "L000174", + "birthday": "1940-03-31", + "cspanid": 1552, + "firstname": "Patrick", + "gender": "male", + "gender_label": "Male", + "lastname": "Leahy", + "link": "https://www.govtrack.us/congress/members/patrick_leahy/300065", + "middlename": "J.", + "name": "Sen. Patrick Leahy [D-VT]", + "namemod": "", + "nickname": "", + "osid": "N00009918", + "pvsid": "53353", + "sortname": "Leahy, Patrick (Sen.) [D-VT]", + "twitterid": "SenatorLeahy", + "youtubeid": "SenatorPatrickLeahy" + }, + "phone": "202-224-4242", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "VT", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.leahy.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Alaska", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "522 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.murkowski.senate.gov/public/index.cfm/contact", + "fax": "202-224-5301", + "office": "522 Hart Senate Office Building", + "rss_url": "http://www.murkowski.senate.gov/public/?a=rss.feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "M001153", + "birthday": "1957-05-22", + "cspanid": 1004138, + "firstname": "Lisa", + "gender": "female", + "gender_label": "Female", + "lastname": "Murkowski", + "link": "https://www.govtrack.us/congress/members/lisa_murkowski/300075", + "middlename": "A.", + "name": "Sen. Lisa Murkowski [R-AK]", + "namemod": "", + "nickname": "", + "osid": "N00026050", + "pvsid": "15841", + "sortname": "Murkowski, Lisa (Sen.) [R-AK]", + "twitterid": "LisaMurkowski", + "youtubeid": "senatormurkowski" + }, + "phone": "202-224-6665", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "AK", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.murkowski.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Washington", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "154 Russell Senate Office Building Washington DC 20510", + "contact_form": "http://www.murray.senate.gov/public/index.cfm/contactme", + "fax": "202-224-0238", + "office": "154 Russell Senate Office Building", + "rss_url": "http://www.murray.senate.gov/public/?a=rss.feed" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "M001111", + "birthday": "1950-10-11", + "cspanid": 25277, + "firstname": "Patty", + "gender": "female", + "gender_label": "Female", + "lastname": "Murray", + "link": "https://www.govtrack.us/congress/members/patty_murray/300076", + "middlename": "", + "name": "Sen. Patty Murray [D-WA]", + "namemod": "", + "nickname": "", + "osid": "N00007876", + "pvsid": "53358", + "sortname": "Murray, Patty (Sen.) [D-WA]", + "twitterid": "PattyMurray", + "youtubeid": "SenatorPattyMurray" + }, + "phone": "202-224-2621", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "WA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.murray.senate.gov/public" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for New York", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "322 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.schumer.senate.gov/contact/email-chuck", + "fax": "202-228-3027", + "office": "322 Hart Senate Office Building" + }, + "leadership_title": "Minority Leader", + "party": "Democrat", + "person": { + "bioguideid": "S000148", + "birthday": "1950-11-23", + "cspanid": 5929, + "firstname": "Charles", + "gender": "male", + "gender_label": "Male", + "lastname": "Schumer", + "link": "https://www.govtrack.us/congress/members/charles_schumer/300087", + "middlename": "E.", + "name": "Sen. Charles “Chuck” Schumer [D-NY]", + "namemod": "", + "nickname": "Chuck", + "osid": "N00001093", + "pvsid": "26976", + "sortname": "Schumer, Charles “Chuck” (Sen.) [D-NY]", + "twitterid": "SenSchumer", + "youtubeid": "SenatorSchumer" + }, + "phone": "202-224-6542", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "NY", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.schumer.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Alabama", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "304 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.shelby.senate.gov/public/index.cfm/emailsenatorshelby", + "fax": "202-224-3416", + "office": "304 Russell Senate Office Building", + "rss_url": "http://www.shelby.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "S000320", + "birthday": "1934-05-06", + "cspanid": 1859, + "firstname": "Richard", + "gender": "male", + "gender_label": "Male", + "lastname": "Shelby", + "link": "https://www.govtrack.us/congress/members/richard_shelby/300089", + "middlename": "C.", + "name": "Sen. Richard Shelby [R-AL]", + "namemod": "", + "nickname": "", + "osid": "N00009920", + "pvsid": "53266", + "sortname": "Shelby, Richard (Sen.) [R-AL]", + "twitterid": "SenShelby", + "youtubeid": "SenatorRichardShelby" + }, + "phone": "202-224-5744", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "AL", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.shelby.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Oregon", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "221 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.wyden.senate.gov/contact/", + "fax": "202-228-2717", + "office": "221 Dirksen Senate Office Building", + "rss_url": "http://www.wyden.senate.gov/rss/feeds/?type=all&" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "W000779", + "birthday": "1949-05-03", + "cspanid": 1962, + "firstname": "Ron", + "gender": "male", + "gender_label": "Male", + "lastname": "Wyden", + "link": "https://www.govtrack.us/congress/members/ron_wyden/300100", + "middlename": "", + "name": "Sen. Ron Wyden [D-OR]", + "namemod": "", + "nickname": "", + "osid": "N00007724", + "pvsid": "27036", + "sortname": "Wyden, Ron (Sen.) [D-OR]", + "twitterid": "RonWyden", + "youtubeid": "senronwyden" + }, + "phone": "202-224-5244", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "OR", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.wyden.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Missouri", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "260 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.blunt.senate.gov/public/index.cfm/contact-roy", + "fax": "202-224-8149", + "office": "260 Russell Senate Office Building", + "rss_url": "http://www.blunt.senate.gov/public/?a=rss.feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "B000575", + "birthday": "1950-01-10", + "cspanid": 45465, + "firstname": "Roy", + "gender": "male", + "gender_label": "Male", + "lastname": "Blunt", + "link": "https://www.govtrack.us/congress/members/roy_blunt/400034", + "middlename": "", + "name": "Sen. Roy Blunt [R-MO]", + "namemod": "", + "nickname": "", + "osid": "N00005195", + "pvsid": "418", + "sortname": "Blunt, Roy (Sen.) [R-MO]", + "twitterid": "RoyBlunt", + "youtubeid": "SenatorBlunt" + }, + "phone": "202-224-5721", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "MO", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.blunt.senate.gov/public" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Arkansas", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "141 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.boozman.senate.gov/public/index.cfm/contact", + "fax": "202-228-1371", + "office": "141 Hart Senate Office Building", + "rss_url": "http://www.boozman.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "B001236", + "birthday": "1950-12-10", + "cspanid": 92069, + "firstname": "John", + "gender": "male", + "gender_label": "Male", + "lastname": "Boozman", + "link": "https://www.govtrack.us/congress/members/john_boozman/400040", + "middlename": "", + "name": "Sen. John Boozman [R-AR]", + "namemod": "", + "nickname": "", + "osid": "N00013873", + "pvsid": "27958", + "sortname": "Boozman, John (Sen.) [R-AR]", + "twitterid": "JohnBoozman", + "youtubeid": "BoozmanPressOffice" + }, + "phone": "202-224-4843", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "AR", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.boozman.senate.gov/public" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for North Carolina", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "217 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.burr.senate.gov/contact/email", + "fax": "202-228-2981", + "office": "217 Russell Senate Office Building", + "rss_url": "http://www.burr.senate.gov/public/index.cfm?fuseaction=rss.feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "B001135", + "birthday": "1955-11-30", + "cspanid": 31054, + "firstname": "Richard", + "gender": "male", + "gender_label": "Male", + "lastname": "Burr", + "link": "https://www.govtrack.us/congress/members/richard_burr/400054", + "middlename": "M.", + "name": "Sen. Richard Burr [R-NC]", + "namemod": "", + "nickname": "", + "osid": "N00002221", + "pvsid": "21787", + "sortname": "Burr, Richard (Sen.) [R-NC]", + "twitterid": "SenatorBurr", + "youtubeid": "SenatorRichardBurr" + }, + "phone": "202-224-3154", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "NC", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.burr.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Georgia", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "131 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.isakson.senate.gov/public/index.cfm/email-me", + "fax": "202-228-0724", + "office": "131 Russell Senate Office Building", + "rss_url": "http://www.isakson.senate.gov/public/?a=RSS.Feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "I000055", + "birthday": "1944-12-28", + "cspanid": 59135, + "firstname": "John", + "gender": "male", + "gender_label": "Male", + "lastname": "Isakson", + "link": "https://www.govtrack.us/congress/members/john_isakson/400194", + "middlename": "H.", + "name": "Sen. John “Johnny” Isakson [R-GA]", + "namemod": "", + "nickname": "Johnny", + "osid": "N00002593", + "pvsid": "1721", + "sortname": "Isakson, John “Johnny” (Sen.) [R-GA]", + "twitterid": "SenatorIsakson", + "youtubeid": "SenatorIsakson" + }, + "phone": "202-224-3643", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "GA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.isakson.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Kansas", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "521 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.moran.senate.gov/public/index.cfm/e-mail-jerry", + "fax": "202-228-6966", + "office": "521 Dirksen Senate Office Building", + "rss_url": "http://www.moran.senate.gov/public/index.cfm/rss/feed/" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "M000934", + "birthday": "1954-05-29", + "cspanid": 45469, + "firstname": "Jerry", + "gender": "male", + "gender_label": "Male", + "lastname": "Moran", + "link": "https://www.govtrack.us/congress/members/jerry_moran/400284", + "middlename": "", + "name": "Sen. Jerry Moran [R-KS]", + "namemod": "", + "nickname": "", + "osid": "N00005282", + "pvsid": "542", + "sortname": "Moran, Jerry (Sen.) [R-KS]", + "twitterid": "JerryMoran", + "youtubeid": "senatorjerrymoran" + }, + "phone": "202-224-6521", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "KS", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.moran.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Ohio", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "448 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.portman.senate.gov/public/index.cfm/contact?p=contact-form", + "office": "448 Russell Senate Office Building", + "rss_url": "http://www.portman.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "P000449", + "birthday": "1955-12-19", + "cspanid": 31819, + "firstname": "Robert", + "gender": "male", + "gender_label": "Male", + "lastname": "Portman", + "link": "https://www.govtrack.us/congress/members/robert_portman/400325", + "middlename": "J.", + "name": "Sen. Robert “Rob” Portman [R-OH]", + "namemod": "", + "nickname": "Rob", + "osid": "N00003682", + "pvsid": "27008", + "sortname": "Portman, Robert “Rob” (Sen.) [R-OH]", + "twitterid": "SenRobPortman", + "youtubeid": "SenRobPortman" + }, + "phone": "202-224-3353", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "OH", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.portman.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Pennsylvania", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "248 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.toomey.senate.gov/?p=contact", + "fax": "202-228-0284", + "office": "248 Russell Senate Office Building", + "rss_url": "http://toomey.senate.gov/rss/?p=hot_topic" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "T000461", + "birthday": "1961-11-17", + "cspanid": 7958, + "firstname": "Patrick", + "gender": "male", + "gender_label": "Male", + "lastname": "Toomey", + "link": "https://www.govtrack.us/congress/members/patrick_toomey/400408", + "middlename": "J.", + "name": "Sen. Patrick “Pat” Toomey [R-PA]", + "namemod": "", + "nickname": "Pat", + "osid": "N00001489", + "pvsid": "24096", + "sortname": "Toomey, Patrick “Pat” (Sen.) [R-PA]", + "twitterid": "SenToomey", + "youtubeid": "sentoomey" + }, + "phone": "202-224-4254", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "PA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.toomey.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Maryland", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "110 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.vanhollen.senate.gov/contact/email", + "fax": "202-225-0375", + "office": "110 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "V000128", + "birthday": "1959-01-10", + "cspanid": 20756, + "firstname": "Chris", + "gender": "male", + "gender_label": "Male", + "lastname": "Van Hollen", + "link": "https://www.govtrack.us/congress/members/chris_van_hollen/400415", + "middlename": "", + "name": "Sen. Chris Van Hollen [D-MD]", + "namemod": "Jr.", + "nickname": "", + "osid": "N00013820", + "pvsid": "6098", + "sortname": "Van Hollen, Chris (Sen.) [D-MD]", + "twitterid": "ChrisVanHollen", + "youtubeid": "RepChrisVanHollen" + }, + "phone": "202-224-4654", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "MD", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.vanhollen.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for South Dakota", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "511 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "http://www.thune.senate.gov/public/index.cfm/contact", + "fax": "202-228-5429", + "office": "511 Dirksen Senate Office Building", + "rss_url": "http://www.thune.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "T000250", + "birthday": "1961-01-07", + "cspanid": 45552, + "firstname": "John", + "gender": "male", + "gender_label": "Male", + "lastname": "Thune", + "link": "https://www.govtrack.us/congress/members/john_thune/400546", + "middlename": "", + "name": "Sen. John Thune [R-SD]", + "namemod": "", + "nickname": "", + "osid": "N00004572", + "pvsid": "398", + "sortname": "Thune, John (Sen.) [R-SD]", + "twitterid": "SenJohnThune", + "youtubeid": "johnthune" + }, + "phone": "202-224-2321", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "SD", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.thune.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Colorado", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "261 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.bennet.senate.gov/public/index.cfm/contact", + "fax": "202-228-5097", + "office": "261 Russell Senate Office Building", + "rss_url": "http://www.bennet.senate.gov/rss/feeds/?type=news" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "B001267", + "birthday": "1964-11-28", + "cspanid": 1031622, + "firstname": "Michael", + "gender": "male", + "gender_label": "Male", + "lastname": "Bennet", + "link": "https://www.govtrack.us/congress/members/michael_bennet/412330", + "middlename": "F.", + "name": "Sen. Michael Bennet [D-CO]", + "namemod": "", + "nickname": "", + "osid": "N00030608", + "pvsid": "110942", + "sortname": "Bennet, Michael (Sen.) [D-CO]", + "twitterid": "SenBennetCo", + "youtubeid": "SenatorBennet" + }, + "phone": "202-224-5852", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "CO", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.bennet.senate.gov/public" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Indiana", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "400 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.young.senate.gov/contact", + "fax": "202-226-6866", + "office": "400 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "Y000064", + "birthday": "1972-08-24", + "cspanid": 1033743, + "firstname": "Todd", + "gender": "male", + "gender_label": "Male", + "lastname": "Young", + "link": "https://www.govtrack.us/congress/members/todd_young/412428", + "middlename": "C.", + "name": "Sen. Todd Young [R-IN]", + "namemod": "", + "nickname": "", + "osid": "N00030670", + "pvsid": "120345", + "sortname": "Young, Todd (Sen.) [R-IN]", + "twitterid": "SenToddYoung", + "youtubeid": "RepToddYoung" + }, + "phone": "202-224-5623", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "IN", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.young.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Oklahoma", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "316 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.lankford.senate.gov/contact/email", + "office": "316 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "L000575", + "birthday": "1968-03-04", + "cspanid": 1033847, + "firstname": "James", + "gender": "male", + "gender_label": "Male", + "lastname": "Lankford", + "link": "https://www.govtrack.us/congress/members/james_lankford/412464", + "middlename": "", + "name": "Sen. James Lankford [R-OK]", + "namemod": "", + "nickname": "", + "osid": "N00031129", + "pvsid": "124938", + "sortname": "Lankford, James (Sen.) [R-OK]", + "twitterid": "SenatorLankford", + "youtubeid": "SenatorLankford" + }, + "phone": "202-224-5754", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "OK", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.lankford.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for South Carolina", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "717 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.scott.senate.gov/contact/email-me", + "fax": "202-225-3407", + "office": "717 Hart Senate Office Building", + "rss_url": "http://www.scott.senate.gov/rss.xml" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "S001184", + "birthday": "1965-09-19", + "cspanid": 623506, + "firstname": "Tim", + "gender": "male", + "gender_label": "Male", + "lastname": "Scott", + "link": "https://www.govtrack.us/congress/members/tim_scott/412471", + "middlename": "", + "name": "Sen. Tim Scott [R-SC]", + "namemod": "", + "nickname": "", + "osid": "N00031782", + "pvsid": "11940", + "sortname": "Scott, Tim (Sen.) [R-SC]", + "twitterid": "SenatorTimScott", + "youtubeid": "SenatorTimScott" + }, + "phone": "202-224-6121", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "SC", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.scott.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Connecticut", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "706 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.blumenthal.senate.gov/contact/", + "fax": "202-224-9673", + "office": "706 Hart Senate Office Building", + "rss_url": "http://www.blumenthal.senate.gov/rss/feeds/?type=all" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "B001277", + "birthday": "1946-02-13", + "cspanid": 21799, + "firstname": "Richard", + "gender": "male", + "gender_label": "Male", + "lastname": "Blumenthal", + "link": "https://www.govtrack.us/congress/members/richard_blumenthal/412490", + "middlename": "", + "name": "Sen. Richard Blumenthal [D-CT]", + "namemod": "", + "nickname": "", + "osid": "N00031685", + "pvsid": "1568", + "sortname": "Blumenthal, Richard (Sen.) [D-CT]", + "twitterid": "SenBlumenthal", + "youtubeid": "SenatorBlumenthal" + }, + "phone": "202-224-2823", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "CT", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.blumenthal.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Florida", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "284 Russell Senate Office Building Washington DC 20510", + "contact_form": "http://www.rubio.senate.gov/public/index.cfm/contact", + "fax": "202-228-0285", + "office": "284 Russell Senate Office Building", + "rss_url": "http://www.rubio.senate.gov/public/?a=rss.feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "R000595", + "birthday": "1971-05-28", + "cspanid": 87599, + "firstname": "Marco", + "gender": "male", + "gender_label": "Male", + "lastname": "Rubio", + "link": "https://www.govtrack.us/congress/members/marco_rubio/412491", + "middlename": "", + "name": "Sen. Marco Rubio [R-FL]", + "namemod": "", + "nickname": "", + "osid": "N00030612", + "pvsid": "1601", + "sortname": "Rubio, Marco (Sen.) [R-FL]", + "twitterid": "SenRubioPress", + "youtubeid": "SenatorMarcoRubio" + }, + "phone": "202-224-3041", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "FL", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.rubio.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Kentucky", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "167 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.paul.senate.gov/connect/email-rand", + "fax": "202-228-1373", + "office": "167 Russell Senate Office Building", + "rss_url": "http://paul.senate.gov/rss/?p=news" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "P000603", + "birthday": "1963-01-07", + "cspanid": 9265241, + "firstname": "Rand", + "gender": "male", + "gender_label": "Male", + "lastname": "Paul", + "link": "https://www.govtrack.us/congress/members/rand_paul/412492", + "middlename": "", + "name": "Sen. Rand Paul [R-KY]", + "namemod": "", + "nickname": "", + "osid": "N00030836", + "pvsid": "117285", + "sortname": "Paul, Rand (Sen.) [R-KY]", + "twitterid": "RandPaul", + "youtubeid": "SenatorRandPaul" + }, + "phone": "202-224-4343", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "KY", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.paul.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for North Dakota", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "338 Russell Senate Office Building Washington DC 20510", + "contact_form": "http://www.hoeven.senate.gov/public/index.cfm/email-the-senator", + "fax": "202-224-7999", + "office": "338 Russell Senate Office Building", + "rss_url": "http://www.hoeven.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "H001061", + "birthday": "1957-03-13", + "cspanid": 85233, + "firstname": "John", + "gender": "male", + "gender_label": "Male", + "lastname": "Hoeven", + "link": "https://www.govtrack.us/congress/members/john_hoeven/412494", + "middlename": "", + "name": "Sen. John Hoeven [R-ND]", + "namemod": "", + "nickname": "", + "osid": "N00031688", + "pvsid": "41788", + "sortname": "Hoeven, John (Sen.) [R-ND]", + "twitterid": "SenJohnHoeven", + "youtubeid": "senatorjohnhoevennd" + }, + "phone": "202-224-2551", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "ND", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.hoeven.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Utah", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "361A Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.lee.senate.gov/public/index.cfm/contact", + "office": "361a Russell Senate Office Building", + "rss_url": "http://www.lee.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "L000577", + "birthday": "1971-06-04", + "cspanid": 9267977, + "firstname": "Mike", + "gender": "male", + "gender_label": "Male", + "lastname": "Lee", + "link": "https://www.govtrack.us/congress/members/mike_lee/412495", + "middlename": "", + "name": "Sen. Mike Lee [R-UT]", + "namemod": "", + "nickname": "", + "osid": "N00031696", + "pvsid": "66395", + "sortname": "Lee, Mike (Sen.) [R-UT]", + "twitterid": "SenMikeLee", + "youtubeid": "senatormikelee" + }, + "phone": "202-224-5444", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "UT", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.lee.senate.gov/public" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Wisconsin", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "328 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.ronjohnson.senate.gov/public/index.cfm/email-the-senator", + "fax": "920-230-7262", + "office": "328 Hart Senate Office Building", + "rss_url": "http://www.ronjohnson.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "J000293", + "birthday": "1955-04-08", + "cspanid": 62835, + "firstname": "Ron", + "gender": "male", + "gender_label": "Male", + "lastname": "Johnson", + "link": "https://www.govtrack.us/congress/members/ron_johnson/412496", + "middlename": "", + "name": "Sen. Ron Johnson [R-WI]", + "namemod": "", + "nickname": "", + "osid": "N00032546", + "pvsid": "126217", + "sortname": "Johnson, Ron (Sen.) [R-WI]", + "twitterid": "SenRonJohnson", + "youtubeid": "SenatorRonJohnson" + }, + "phone": "202-224-5323", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "WI", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.ronjohnson.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Hawaii", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "722 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.schatz.senate.gov/contact", + "fax": "202-228-1153", + "office": "722 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "S001194", + "birthday": "1972-10-20", + "cspanid": 87784, + "firstname": "Brian", + "gender": "male", + "gender_label": "Male", + "lastname": "Schatz", + "link": "https://www.govtrack.us/congress/members/brian_schatz/412507", + "middlename": "Emanuel", + "name": "Sen. Brian Schatz [D-HI]", + "namemod": "", + "nickname": "", + "osid": "N00028138", + "pvsid": "17852", + "sortname": "Schatz, Brian (Sen.) [D-HI]", + "twitterid": "SenBrianSchatz", + "youtubeid": "senbrianschatz" + }, + "phone": "202-224-3934", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "HI", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.schatz.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Illinois", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "524 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.duckworth.senate.gov/content/contact-senator", + "office": "524 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "D000622", + "birthday": "1968-03-12", + "cspanid": 94484, + "firstname": "Tammy", + "gender": "female", + "gender_label": "Female", + "lastname": "Duckworth", + "link": "https://www.govtrack.us/congress/members/tammy_duckworth/412533", + "middlename": "", + "name": "Sen. Tammy Duckworth [D-IL]", + "namemod": "", + "nickname": "", + "osid": "N00027860", + "pvsid": "57442", + "sortname": "Duckworth, Tammy (Sen.) [D-IL]", + "twitterid": "SenDuckworth", + "youtubeid": "repduckworth" + }, + "phone": "202-224-2854", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "IL", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.duckworth.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for California", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "112 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.harris.senate.gov/contact", + "office": "112 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "H001075", + "birthday": "1964-10-20", + "cspanid": 1018696, + "firstname": "Kamala", + "gender": "female", + "gender_label": "Female", + "lastname": "Harris", + "link": "https://www.govtrack.us/congress/members/kamala_harris/412678", + "middlename": "", + "name": "Sen. Kamala Harris [D-CA]", + "namemod": "", + "nickname": "", + "osid": "N00036915", + "pvsid": "120012", + "sortname": "Harris, Kamala (Sen.) [D-CA]", + "twitterid": "SenKamalaHarris", + "youtubeid": null + }, + "phone": "202-224-3553", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "CA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.harris.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Louisiana", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "383 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.kennedy.senate.gov/public/email-me", + "office": "383 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "K000393", + "birthday": "1951-11-21", + "cspanid": 1011723, + "firstname": "John", + "gender": "male", + "gender_label": "Male", + "lastname": "Kennedy", + "link": "https://www.govtrack.us/congress/members/john_kennedy/412679", + "middlename": "Neely", + "name": "Sen. John Kennedy [R-LA]", + "namemod": "", + "nickname": "", + "osid": "N00026823", + "pvsid": "35496", + "sortname": "Kennedy, John (Sen.) [R-LA]", + "twitterid": "SenJohnKennedy", + "youtubeid": null + }, + "phone": "202-224-4623", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "LA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.kennedy.senate.gov/public" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for New Hampshire", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "330 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.hassan.senate.gov/content/contact-senator", + "office": "330 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "H001076", + "birthday": "1958-02-27", + "cspanid": 67481, + "firstname": "Margaret", + "gender": "female", + "gender_label": "Female", + "lastname": "Hassan", + "link": "https://www.govtrack.us/congress/members/margaret_hassan/412680", + "middlename": "Wood", + "name": "Sen. Margaret “Maggie” Hassan [D-NH]", + "namemod": "", + "nickname": "Maggie", + "osid": "N00038397", + "pvsid": "42552", + "sortname": "Hassan, Margaret “Maggie” (Sen.) [D-NH]", + "twitterid": "Senatorhassan", + "youtubeid": null + }, + "phone": "202-224-3324", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "NH", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.hassan.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Nevada", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "204 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.cortezmasto.senate.gov/contact", + "office": "204 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "C001113", + "birthday": "1964-03-29", + "cspanid": 105698, + "firstname": "Catherine", + "gender": "female", + "gender_label": "Female", + "lastname": "Cortez Masto", + "link": "https://www.govtrack.us/congress/members/catherine_cortez_masto/412681", + "middlename": "", + "name": "Sen. Catherine Cortez Masto [D-NV]", + "namemod": "", + "nickname": "", + "osid": "N00037161", + "pvsid": "69579", + "sortname": "Cortez Masto, Catherine (Sen.) [D-NV]", + "twitterid": "sencortezmasto", + "youtubeid": null + }, + "phone": "202-224-3542", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "NV", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.cortezmasto.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Alabama", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "326 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.jones.senate.gov/content/contact-senator", + "office": "326 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "J000300", + "birthday": "1954-05-04", + "cspanid": 1024592, + "firstname": "Doug", + "gender": "male", + "gender_label": "Male", + "lastname": "Jones", + "link": "https://www.govtrack.us/congress/members/doug_jones/412741", + "middlename": "", + "name": "Sen. Doug Jones [D-AL]", + "namemod": "", + "nickname": "", + "osid": "N00024817", + "pvsid": "176464", + "sortname": "Jones, Doug (Sen.) [D-AL]", + "twitterid": "sendougjones", + "youtubeid": null + }, + "phone": "202-224-4124", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2018-01-03", + "state": "AL", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.jones.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115 + ], + "current": true, + "description": "Junior Senator for Mississippi", + "district": null, + "enddate": "2018-11-27", + "extra": { + "address": "G12 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.hydesmith.senate.gov/content/contact-senator", + "end-type": "special-election", + "how": "appointment", + "office": "G12 Dirksen Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "H001079", + "birthday": "1959-05-10", + "cspanid": null, + "firstname": "Cindy", + "gender": "female", + "gender_label": "Female", + "lastname": "Hyde-Smith", + "link": "https://www.govtrack.us/congress/members/cindy_hyde_smith/412743", + "middlename": "", + "name": "Sen. Cindy Hyde-Smith [R-MS]", + "namemod": "", + "nickname": "", + "osid": "N00043298", + "pvsid": null, + "sortname": "Hyde-Smith, Cindy (Sen.) [R-MS]", + "twitterid": "SenHydeSmith", + "youtubeid": null + }, + "phone": "202-224-5054", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2018-04-09", + "state": "MS", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.hydesmith.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Arizona", + "district": null, + "enddate": "2020-11-03", + "extra": { + "address": "G12 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.kyl.senate.gov/content/contact-senator-kyl", + "end-type": "special-election", + "fax": "202-228-2862", + "how": "appointment", + "office": "G12 Dirksen Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "K000352", + "birthday": "1942-04-25", + "cspanid": null, + "firstname": "Jon", + "gender": "male", + "gender_label": "Male", + "lastname": "Kyl", + "link": "https://www.govtrack.us/congress/members/jon_kyl/300062", + "middlename": "", + "name": "Sen. Jon Kyl [R-AZ]", + "namemod": "", + "nickname": "", + "osid": "N00006406", + "pvsid": "26721", + "sortname": "Kyl, Jon (Sen.) [R-AZ]", + "twitterid": null, + "youtubeid": null + }, + "phone": "202-224-2235", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2018-09-05", + "state": "AZ", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.kyl.senate.gov" + }, + { + "caucus": null, + "congress_numbers": [ + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Minnesota", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "309 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.smith.senate.gov/content/contact-senator", + "office": "309 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "S001203", + "birthday": "1958-03-04", + "cspanid": 111313, + "firstname": "Tina", + "gender": "female", + "gender_label": "Female", + "lastname": "Smith", + "link": "https://www.govtrack.us/congress/members/tina_smith/412742", + "middlename": "Flint", + "name": "Sen. Tina Smith [D-MN]", + "namemod": "", + "nickname": "", + "osid": "N00042353", + "pvsid": "152968", + "sortname": "Smith, Tina (Sen.) [D-MN]", + "twitterid": "SenTinaSmith", + "youtubeid": null + }, + "phone": "202-224-5641", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2018-11-07", + "state": "MN", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.smith.senate.gov" + } + ] +} \ No newline at end of file diff --git a/tests/data/sample_json_lines.json b/tests/data/sample_json_lines.json new file mode 100644 index 0000000..1cecaee --- /dev/null +++ b/tests/data/sample_json_lines.json @@ -0,0 +1,5145 @@ +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Wisconsin", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "709 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.baldwin.senate.gov/feedback", + "fax": "202-225-6942", + "office": "709 Hart Senate Office Building", + "rss_url": "http://www.baldwin.senate.gov/rss/feeds/?type=all" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "B001230", + "birthday": "1962-02-11", + "cspanid": 57884, + "firstname": "Tammy", + "gender": "female", + "gender_label": "Female", + "lastname": "Baldwin", + "link": "https://www.govtrack.us/congress/members/tammy_baldwin/400013", + "middlename": "", + "name": "Sen. Tammy Baldwin [D-WI]", + "namemod": "", + "nickname": "", + "osid": "N00004367", + "pvsid": "3470", + "sortname": "Baldwin, Tammy (Sen.) [D-WI]", + "twitterid": "SenatorBaldwin", + "youtubeid": "witammybaldwin" + }, + "phone": "202-224-5653", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "WI", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.baldwin.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Ohio", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "713 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.brown.senate.gov/contact/", + "fax": "202-228-6321", + "office": "713 Hart Senate Office Building", + "rss_url": "http://www.brown.senate.gov/rss/feeds/?type=all&" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "B000944", + "birthday": "1952-11-09", + "cspanid": 5051, + "firstname": "Sherrod", + "gender": "male", + "gender_label": "Male", + "lastname": "Brown", + "link": "https://www.govtrack.us/congress/members/sherrod_brown/400050", + "middlename": "", + "name": "Sen. Sherrod Brown [D-OH]", + "namemod": "", + "nickname": "", + "osid": "N00003535", + "pvsid": "27018", + "sortname": "Brown, Sherrod (Sen.) [D-OH]", + "twitterid": "SenSherrodBrown", + "youtubeid": "SherrodBrownOhio" + }, + "phone": "202-224-2315", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "OH", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.brown.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Maryland", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "509 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.cardin.senate.gov/contact/", + "fax": "202-224-1651", + "office": "509 Hart Senate Office Building", + "rss_url": "http://www.cardin.senate.gov/rss/feeds/?type=all" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "C000141", + "birthday": "1943-10-05", + "cspanid": 4004, + "firstname": "Benjamin", + "gender": "male", + "gender_label": "Male", + "lastname": "Cardin", + "link": "https://www.govtrack.us/congress/members/benjamin_cardin/400064", + "middlename": "L.", + "name": "Sen. Benjamin Cardin [D-MD]", + "namemod": "", + "nickname": "", + "osid": "N00001955", + "pvsid": "26888", + "sortname": "Cardin, Benjamin (Sen.) [D-MD]", + "twitterid": "SenatorCardin", + "youtubeid": "senatorcardin" + }, + "phone": "202-224-4524", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "MD", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.cardin.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Arizona", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "413 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.flake.senate.gov/public/index.cfm/contact-jeff", + "fax": "202-226-4386", + "office": "413 Russell Senate Office Building", + "rss_url": "http://www.flake.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "F000444", + "birthday": "1962-12-31", + "cspanid": 87582, + "firstname": "Jeff", + "gender": "male", + "gender_label": "Male", + "lastname": "Flake", + "link": "https://www.govtrack.us/congress/members/jeff_flake/400134", + "middlename": "", + "name": "Sen. Jeff Flake [R-AZ]", + "namemod": "", + "nickname": "", + "osid": "N00009573", + "pvsid": "28128", + "sortname": "Flake, Jeff (Sen.) [R-AZ]", + "twitterid": "JeffFlake", + "youtubeid": "flakeoffice" + }, + "phone": "202-224-4521", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "AZ", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.flake.senate.gov/public" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for New Jersey", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "528 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.menendez.senate.gov/contact", + "fax": "202-228-2197", + "office": "528 Hart Senate Office Building", + "rss_url": "http://www.menendez.senate.gov/rss/feeds/index.cfm?type=news" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "M000639", + "birthday": "1954-01-01", + "cspanid": 29608, + "firstname": "Robert", + "gender": "male", + "gender_label": "Male", + "lastname": "Menéndez", + "link": "https://www.govtrack.us/congress/members/robert_menendez/400272", + "middlename": "", + "name": "Sen. Robert “Bob” Menéndez [D-NJ]", + "namemod": "", + "nickname": "Bob", + "osid": "N00000699", + "pvsid": "26961", + "sortname": "Menéndez, Robert “Bob” (Sen.) [D-NJ]", + "twitterid": "SenatorMenendez", + "youtubeid": "SenatorMenendezNJ" + }, + "phone": "202-224-4744", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "NJ", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.menendez.senate.gov" +}, +{ + "caucus": "Democrat", + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Vermont", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "332 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "http://www.sanders.senate.gov/contact/", + "fax": "202-228-0776", + "office": "332 Dirksen Senate Office Building", + "rss_url": "http://www.sanders.senate.gov/rss/" + }, + "leadership_title": null, + "party": "Independent", + "person": { + "bioguideid": "S000033", + "birthday": "1941-09-08", + "cspanid": 994, + "firstname": "Bernard", + "gender": "male", + "gender_label": "Male", + "lastname": "Sanders", + "link": "https://www.govtrack.us/congress/members/bernard_sanders/400357", + "middlename": "", + "name": "Sen. Bernard “Bernie” Sanders [I-VT]", + "namemod": "", + "nickname": "Bernie", + "osid": "N00000528", + "pvsid": "27110", + "sortname": "Sanders, Bernard “Bernie” (Sen.) [I-VT]", + "twitterid": "SenSanders", + "youtubeid": "senatorsanders" + }, + "phone": "202-224-5141", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "VT", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.sanders.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Washington", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "511 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.cantwell.senate.gov/public/index.cfm/email-maria", + "fax": "202-228-0514", + "office": "511 Hart Senate Office Building", + "rss_url": "http://www.cantwell.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "C000127", + "birthday": "1958-10-13", + "cspanid": 26137, + "firstname": "Maria", + "gender": "female", + "gender_label": "Female", + "lastname": "Cantwell", + "link": "https://www.govtrack.us/congress/members/maria_cantwell/300018", + "middlename": "", + "name": "Sen. Maria Cantwell [D-WA]", + "namemod": "", + "nickname": "", + "osid": "N00007836", + "pvsid": "27122", + "sortname": "Cantwell, Maria (Sen.) [D-WA]", + "twitterid": "SenatorCantwell", + "youtubeid": "SenatorCantwell" + }, + "phone": "202-224-3441", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "WA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.cantwell.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Delaware", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "513 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.carper.senate.gov/public/index.cfm/email-senator-carper", + "fax": "202-228-2190", + "office": "513 Hart Senate Office Building", + "rss_url": "http://www.carper.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "C000174", + "birthday": "1947-01-23", + "cspanid": 663, + "firstname": "Thomas", + "gender": "male", + "gender_label": "Male", + "lastname": "Carper", + "link": "https://www.govtrack.us/congress/members/thomas_carper/300019", + "middlename": "Richard", + "name": "Sen. Thomas Carper [D-DE]", + "namemod": "", + "nickname": "", + "osid": "N00012508", + "pvsid": "22421", + "sortname": "Carper, Thomas (Sen.) [D-DE]", + "twitterid": "SenatorCarper", + "youtubeid": "senatorcarper" + }, + "phone": "202-224-2441", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "DE", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.carper.senate.gov/public" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for California", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "331 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.feinstein.senate.gov/public/index.cfm/e-mail-me", + "fax": "202-228-3954", + "office": "331 Hart Senate Office Building", + "rss_url": "http://www.feinstein.senate.gov/public/?a=rss.feed" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "F000062", + "birthday": "1933-06-22", + "cspanid": 13061, + "firstname": "Dianne", + "gender": "female", + "gender_label": "Female", + "lastname": "Feinstein", + "link": "https://www.govtrack.us/congress/members/dianne_feinstein/300043", + "middlename": "", + "name": "Sen. Dianne Feinstein [D-CA]", + "namemod": "", + "nickname": "", + "osid": "N00007364", + "pvsid": "53273", + "sortname": "Feinstein, Dianne (Sen.) [D-CA]", + "twitterid": "SenFeinstein", + "youtubeid": "SenatorFeinstein" + }, + "phone": "202-224-3841", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "CA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.feinstein.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Utah", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "104 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.hatch.senate.gov/public/index.cfm/contact?p=Email-Orrin", + "fax": "202-224-6331", + "office": "104 Hart Senate Office Building", + "rss_url": "http://www.hatch.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "H000338", + "birthday": "1934-03-22", + "cspanid": 189, + "firstname": "Orrin", + "gender": "male", + "gender_label": "Male", + "lastname": "Hatch", + "link": "https://www.govtrack.us/congress/members/orrin_hatch/300052", + "middlename": "G.", + "name": "Sen. Orrin Hatch [R-UT]", + "namemod": "", + "nickname": "", + "osid": "N00009869", + "pvsid": "53352", + "sortname": "Hatch, Orrin (Sen.) [R-UT]", + "twitterid": "SenOrrinHatch", + "youtubeid": "SenatorOrrinHatch" + }, + "phone": "202-224-5251", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "UT", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.hatch.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Florida", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "716 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.billnelson.senate.gov/contact-bill", + "fax": "202-228-2183", + "office": "716 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "N000032", + "birthday": "1942-09-29", + "cspanid": 1931, + "firstname": "Bill", + "gender": "male", + "gender_label": "Male", + "lastname": "Nelson", + "link": "https://www.govtrack.us/congress/members/bill_nelson/300078", + "middlename": "", + "name": "Sen. Bill Nelson [D-FL]", + "namemod": "", + "nickname": "", + "osid": "N00009926", + "pvsid": "1606", + "sortname": "Nelson, Bill (Sen.) [D-FL]", + "twitterid": "SenBillNelson", + "youtubeid": "senbillnelson" + }, + "phone": "202-224-5274", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "FL", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.billnelson.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Michigan", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "731 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.stabenow.senate.gov/contact", + "fax": "202-228-0325", + "office": "731 Hart Senate Office Building", + "rss_url": "http://stabenow.senate.gov/rss/?p=news" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "S000770", + "birthday": "1950-04-29", + "cspanid": 45451, + "firstname": "Debbie", + "gender": "female", + "gender_label": "Female", + "lastname": "Stabenow", + "link": "https://www.govtrack.us/congress/members/debbie_stabenow/300093", + "middlename": "Ann", + "name": "Sen. Debbie Stabenow [D-MI]", + "namemod": "", + "nickname": "", + "osid": "N00004118", + "pvsid": "515", + "sortname": "Stabenow, Debbie (Sen.) [D-MI]", + "twitterid": "SenStabenow", + "youtubeid": "senatorstabenow" + }, + "phone": "202-224-4822", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "MI", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.stabenow.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Connecticut", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "136 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.murphy.senate.gov/contact", + "fax": "202-225-5933", + "office": "136 Hart Senate Office Building", + "rss_url": "http://www.theday.com/article/20121216/nws12/312169935/1069/rss" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "M001169", + "birthday": "1973-08-03", + "cspanid": 1021270, + "firstname": "Christopher", + "gender": "male", + "gender_label": "Male", + "lastname": "Murphy", + "link": "https://www.govtrack.us/congress/members/christopher_murphy/412194", + "middlename": "S.", + "name": "Sen. Christopher Murphy [D-CT]", + "namemod": "", + "nickname": "", + "osid": "N00027566", + "pvsid": "17189", + "sortname": "Murphy, Christopher (Sen.) [D-CT]", + "twitterid": "senmurphyoffice", + "youtubeid": "senchrismurphy" + }, + "phone": "202-224-4041", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "CT", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.murphy.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Hawaii", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "730 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.hirono.senate.gov/contact", + "fax": "202-225-4987", + "office": "730 Hart Senate Office Building", + "rss_url": "http://www.hirono.senate.gov/rss/feeds/?type=all" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "H001042", + "birthday": "1947-11-03", + "cspanid": 91216, + "firstname": "Mazie", + "gender": "female", + "gender_label": "Female", + "lastname": "Hirono", + "link": "https://www.govtrack.us/congress/members/mazie_hirono/412200", + "middlename": "K.", + "name": "Sen. Mazie Hirono [D-HI]", + "namemod": "", + "nickname": "", + "osid": "N00028139", + "pvsid": "1677", + "sortname": "Hirono, Mazie (Sen.) [D-HI]", + "twitterid": "MazieHirono", + "youtubeid": "CongresswomanHirono" + }, + "phone": "202-224-6361", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "HI", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.hirono.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Indiana", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "720 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.donnelly.senate.gov/contact/email-joe", + "fax": "202-225-6798", + "office": "720 Hart Senate Office Building", + "rss_url": "http://www.donnelly.senate.gov/rss/feeds/?type=all" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "D000607", + "birthday": "1955-09-28", + "cspanid": 1012000, + "firstname": "Joe", + "gender": "male", + "gender_label": "Male", + "lastname": "Donnelly", + "link": "https://www.govtrack.us/congress/members/joe_donnelly/412205", + "middlename": "", + "name": "Sen. Joe Donnelly [D-IN]", + "namemod": "", + "nickname": "", + "osid": "N00026586", + "pvsid": "34212", + "sortname": "Donnelly, Joe (Sen.) [D-IN]", + "twitterid": "SenDonnelly", + "youtubeid": "sendonnelly" + }, + "phone": "202-224-4814", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "IN", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.donnelly.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Nevada", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "324 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.heller.senate.gov/public/index.cfm/contact-form", + "fax": "202-228-6753", + "office": "324 Hart Senate Office Building", + "rss_url": "http://www.heller.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "H001041", + "birthday": "1960-05-10", + "cspanid": 1012368, + "firstname": "Dean", + "gender": "male", + "gender_label": "Male", + "lastname": "Heller", + "link": "https://www.govtrack.us/congress/members/dean_heller/412218", + "middlename": "", + "name": "Sen. Dean Heller [R-NV]", + "namemod": "", + "nickname": "", + "osid": "N00027522", + "pvsid": "2291", + "sortname": "Heller, Dean (Sen.) [R-NV]", + "twitterid": "SenDeanHeller", + "youtubeid": "SenDeanHeller" + }, + "phone": "202-224-6244", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "NV", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.heller.senate.gov/public" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for New York", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "478 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.gillibrand.senate.gov/contact/email-me", + "fax": "202-228-0282", + "office": "478 Russell Senate Office Building", + "rss_url": "http://www.gillibrand.senate.gov/rss/" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "G000555", + "birthday": "1966-12-09", + "cspanid": 1022862, + "firstname": "Kirsten", + "gender": "female", + "gender_label": "Female", + "lastname": "Gillibrand", + "link": "https://www.govtrack.us/congress/members/kirsten_gillibrand/412223", + "middlename": "E.", + "name": "Sen. Kirsten Gillibrand [D-NY]", + "namemod": "", + "nickname": "", + "osid": "N00027658", + "pvsid": "65147", + "sortname": "Gillibrand, Kirsten (Sen.) [D-NY]", + "twitterid": "SenGillibrand", + "youtubeid": "KirstenEGillibrand" + }, + "phone": "202-224-4451", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "NY", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.gillibrand.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Minnesota", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "302 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.klobuchar.senate.gov/public/index.cfm/contact", + "fax": "202-228-2186", + "office": "302 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "K000367", + "birthday": "1960-05-25", + "cspanid": 83701, + "firstname": "Amy", + "gender": "female", + "gender_label": "Female", + "lastname": "Klobuchar", + "link": "https://www.govtrack.us/congress/members/amy_klobuchar/412242", + "middlename": "Jean", + "name": "Sen. Amy Klobuchar [D-MN]", + "namemod": "", + "nickname": "", + "osid": "N00027500", + "pvsid": "65092", + "sortname": "Klobuchar, Amy (Sen.) [D-MN]", + "twitterid": "SenAmyKlobuchar", + "youtubeid": "senatorklobuchar" + }, + "phone": "202-224-3244", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "MN", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.klobuchar.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Missouri", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "503 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.mccaskill.senate.gov/contact", + "fax": "202-228-6326", + "office": "503 Hart Senate Office Building", + "rss_url": "http://mccaskill.senate.gov/rss/?p=news" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "M001170", + "birthday": "1953-07-24", + "cspanid": 44501, + "firstname": "Claire", + "gender": "female", + "gender_label": "Female", + "lastname": "McCaskill", + "link": "https://www.govtrack.us/congress/members/claire_mccaskill/412243", + "middlename": "", + "name": "Sen. Claire McCaskill [D-MO]", + "namemod": "", + "nickname": "", + "osid": "N00027694", + "pvsid": "2109", + "sortname": "McCaskill, Claire (Sen.) [D-MO]", + "twitterid": "McCaskillOffice", + "youtubeid": "SenatorMcCaskill" + }, + "phone": "202-224-6154", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "MO", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.mccaskill.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Montana", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "311 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.tester.senate.gov/?p=email_senator", + "fax": "202-224-8594", + "office": "311 Hart Senate Office Building", + "rss_url": "http://www.tester.senate.gov/rss/?p=hot_topic" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "T000464", + "birthday": "1956-08-21", + "cspanid": 1020176, + "firstname": "Jon", + "gender": "male", + "gender_label": "Male", + "lastname": "Tester", + "link": "https://www.govtrack.us/congress/members/jon_tester/412244", + "middlename": "", + "name": "Sen. Jon Tester [D-MT]", + "namemod": "", + "nickname": "", + "osid": "N00027605", + "pvsid": "20928", + "sortname": "Tester, Jon (Sen.) [D-MT]", + "twitterid": "SenatorTester", + "youtubeid": "senatorjontester" + }, + "phone": "202-224-2644", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "MT", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.tester.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Pennsylvania", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "393 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.casey.senate.gov/contact/", + "fax": "202-228-0604", + "office": "393 Russell Senate Office Building", + "rss_url": "http://www.casey.senate.gov/rss/feeds/?all" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "C001070", + "birthday": "1960-04-13", + "cspanid": 47036, + "firstname": "Robert", + "gender": "male", + "gender_label": "Male", + "lastname": "Casey", + "link": "https://www.govtrack.us/congress/members/robert_casey/412246", + "middlename": "P.", + "name": "Sen. Robert “Bob” Casey [D-PA]", + "namemod": "Jr.", + "nickname": "Bob", + "osid": "N00027503", + "pvsid": "2541", + "sortname": "Casey, Robert “Bob” (Sen.) [D-PA]", + "twitterid": "SenBobCasey", + "youtubeid": "SenatorBobCasey" + }, + "phone": "202-224-6324", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "PA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.casey.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Rhode Island", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "530 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.whitehouse.senate.gov/contact/email-sheldon", + "fax": "202-228-6362", + "office": "530 Hart Senate Office Building", + "rss_url": "http://www.whitehouse.senate.gov/rss/feeds/?type=all&cachebuster=1" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "W000802", + "birthday": "1955-10-20", + "cspanid": 92235, + "firstname": "Sheldon", + "gender": "male", + "gender_label": "Male", + "lastname": "Whitehouse", + "link": "https://www.govtrack.us/congress/members/sheldon_whitehouse/412247", + "middlename": "", + "name": "Sen. Sheldon Whitehouse [D-RI]", + "namemod": "", + "nickname": "", + "osid": "N00027533", + "pvsid": "2572", + "sortname": "Whitehouse, Sheldon (Sen.) [D-RI]", + "twitterid": "SenWhitehouse", + "youtubeid": "SenatorWhitehouse" + }, + "phone": "202-224-2921", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "RI", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.whitehouse.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Tennessee", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "425 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.corker.senate.gov/public/index.cfm/emailme", + "fax": "202-228-0566", + "office": "425 Dirksen Senate Office Building", + "rss_url": "http://www.corker.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "C001071", + "birthday": "1952-08-24", + "cspanid": 1021114, + "firstname": "Bob", + "gender": "male", + "gender_label": "Male", + "lastname": "Corker", + "link": "https://www.govtrack.us/congress/members/bob_corker/412248", + "middlename": "", + "name": "Sen. Bob Corker [R-TN]", + "namemod": "", + "nickname": "", + "osid": "N00027441", + "pvsid": "65905", + "sortname": "Corker, Bob (Sen.) [R-TN]", + "twitterid": "SenBobCorker", + "youtubeid": "senatorcorker" + }, + "phone": "202-224-3344", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "TN", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.corker.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Wyoming", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "307 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.barrasso.senate.gov/public/index.cfm/contact-form", + "fax": "202-224-1724", + "office": "307 Dirksen Senate Office Building", + "rss_url": "http://www.barrasso.senate.gov/public/index.cfm?FuseAction=Rss.Feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "B001261", + "birthday": "1952-07-21", + "cspanid": 1024777, + "firstname": "John", + "gender": "male", + "gender_label": "Male", + "lastname": "Barrasso", + "link": "https://www.govtrack.us/congress/members/john_barrasso/412251", + "middlename": "A.", + "name": "Sen. John Barrasso [R-WY]", + "namemod": "", + "nickname": "", + "osid": "N00006236", + "pvsid": "52662", + "sortname": "Barrasso, John (Sen.) [R-WY]", + "twitterid": "SenJohnBarrasso", + "youtubeid": "barrassowyo" + }, + "phone": "202-224-6441", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "WY", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.barrasso.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for New Mexico", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "303 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.heinrich.senate.gov/contact", + "fax": "202-225-4975", + "office": "303 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "H001046", + "birthday": "1971-10-17", + "cspanid": 1030686, + "firstname": "Martin", + "gender": "male", + "gender_label": "Male", + "lastname": "Heinrich", + "link": "https://www.govtrack.us/congress/members/martin_heinrich/412281", + "middlename": "", + "name": "Sen. Martin Heinrich [D-NM]", + "namemod": "", + "nickname": "", + "osid": "N00029835", + "pvsid": "74517", + "sortname": "Heinrich, Martin (Sen.) [D-NM]", + "twitterid": "MartinHeinrich", + "youtubeid": "SenMartinHeinrich" + }, + "phone": "202-224-5521", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "NM", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.heinrich.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for West Virginia", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "306 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.manchin.senate.gov/public/index.cfm/contact-form", + "fax": "202-228-0002", + "office": "306 Hart Senate Office Building", + "rss_url": "http://www.manchin.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "M001183", + "birthday": "1947-08-24", + "cspanid": 62864, + "firstname": "Joe", + "gender": "male", + "gender_label": "Male", + "lastname": "Manchin", + "link": "https://www.govtrack.us/congress/members/joe_manchin/412391", + "middlename": "", + "name": "Sen. Joe Manchin [D-WV]", + "namemod": "III", + "nickname": "", + "osid": "N00032838", + "pvsid": "7547", + "sortname": "Manchin, Joe (Sen.) [D-WV]", + "twitterid": "Sen_JoeManchin", + "youtubeid": "SenatorJoeManchin" + }, + "phone": "202-224-3954", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "WV", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.manchin.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Massachusetts", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "317 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.warren.senate.gov/?p=email_senator", + "fax": "202-228-2072", + "office": "317 Hart Senate Office Building", + "rss_url": "http://www.warren.senate.gov/rss/?p=hot_topic" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "W000817", + "birthday": "1949-06-22", + "cspanid": 1023023, + "firstname": "Elizabeth", + "gender": "female", + "gender_label": "Female", + "lastname": "Warren", + "link": "https://www.govtrack.us/congress/members/elizabeth_warren/412542", + "middlename": "", + "name": "Sen. Elizabeth Warren [D-MA]", + "namemod": "", + "nickname": "", + "osid": "N00033492", + "pvsid": "141272", + "sortname": "Warren, Elizabeth (Sen.) [D-MA]", + "twitterid": "SenWarren", + "youtubeid": "senelizabethwarren" + }, + "phone": "202-224-4543", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "MA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.warren.senate.gov" +}, +{ + "caucus": "Democrat", + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Maine", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "133 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.king.senate.gov/contact", + "fax": "202-224-1946", + "office": "133 Hart Senate Office Building", + "rss_url": "http://www.king.senate.gov/rss/feeds/?type=all" + }, + "leadership_title": null, + "party": "Independent", + "person": { + "bioguideid": "K000383", + "birthday": "1944-03-31", + "cspanid": 37413, + "firstname": "Angus", + "gender": "male", + "gender_label": "Male", + "lastname": "King", + "link": "https://www.govtrack.us/congress/members/angus_king/412545", + "middlename": "", + "name": "Sen. Angus King [I-ME]", + "namemod": "", + "nickname": "", + "osid": "N00034580", + "pvsid": "22381", + "sortname": "King, Angus (Sen.) [I-ME]", + "twitterid": "SenAngusKing", + "youtubeid": "SenatorAngusKing" + }, + "phone": "202-224-5344", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "ME", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.king.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for North Dakota", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "516 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.heitkamp.senate.gov/public/index.cfm/contact", + "fax": "202-224-7776", + "office": "516 Hart Senate Office Building", + "rss_url": "http://www.heitkamp.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "H001069", + "birthday": "1955-10-30", + "cspanid": 95414, + "firstname": "Heidi", + "gender": "female", + "gender_label": "Female", + "lastname": "Heitkamp", + "link": "https://www.govtrack.us/congress/members/heidi_heitkamp/412554", + "middlename": "", + "name": "Sen. Heidi Heitkamp [D-ND]", + "namemod": "", + "nickname": "", + "osid": "N00033782", + "pvsid": "41716", + "sortname": "Heitkamp, Heidi (Sen.) [D-ND]", + "twitterid": "SenatorHeitkamp", + "youtubeid": "senatorheidiheitkamp" + }, + "phone": "202-224-2043", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "ND", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.heitkamp.senate.gov/public" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Nebraska", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "454 Russell Senate Office Building Washington DC 20510", + "contact_form": "http://www.fischer.senate.gov/public/index.cfm/contact", + "fax": "202-228-1325", + "office": "454 Russell Senate Office Building", + "rss_url": "http://www.fischer.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "F000463", + "birthday": "1951-03-01", + "cspanid": 1034067, + "firstname": "Deb", + "gender": "female", + "gender_label": "Female", + "lastname": "Fischer", + "link": "https://www.govtrack.us/congress/members/deb_fischer/412556", + "middlename": "", + "name": "Sen. Deb Fischer [R-NE]", + "namemod": "", + "nickname": "", + "osid": "N00033443", + "pvsid": "41963", + "sortname": "Fischer, Deb (Sen.) [R-NE]", + "twitterid": "SenatorFischer", + "youtubeid": "senatordebfischer" + }, + "phone": "202-224-6551", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "NE", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.fischer.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Texas", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "404 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.cruz.senate.gov/?p=form&id=16", + "fax": "202-228-3398", + "office": "404 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "C001098", + "birthday": "1970-12-22", + "cspanid": 1019953, + "firstname": "Ted", + "gender": "male", + "gender_label": "Male", + "lastname": "Cruz", + "link": "https://www.govtrack.us/congress/members/ted_cruz/412573", + "middlename": "", + "name": "Sen. Ted Cruz [R-TX]", + "namemod": "", + "nickname": "", + "osid": "N00033085", + "pvsid": "135705", + "sortname": "Cruz, Ted (Sen.) [R-TX]", + "twitterid": "SenTedCruz", + "youtubeid": "sentedcruz" + }, + "phone": "202-224-5922", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "TX", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.cruz.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Junior Senator for Virginia", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "231 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.kaine.senate.gov/contact", + "fax": "202-228-6363", + "office": "231 Russell Senate Office Building", + "rss_url": "http://www.kaine.senate.gov/rss/feeds/?type=all" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "K000384", + "birthday": "1958-02-26", + "cspanid": 49219, + "firstname": "Timothy", + "gender": "male", + "gender_label": "Male", + "lastname": "Kaine", + "link": "https://www.govtrack.us/congress/members/timothy_kaine/412582", + "middlename": "", + "name": "Sen. Timothy Kaine [D-VA]", + "namemod": "", + "nickname": "", + "osid": "N00033177", + "pvsid": "50772", + "sortname": "Kaine, Timothy (Sen.) [D-VA]", + "twitterid": null, + "youtubeid": "SenatorTimKaine" + }, + "phone": "202-224-4024", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2013-01-03", + "state": "VA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.kaine.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 113, + 114, + 115 + ], + "current": true, + "description": "Senior Senator for Mississippi", + "district": null, + "enddate": "2019-01-03", + "extra": { + "address": "555 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.wicker.senate.gov/public/index.cfm/contact", + "fax": "202-228-0378", + "office": "555 Dirksen Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "W000437", + "birthday": "1951-07-05", + "cspanid": 18203, + "firstname": "Roger", + "gender": "male", + "gender_label": "Male", + "lastname": "Wicker", + "link": "https://www.govtrack.us/congress/members/roger_wicker/400432", + "middlename": "F.", + "name": "Sen. Roger Wicker [R-MS]", + "namemod": "", + "nickname": "", + "osid": "N00003280", + "pvsid": "21926", + "sortname": "Wicker, Roger (Sen.) [R-MS]", + "twitterid": "SenatorWicker", + "youtubeid": "SenatorWicker" + }, + "phone": "202-224-6253", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class1", + "senator_class_label": "Class 1", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2013-01-03", + "state": "MS", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.wicker.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Tennessee", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "455 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "http://www.alexander.senate.gov/public/index.cfm?p=Email", + "fax": "202-228-3398", + "office": "455 Dirksen Senate Office Building", + "rss_url": "http://www.alexander.senate.gov/public/?a=rss.feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "A000360", + "birthday": "1940-07-03", + "cspanid": 5, + "firstname": "Lamar", + "gender": "male", + "gender_label": "Male", + "lastname": "Alexander", + "link": "https://www.govtrack.us/congress/members/lamar_alexander/300002", + "middlename": "", + "name": "Sen. Lamar Alexander [R-TN]", + "namemod": "", + "nickname": "", + "osid": "N00009888", + "pvsid": "15691", + "sortname": "Alexander, Lamar (Sen.) [R-TN]", + "twitterid": "SenAlexander", + "youtubeid": "lamaralexander" + }, + "phone": "202-224-4944", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "TN", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.alexander.senate.gov/public" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Maine", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "413 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "http://www.collins.senate.gov/contact", + "fax": "202-224-2693", + "office": "413 Dirksen Senate Office Building", + "rss_url": "http://www.collins.senate.gov/public/?a=rss.feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "C001035", + "birthday": "1952-12-07", + "cspanid": 45738, + "firstname": "Susan", + "gender": "female", + "gender_label": "Female", + "lastname": "Collins", + "link": "https://www.govtrack.us/congress/members/susan_collins/300025", + "middlename": "M.", + "name": "Sen. Susan Collins [R-ME]", + "namemod": "", + "nickname": "", + "osid": "N00000491", + "pvsid": "379", + "sortname": "Collins, Susan (Sen.) [R-ME]", + "twitterid": "SenatorCollins", + "youtubeid": "SenatorSusanCollins" + }, + "phone": "202-224-2523", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "ME", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.collins.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Texas", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "517 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.cornyn.senate.gov/contact", + "fax": "202-228-2856", + "office": "517 Hart Senate Office Building", + "rss_url": "http://www.cornyn.senate.gov/public/?a=rss.feed" + }, + "leadership_title": "Majority Whip", + "party": "Republican", + "person": { + "bioguideid": "C001056", + "birthday": "1952-02-02", + "cspanid": 93131, + "firstname": "John", + "gender": "male", + "gender_label": "Male", + "lastname": "Cornyn", + "link": "https://www.govtrack.us/congress/members/john_cornyn/300027", + "middlename": "", + "name": "Sen. John Cornyn [R-TX]", + "namemod": "", + "nickname": "", + "osid": "N00024852", + "pvsid": "15375", + "sortname": "Cornyn, John (Sen.) [R-TX]", + "twitterid": "JohnCornyn", + "youtubeid": "senjohncornyn" + }, + "phone": "202-224-2934", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "TX", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.cornyn.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Illinois", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "711 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.durbin.senate.gov/contact/", + "fax": "202-228-0400", + "office": "711 Hart Senate Office Building", + "rss_url": "http://durbin.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": "Minority Whip", + "party": "Democrat", + "person": { + "bioguideid": "D000563", + "birthday": "1944-11-21", + "cspanid": 6741, + "firstname": "Richard", + "gender": "male", + "gender_label": "Male", + "lastname": "Durbin", + "link": "https://www.govtrack.us/congress/members/richard_durbin/300038", + "middlename": "J.", + "name": "Sen. Richard Durbin [D-IL]", + "namemod": "", + "nickname": "", + "osid": "N00004981", + "pvsid": "26847", + "sortname": "Durbin, Richard (Sen.) [D-IL]", + "twitterid": "SenatorDurbin", + "youtubeid": "SenatorDurbin" + }, + "phone": "202-224-2152", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "IL", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.durbin.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Wyoming", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "379A Russell Senate Office Building Washington DC 20510", + "contact_form": "http://www.enzi.senate.gov/public/index.cfm/contact?p=e-mail-senator-enzi", + "fax": "202-228-0359", + "office": "379a Russell Senate Office Building", + "rss_url": "http://www.enzi.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "E000285", + "birthday": "1944-02-01", + "cspanid": 45824, + "firstname": "Michael", + "gender": "male", + "gender_label": "Male", + "lastname": "Enzi", + "link": "https://www.govtrack.us/congress/members/michael_enzi/300041", + "middlename": "B.", + "name": "Sen. Michael Enzi [R-WY]", + "namemod": "", + "nickname": "", + "osid": "N00006249", + "pvsid": "558", + "sortname": "Enzi, Michael (Sen.) [R-WY]", + "twitterid": "SenatorEnzi", + "youtubeid": "senatorenzi" + }, + "phone": "202-224-3424", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "WY", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.enzi.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for South Carolina", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "290 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.lgraham.senate.gov/public/index.cfm/e-mail-senator-graham", + "fax": "202-224-3808", + "office": "290 Russell Senate Office Building", + "rss_url": "http://www.lgraham.senate.gov/public/index.cfm?FuseAction=Rss.Feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "G000359", + "birthday": "1955-07-09", + "cspanid": 36782, + "firstname": "Lindsey", + "gender": "male", + "gender_label": "Male", + "lastname": "Graham", + "link": "https://www.govtrack.us/congress/members/lindsey_graham/300047", + "middlename": "O.", + "name": "Sen. Lindsey Graham [R-SC]", + "namemod": "", + "nickname": "", + "osid": "N00009975", + "pvsid": "21992", + "sortname": "Graham, Lindsey (Sen.) [R-SC]", + "twitterid": "GrahamBlog", + "youtubeid": "USSenLindseyGraham" + }, + "phone": "202-224-5972", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "SC", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.lgraham.senate.gov/public" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Oklahoma", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "205 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.inhofe.senate.gov/contact", + "fax": "202-228-0380", + "office": "205 Russell Senate Office Building", + "rss_url": "http://www.inhofe.senate.gov/rss/feeds/?type=all&cachebuster=eea6c4d7%2d939c%2d5c1e%2db6c7aa3b8b291208" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "I000024", + "birthday": "1934-11-17", + "cspanid": 5619, + "firstname": "James", + "gender": "male", + "gender_label": "Male", + "lastname": "Inhofe", + "link": "https://www.govtrack.us/congress/members/james_inhofe/300055", + "middlename": "M.", + "name": "Sen. James “Jim” Inhofe [R-OK]", + "namemod": "", + "nickname": "Jim", + "osid": "N00005582", + "pvsid": "27027", + "sortname": "Inhofe, James “Jim” (Sen.) [R-OK]", + "twitterid": "InhofePress", + "youtubeid": "jiminhofepressoffice" + }, + "phone": "202-224-4721", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "OK", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.inhofe.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Kentucky", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "317 Russell Senate Office Building Washington DC 20510", + "contact_form": "http://www.mcconnell.senate.gov/public/index.cfm?p=contact", + "fax": "202-224-2499", + "office": "317 Russell Senate Office Building", + "rss_url": "http://www.mcconnell.senate.gov/public/?a=rss.feed" + }, + "leadership_title": "Majority Leader", + "party": "Republican", + "person": { + "bioguideid": "M000355", + "birthday": "1942-02-20", + "cspanid": 2351, + "firstname": "Mitch", + "gender": "male", + "gender_label": "Male", + "lastname": "McConnell", + "link": "https://www.govtrack.us/congress/members/mitch_mcconnell/300072", + "middlename": "", + "name": "Sen. Mitch McConnell [R-KY]", + "namemod": "", + "nickname": "", + "osid": "N00003389", + "pvsid": "53298", + "sortname": "McConnell, Mitch (Sen.) [R-KY]", + "twitterid": "McConnellPress", + "youtubeid": null + }, + "phone": "202-224-2541", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "KY", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.mcconnell.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Rhode Island", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "728 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.reed.senate.gov/contact/", + "fax": "202-224-4680", + "office": "728 Hart Senate Office Building", + "rss_url": "https://www.reed.senate.gov//rss/feeds/?type=all" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "R000122", + "birthday": "1949-11-12", + "cspanid": 24239, + "firstname": "John", + "gender": "male", + "gender_label": "Male", + "lastname": "Reed", + "link": "https://www.govtrack.us/congress/members/john_reed/300081", + "middlename": "F.", + "name": "Sen. John “Jack” Reed [D-RI]", + "namemod": "", + "nickname": "Jack", + "osid": "N00000362", + "pvsid": "27060", + "sortname": "Reed, John “Jack” (Sen.) [D-RI]", + "twitterid": "SenJackReed", + "youtubeid": "SenatorReed" + }, + "phone": "202-224-4642", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "RI", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.reed.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Kansas", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "109 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.roberts.senate.gov/public/?p=EmailPat", + "fax": "202-224-3514", + "office": "109 Hart Senate Office Building", + "rss_url": "http://www.roberts.senate.gov/public/?a=rss.feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "R000307", + "birthday": "1936-04-20", + "cspanid": 16354, + "firstname": "Pat", + "gender": "male", + "gender_label": "Male", + "lastname": "Roberts", + "link": "https://www.govtrack.us/congress/members/pat_roberts/300083", + "middlename": "", + "name": "Sen. Pat Roberts [R-KS]", + "namemod": "", + "nickname": "", + "osid": "N00005285", + "pvsid": "26866", + "sortname": "Roberts, Pat (Sen.) [R-KS]", + "twitterid": "SenPatRoberts", + "youtubeid": "SenPatRoberts" + }, + "phone": "202-224-4774", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "KS", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.roberts.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for West Virginia", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "172 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.capito.senate.gov/contact/contact-shelley", + "fax": "202-225-7856", + "office": "172 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "C001047", + "birthday": "1953-11-26", + "cspanid": 83737, + "firstname": "Shelley", + "gender": "female", + "gender_label": "Female", + "lastname": "Capito", + "link": "https://www.govtrack.us/congress/members/shelley_capito/400061", + "middlename": "Moore", + "name": "Sen. Shelley Capito [R-WV]", + "namemod": "", + "nickname": "", + "osid": "N00009771", + "pvsid": "11701", + "sortname": "Capito, Shelley (Sen.) [R-WV]", + "twitterid": "SenCapito", + "youtubeid": null + }, + "phone": "202-224-6472", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "WV", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.capito.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Massachusetts", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "255 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.markey.senate.gov/contact", + "office": "255 Dirksen Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "M000133", + "birthday": "1946-07-11", + "cspanid": 260, + "firstname": "Edward", + "gender": "male", + "gender_label": "Male", + "lastname": "Markey", + "link": "https://www.govtrack.us/congress/members/edward_markey/400253", + "middlename": "J.", + "name": "Sen. Edward “Ed” Markey [D-MA]", + "namemod": "", + "nickname": "Ed", + "osid": "N00000270", + "pvsid": "26900", + "sortname": "Markey, Edward “Ed” (Sen.) [D-MA]", + "twitterid": "SenMarkey", + "youtubeid": "RepMarkey" + }, + "phone": "202-224-2742", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "MA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.markey.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for New Mexico", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "531 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.tomudall.senate.gov/?p=contact", + "fax": "202-228-3261", + "office": "531 Hart Senate Office Building", + "rss_url": "http://tomudall.senate.gov/rss/?p=blog" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "U000039", + "birthday": "1948-05-18", + "cspanid": 10075, + "firstname": "Tom", + "gender": "male", + "gender_label": "Male", + "lastname": "Udall", + "link": "https://www.govtrack.us/congress/members/tom_udall/400413", + "middlename": "S.", + "name": "Sen. Tom Udall [D-NM]", + "namemod": "", + "nickname": "", + "osid": "N00006561", + "pvsid": "22658", + "sortname": "Udall, Tom (Sen.) [D-NM]", + "twitterid": "SenatorTomUdall", + "youtubeid": "senatortomudall" + }, + "phone": "202-224-6621", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "NM", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.tomudall.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Louisiana", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "520 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.cassidy.senate.gov/contact", + "fax": "202-225-7313", + "office": "520 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "C001075", + "birthday": "1957-09-28", + "cspanid": 1030546, + "firstname": "Bill", + "gender": "male", + "gender_label": "Male", + "lastname": "Cassidy", + "link": "https://www.govtrack.us/congress/members/bill_cassidy/412269", + "middlename": "", + "name": "Sen. Bill Cassidy [R-LA]", + "namemod": "", + "nickname": "", + "osid": "N00030245", + "pvsid": "69494", + "sortname": "Cassidy, Bill (Sen.) [R-LA]", + "twitterid": null, + "youtubeid": "SenatorBillCassidy" + }, + "phone": "202-224-5824", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "LA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.cassidy.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Michigan", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "724 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.peters.senate.gov/contact/email-gary", + "fax": "202-226-2356", + "office": "724 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "P000595", + "birthday": "1958-12-01", + "cspanid": 50199, + "firstname": "Gary", + "gender": "male", + "gender_label": "Male", + "lastname": "Peters", + "link": "https://www.govtrack.us/congress/members/gary_peters/412305", + "middlename": "C.", + "name": "Sen. Gary Peters [D-MI]", + "namemod": "", + "nickname": "", + "osid": "N00029277", + "pvsid": "8749", + "sortname": "Peters, Gary (Sen.) [D-MI]", + "twitterid": "SenGaryPeters", + "youtubeid": "RepGaryPeters" + }, + "phone": "202-224-6221", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "MI", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.peters.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for Virginia", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "703 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.warner.senate.gov/public/index.cfm?p=Contact", + "fax": "202-224-6295", + "office": "703 Hart Senate Office Building", + "rss_url": "http://www.warner.senate.gov/public/?a=rss.feed" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "W000805", + "birthday": "1954-12-15", + "cspanid": 7630, + "firstname": "Mark", + "gender": "male", + "gender_label": "Male", + "lastname": "Warner", + "link": "https://www.govtrack.us/congress/members/mark_warner/412321", + "middlename": "", + "name": "Sen. Mark Warner [D-VA]", + "namemod": "", + "nickname": "", + "osid": "N00002097", + "pvsid": "535", + "sortname": "Warner, Mark (Sen.) [D-VA]", + "twitterid": "MarkWarner", + "youtubeid": "SenatorMarkWarner" + }, + "phone": "202-224-2023", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "VA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.warner.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Idaho", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "483 Russell Senate Office Building Washington DC 20510", + "contact_form": "http://www.risch.senate.gov/public/index.cfm?p=Email", + "fax": "202-224-2573", + "office": "483 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "R000584", + "birthday": "1943-05-03", + "cspanid": 1020034, + "firstname": "James", + "gender": "male", + "gender_label": "Male", + "lastname": "Risch", + "link": "https://www.govtrack.us/congress/members/james_risch/412322", + "middlename": "", + "name": "Sen. James Risch [R-ID]", + "namemod": "", + "nickname": "", + "osid": "N00029441", + "pvsid": "2919", + "sortname": "Risch, James (Sen.) [R-ID]", + "twitterid": "SenatorRisch", + "youtubeid": "SenatorJamesRisch" + }, + "phone": "202-224-2752", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "ID", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.risch.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Senior Senator for New Hampshire", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "506 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.shaheen.senate.gov/contact/contact-jeanne", + "fax": "202-228-3194", + "office": "506 Hart Senate Office Building", + "rss_url": "http://www.shaheen.senate.gov/rss/" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "S001181", + "birthday": "1947-01-28", + "cspanid": 22850, + "firstname": "Jeanne", + "gender": "female", + "gender_label": "Female", + "lastname": "Shaheen", + "link": "https://www.govtrack.us/congress/members/jeanne_shaheen/412323", + "middlename": "", + "name": "Sen. Jeanne Shaheen [D-NH]", + "namemod": "", + "nickname": "", + "osid": "N00024790", + "pvsid": "1663", + "sortname": "Shaheen, Jeanne (Sen.) [D-NH]", + "twitterid": "SenatorShaheen", + "youtubeid": "senatorshaheen" + }, + "phone": "202-224-2841", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2015-01-06", + "state": "NH", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.shaheen.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Oregon", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "313 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.merkley.senate.gov/contact/", + "fax": "202-228-3997", + "office": "313 Hart Senate Office Building", + "rss_url": "http://www.merkley.senate.gov/rss/" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "M001176", + "birthday": "1956-10-24", + "cspanid": 1029842, + "firstname": "Jeff", + "gender": "male", + "gender_label": "Male", + "lastname": "Merkley", + "link": "https://www.govtrack.us/congress/members/jeff_merkley/412325", + "middlename": "", + "name": "Sen. Jeff Merkley [D-OR]", + "namemod": "", + "nickname": "", + "osid": "N00029303", + "pvsid": "23644", + "sortname": "Merkley, Jeff (Sen.) [D-OR]", + "twitterid": "SenJeffMerkley", + "youtubeid": "SenatorJeffMerkley" + }, + "phone": "202-224-3753", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "OR", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.merkley.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Delaware", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "127A Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.coons.senate.gov/contact", + "fax": "202-228-3075", + "office": "127a Russell Senate Office Building", + "rss_url": "http://www.coons.senate.gov/rss/feeds/?type=all" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "C001088", + "birthday": "1963-09-09", + "cspanid": 9269028, + "firstname": "Chris", + "gender": "male", + "gender_label": "Male", + "lastname": "Coons", + "link": "https://www.govtrack.us/congress/members/chris_coons/412390", + "middlename": "Andrew", + "name": "Sen. Chris Coons [D-DE]", + "namemod": "", + "nickname": "", + "osid": "N00031820", + "pvsid": "122834", + "sortname": "Coons, Chris (Sen.) [D-DE]", + "twitterid": "ChrisCoons", + "youtubeid": "senatorchriscoons" + }, + "phone": "202-224-5042", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "DE", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.coons.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Colorado", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "354 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.gardner.senate.gov/contact-cory/email-cory", + "fax": "202-225-5870", + "office": "354 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "G000562", + "birthday": "1974-08-22", + "cspanid": 623308, + "firstname": "Cory", + "gender": "male", + "gender_label": "Male", + "lastname": "Gardner", + "link": "https://www.govtrack.us/congress/members/cory_gardner/412406", + "middlename": "", + "name": "Sen. Cory Gardner [R-CO]", + "namemod": "", + "nickname": "", + "osid": "N00030780", + "pvsid": "30004", + "sortname": "Gardner, Cory (Sen.) [R-CO]", + "twitterid": "SenCoryGardner", + "youtubeid": null + }, + "phone": "202-224-5941", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "CO", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.gardner.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Arkansas", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "124 Russell Senate Office Building Washington DC 20510", + "contact_form": "http://www.cotton.senate.gov/?p=contact", + "office": "124 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "C001095", + "birthday": "1977-05-13", + "cspanid": 63928, + "firstname": "Tom", + "gender": "male", + "gender_label": "Male", + "lastname": "Cotton", + "link": "https://www.govtrack.us/congress/members/tom_cotton/412508", + "middlename": "", + "name": "Sen. Tom Cotton [R-AR]", + "namemod": "", + "nickname": "", + "osid": "N00033363", + "pvsid": "135651", + "sortname": "Cotton, Tom (Sen.) [R-AR]", + "twitterid": "SenTomCotton", + "youtubeid": "RepTomCotton" + }, + "phone": "202-224-2353", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "AR", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.cotton.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Montana", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "320 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.daines.senate.gov/connect/email-steve", + "fax": "202-228-1236", + "office": "320 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "D000618", + "birthday": "1962-08-20", + "cspanid": 1034037, + "firstname": "Steve", + "gender": "male", + "gender_label": "Male", + "lastname": "Daines", + "link": "https://www.govtrack.us/congress/members/steve_daines/412549", + "middlename": "", + "name": "Sen. Steve Daines [R-MT]", + "namemod": "", + "nickname": "", + "osid": "N00033054", + "pvsid": "135720", + "sortname": "Daines, Steve (Sen.) [R-MT]", + "twitterid": "SteveDaines", + "youtubeid": "SteveDainesMT" + }, + "phone": "202-224-2651", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "MT", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.daines.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for New Jersey", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "359 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.booker.senate.gov/?p=contact", + "fax": "202-224-8378", + "office": "359 Dirksen Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "B001288", + "birthday": "1969-04-27", + "cspanid": 84679, + "firstname": "Cory", + "gender": "male", + "gender_label": "Male", + "lastname": "Booker", + "link": "https://www.govtrack.us/congress/members/cory_booker/412598", + "middlename": "Anthony", + "name": "Sen. Cory Booker [D-NJ]", + "namemod": "", + "nickname": "", + "osid": "N00035267", + "pvsid": "76151", + "sortname": "Booker, Cory (Sen.) [D-NJ]", + "twitterid": "SenBooker", + "youtubeid": "SenCoryBooker" + }, + "phone": "202-224-3224", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "NJ", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.booker.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Alaska", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "702 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.sullivan.senate.gov/contact/email", + "office": "702 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "S001198", + "birthday": "1964-11-13", + "cspanid": 1023262, + "firstname": "Dan", + "gender": "male", + "gender_label": "Male", + "lastname": "Sullivan", + "link": "https://www.govtrack.us/congress/members/dan_sullivan/412665", + "middlename": "", + "name": "Sen. Dan Sullivan [R-AK]", + "namemod": "", + "nickname": "", + "osid": "N00035774", + "pvsid": "114964", + "sortname": "Sullivan, Dan (Sen.) [R-AK]", + "twitterid": "SenDanSullivan", + "youtubeid": null + }, + "phone": "202-224-3004", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "AK", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.sullivan.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Georgia", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "455 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.perdue.senate.gov/connect/email", + "office": "455 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "P000612", + "birthday": "1949-12-10", + "cspanid": 75920, + "firstname": "David", + "gender": "male", + "gender_label": "Male", + "lastname": "Perdue", + "link": "https://www.govtrack.us/congress/members/david_perdue/412666", + "middlename": "", + "name": "Sen. David Perdue [R-GA]", + "namemod": "", + "nickname": "", + "osid": "N00035516", + "pvsid": "151330", + "sortname": "Perdue, David (Sen.) [R-GA]", + "twitterid": "sendavidperdue", + "youtubeid": null + }, + "phone": "202-224-3521", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "GA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.perdue.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Iowa", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "111 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.ernst.senate.gov/public/index.cfm/contact", + "office": "111 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "E000295", + "birthday": "1970-07-01", + "cspanid": 75342, + "firstname": "Joni", + "gender": "female", + "gender_label": "Female", + "lastname": "Ernst", + "link": "https://www.govtrack.us/congress/members/joni_ernst/412667", + "middlename": "", + "name": "Sen. Joni Ernst [R-IA]", + "namemod": "", + "nickname": "", + "osid": "N00035483", + "pvsid": "128583", + "sortname": "Ernst, Joni (Sen.) [R-IA]", + "twitterid": "SenJoniErnst", + "youtubeid": null + }, + "phone": "202-224-3254", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "IA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.ernst.senate.gov/public" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for North Carolina", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "185 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.tillis.senate.gov/public/index.cfm/email-me", + "office": "185 Dirksen Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "T000476", + "birthday": "1960-08-30", + "cspanid": 77055, + "firstname": "Thom", + "gender": "male", + "gender_label": "Male", + "lastname": "Tillis", + "link": "https://www.govtrack.us/congress/members/thom_tillis/412668", + "middlename": "", + "name": "Sen. Thom Tillis [R-NC]", + "namemod": "", + "nickname": "", + "osid": "N00035492", + "pvsid": "57717", + "sortname": "Tillis, Thom (Sen.) [R-NC]", + "twitterid": "senthomtillis", + "youtubeid": null + }, + "phone": "202-224-6342", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "NC", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.tillis.senate.gov/public" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for South Dakota", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "502 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.rounds.senate.gov/contact/email-mike", + "office": "502 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "R000605", + "birthday": "1954-10-24", + "cspanid": 78317, + "firstname": "Mike", + "gender": "male", + "gender_label": "Male", + "lastname": "Rounds", + "link": "https://www.govtrack.us/congress/members/mike_rounds/412669", + "middlename": "", + "name": "Sen. Mike Rounds [R-SD]", + "namemod": "", + "nickname": "", + "osid": "N00035187", + "pvsid": "7455", + "sortname": "Rounds, Mike (Sen.) [R-SD]", + "twitterid": "SenatorRounds", + "youtubeid": null + }, + "phone": "202-224-5842", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "SD", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.rounds.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 114, + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Nebraska", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "136 Russell Senate Office Building Washington DC 20510", + "contact_form": "http://www.sasse.senate.gov/public/index.cfm/email-ben", + "office": "136 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "S001197", + "birthday": "1972-02-22", + "cspanid": 77429, + "firstname": "Benjamin", + "gender": "male", + "gender_label": "Male", + "lastname": "Sasse", + "link": "https://www.govtrack.us/congress/members/benjamin_sasse/412671", + "middlename": "Eric", + "name": "Sen. Benjamin Sasse [R-NE]", + "namemod": "", + "nickname": "", + "osid": "N00035544", + "pvsid": "150182", + "sortname": "Sasse, Benjamin (Sen.) [R-NE]", + "twitterid": "SenSasse", + "youtubeid": null + }, + "phone": "202-224-4224", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2015-01-06", + "state": "NE", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.sasse.senate.gov/public" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Idaho", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "239 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.crapo.senate.gov/contact", + "fax": "202-228-1375", + "office": "239 Dirksen Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "C000880", + "birthday": "1951-05-20", + "cspanid": 26440, + "firstname": "Michael", + "gender": "male", + "gender_label": "Male", + "lastname": "Crapo", + "link": "https://www.govtrack.us/congress/members/michael_crapo/300030", + "middlename": "D.", + "name": "Sen. Michael Crapo [R-ID]", + "namemod": "", + "nickname": "", + "osid": "N00006267", + "pvsid": "26830", + "sortname": "Crapo, Michael (Sen.) [R-ID]", + "twitterid": "MikeCrapo", + "youtubeid": "senatorcrapo" + }, + "phone": "202-224-6142", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "ID", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.crapo.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Iowa", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "135 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.grassley.senate.gov/contact", + "fax": "202-224-6020", + "office": "135 Hart Senate Office Building", + "rss_url": "http://grassley.senate.gov/customcf/rss_feed.cfm" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "G000386", + "birthday": "1933-09-17", + "cspanid": 1167, + "firstname": "Charles", + "gender": "male", + "gender_label": "Male", + "lastname": "Grassley", + "link": "https://www.govtrack.us/congress/members/charles_grassley/300048", + "middlename": "E.", + "name": "Sen. Charles “Chuck” Grassley [R-IA]", + "namemod": "", + "nickname": "Chuck", + "osid": "N00001758", + "pvsid": "53293", + "sortname": "Grassley, Charles “Chuck” (Sen.) [R-IA]", + "twitterid": "ChuckGrassley", + "youtubeid": "senchuckgrassley" + }, + "phone": "202-224-3744", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "IA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.grassley.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Vermont", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "437 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.leahy.senate.gov/contact/", + "fax": "202-224-3479", + "office": "437 Russell Senate Office Building", + "rss_url": "http://www.leahy.senate.gov/rss/feeds/press/" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "L000174", + "birthday": "1940-03-31", + "cspanid": 1552, + "firstname": "Patrick", + "gender": "male", + "gender_label": "Male", + "lastname": "Leahy", + "link": "https://www.govtrack.us/congress/members/patrick_leahy/300065", + "middlename": "J.", + "name": "Sen. Patrick Leahy [D-VT]", + "namemod": "", + "nickname": "", + "osid": "N00009918", + "pvsid": "53353", + "sortname": "Leahy, Patrick (Sen.) [D-VT]", + "twitterid": "SenatorLeahy", + "youtubeid": "SenatorPatrickLeahy" + }, + "phone": "202-224-4242", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "VT", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.leahy.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Alaska", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "522 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.murkowski.senate.gov/public/index.cfm/contact", + "fax": "202-224-5301", + "office": "522 Hart Senate Office Building", + "rss_url": "http://www.murkowski.senate.gov/public/?a=rss.feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "M001153", + "birthday": "1957-05-22", + "cspanid": 1004138, + "firstname": "Lisa", + "gender": "female", + "gender_label": "Female", + "lastname": "Murkowski", + "link": "https://www.govtrack.us/congress/members/lisa_murkowski/300075", + "middlename": "A.", + "name": "Sen. Lisa Murkowski [R-AK]", + "namemod": "", + "nickname": "", + "osid": "N00026050", + "pvsid": "15841", + "sortname": "Murkowski, Lisa (Sen.) [R-AK]", + "twitterid": "LisaMurkowski", + "youtubeid": "senatormurkowski" + }, + "phone": "202-224-6665", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "AK", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.murkowski.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Washington", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "154 Russell Senate Office Building Washington DC 20510", + "contact_form": "http://www.murray.senate.gov/public/index.cfm/contactme", + "fax": "202-224-0238", + "office": "154 Russell Senate Office Building", + "rss_url": "http://www.murray.senate.gov/public/?a=rss.feed" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "M001111", + "birthday": "1950-10-11", + "cspanid": 25277, + "firstname": "Patty", + "gender": "female", + "gender_label": "Female", + "lastname": "Murray", + "link": "https://www.govtrack.us/congress/members/patty_murray/300076", + "middlename": "", + "name": "Sen. Patty Murray [D-WA]", + "namemod": "", + "nickname": "", + "osid": "N00007876", + "pvsid": "53358", + "sortname": "Murray, Patty (Sen.) [D-WA]", + "twitterid": "PattyMurray", + "youtubeid": "SenatorPattyMurray" + }, + "phone": "202-224-2621", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "WA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.murray.senate.gov/public" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for New York", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "322 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.schumer.senate.gov/contact/email-chuck", + "fax": "202-228-3027", + "office": "322 Hart Senate Office Building" + }, + "leadership_title": "Minority Leader", + "party": "Democrat", + "person": { + "bioguideid": "S000148", + "birthday": "1950-11-23", + "cspanid": 5929, + "firstname": "Charles", + "gender": "male", + "gender_label": "Male", + "lastname": "Schumer", + "link": "https://www.govtrack.us/congress/members/charles_schumer/300087", + "middlename": "E.", + "name": "Sen. Charles “Chuck” Schumer [D-NY]", + "namemod": "", + "nickname": "Chuck", + "osid": "N00001093", + "pvsid": "26976", + "sortname": "Schumer, Charles “Chuck” (Sen.) [D-NY]", + "twitterid": "SenSchumer", + "youtubeid": "SenatorSchumer" + }, + "phone": "202-224-6542", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "NY", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.schumer.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Alabama", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "304 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.shelby.senate.gov/public/index.cfm/emailsenatorshelby", + "fax": "202-224-3416", + "office": "304 Russell Senate Office Building", + "rss_url": "http://www.shelby.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "S000320", + "birthday": "1934-05-06", + "cspanid": 1859, + "firstname": "Richard", + "gender": "male", + "gender_label": "Male", + "lastname": "Shelby", + "link": "https://www.govtrack.us/congress/members/richard_shelby/300089", + "middlename": "C.", + "name": "Sen. Richard Shelby [R-AL]", + "namemod": "", + "nickname": "", + "osid": "N00009920", + "pvsid": "53266", + "sortname": "Shelby, Richard (Sen.) [R-AL]", + "twitterid": "SenShelby", + "youtubeid": "SenatorRichardShelby" + }, + "phone": "202-224-5744", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "AL", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.shelby.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Oregon", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "221 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.wyden.senate.gov/contact/", + "fax": "202-228-2717", + "office": "221 Dirksen Senate Office Building", + "rss_url": "http://www.wyden.senate.gov/rss/feeds/?type=all&" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "W000779", + "birthday": "1949-05-03", + "cspanid": 1962, + "firstname": "Ron", + "gender": "male", + "gender_label": "Male", + "lastname": "Wyden", + "link": "https://www.govtrack.us/congress/members/ron_wyden/300100", + "middlename": "", + "name": "Sen. Ron Wyden [D-OR]", + "namemod": "", + "nickname": "", + "osid": "N00007724", + "pvsid": "27036", + "sortname": "Wyden, Ron (Sen.) [D-OR]", + "twitterid": "RonWyden", + "youtubeid": "senronwyden" + }, + "phone": "202-224-5244", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "OR", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.wyden.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Missouri", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "260 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.blunt.senate.gov/public/index.cfm/contact-roy", + "fax": "202-224-8149", + "office": "260 Russell Senate Office Building", + "rss_url": "http://www.blunt.senate.gov/public/?a=rss.feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "B000575", + "birthday": "1950-01-10", + "cspanid": 45465, + "firstname": "Roy", + "gender": "male", + "gender_label": "Male", + "lastname": "Blunt", + "link": "https://www.govtrack.us/congress/members/roy_blunt/400034", + "middlename": "", + "name": "Sen. Roy Blunt [R-MO]", + "namemod": "", + "nickname": "", + "osid": "N00005195", + "pvsid": "418", + "sortname": "Blunt, Roy (Sen.) [R-MO]", + "twitterid": "RoyBlunt", + "youtubeid": "SenatorBlunt" + }, + "phone": "202-224-5721", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "MO", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.blunt.senate.gov/public" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Arkansas", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "141 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.boozman.senate.gov/public/index.cfm/contact", + "fax": "202-228-1371", + "office": "141 Hart Senate Office Building", + "rss_url": "http://www.boozman.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "B001236", + "birthday": "1950-12-10", + "cspanid": 92069, + "firstname": "John", + "gender": "male", + "gender_label": "Male", + "lastname": "Boozman", + "link": "https://www.govtrack.us/congress/members/john_boozman/400040", + "middlename": "", + "name": "Sen. John Boozman [R-AR]", + "namemod": "", + "nickname": "", + "osid": "N00013873", + "pvsid": "27958", + "sortname": "Boozman, John (Sen.) [R-AR]", + "twitterid": "JohnBoozman", + "youtubeid": "BoozmanPressOffice" + }, + "phone": "202-224-4843", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "AR", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.boozman.senate.gov/public" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for North Carolina", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "217 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.burr.senate.gov/contact/email", + "fax": "202-228-2981", + "office": "217 Russell Senate Office Building", + "rss_url": "http://www.burr.senate.gov/public/index.cfm?fuseaction=rss.feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "B001135", + "birthday": "1955-11-30", + "cspanid": 31054, + "firstname": "Richard", + "gender": "male", + "gender_label": "Male", + "lastname": "Burr", + "link": "https://www.govtrack.us/congress/members/richard_burr/400054", + "middlename": "M.", + "name": "Sen. Richard Burr [R-NC]", + "namemod": "", + "nickname": "", + "osid": "N00002221", + "pvsid": "21787", + "sortname": "Burr, Richard (Sen.) [R-NC]", + "twitterid": "SenatorBurr", + "youtubeid": "SenatorRichardBurr" + }, + "phone": "202-224-3154", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "NC", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.burr.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Georgia", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "131 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.isakson.senate.gov/public/index.cfm/email-me", + "fax": "202-228-0724", + "office": "131 Russell Senate Office Building", + "rss_url": "http://www.isakson.senate.gov/public/?a=RSS.Feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "I000055", + "birthday": "1944-12-28", + "cspanid": 59135, + "firstname": "John", + "gender": "male", + "gender_label": "Male", + "lastname": "Isakson", + "link": "https://www.govtrack.us/congress/members/john_isakson/400194", + "middlename": "H.", + "name": "Sen. John “Johnny” Isakson [R-GA]", + "namemod": "", + "nickname": "Johnny", + "osid": "N00002593", + "pvsid": "1721", + "sortname": "Isakson, John “Johnny” (Sen.) [R-GA]", + "twitterid": "SenatorIsakson", + "youtubeid": "SenatorIsakson" + }, + "phone": "202-224-3643", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "GA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.isakson.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Kansas", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "521 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.moran.senate.gov/public/index.cfm/e-mail-jerry", + "fax": "202-228-6966", + "office": "521 Dirksen Senate Office Building", + "rss_url": "http://www.moran.senate.gov/public/index.cfm/rss/feed/" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "M000934", + "birthday": "1954-05-29", + "cspanid": 45469, + "firstname": "Jerry", + "gender": "male", + "gender_label": "Male", + "lastname": "Moran", + "link": "https://www.govtrack.us/congress/members/jerry_moran/400284", + "middlename": "", + "name": "Sen. Jerry Moran [R-KS]", + "namemod": "", + "nickname": "", + "osid": "N00005282", + "pvsid": "542", + "sortname": "Moran, Jerry (Sen.) [R-KS]", + "twitterid": "JerryMoran", + "youtubeid": "senatorjerrymoran" + }, + "phone": "202-224-6521", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "KS", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.moran.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Ohio", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "448 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.portman.senate.gov/public/index.cfm/contact?p=contact-form", + "office": "448 Russell Senate Office Building", + "rss_url": "http://www.portman.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "P000449", + "birthday": "1955-12-19", + "cspanid": 31819, + "firstname": "Robert", + "gender": "male", + "gender_label": "Male", + "lastname": "Portman", + "link": "https://www.govtrack.us/congress/members/robert_portman/400325", + "middlename": "J.", + "name": "Sen. Robert “Rob” Portman [R-OH]", + "namemod": "", + "nickname": "Rob", + "osid": "N00003682", + "pvsid": "27008", + "sortname": "Portman, Robert “Rob” (Sen.) [R-OH]", + "twitterid": "SenRobPortman", + "youtubeid": "SenRobPortman" + }, + "phone": "202-224-3353", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "OH", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.portman.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Pennsylvania", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "248 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.toomey.senate.gov/?p=contact", + "fax": "202-228-0284", + "office": "248 Russell Senate Office Building", + "rss_url": "http://toomey.senate.gov/rss/?p=hot_topic" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "T000461", + "birthday": "1961-11-17", + "cspanid": 7958, + "firstname": "Patrick", + "gender": "male", + "gender_label": "Male", + "lastname": "Toomey", + "link": "https://www.govtrack.us/congress/members/patrick_toomey/400408", + "middlename": "J.", + "name": "Sen. Patrick “Pat” Toomey [R-PA]", + "namemod": "", + "nickname": "Pat", + "osid": "N00001489", + "pvsid": "24096", + "sortname": "Toomey, Patrick “Pat” (Sen.) [R-PA]", + "twitterid": "SenToomey", + "youtubeid": "sentoomey" + }, + "phone": "202-224-4254", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "PA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.toomey.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Maryland", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "110 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.vanhollen.senate.gov/contact/email", + "fax": "202-225-0375", + "office": "110 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "V000128", + "birthday": "1959-01-10", + "cspanid": 20756, + "firstname": "Chris", + "gender": "male", + "gender_label": "Male", + "lastname": "Van Hollen", + "link": "https://www.govtrack.us/congress/members/chris_van_hollen/400415", + "middlename": "", + "name": "Sen. Chris Van Hollen [D-MD]", + "namemod": "Jr.", + "nickname": "", + "osid": "N00013820", + "pvsid": "6098", + "sortname": "Van Hollen, Chris (Sen.) [D-MD]", + "twitterid": "ChrisVanHollen", + "youtubeid": "RepChrisVanHollen" + }, + "phone": "202-224-4654", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "MD", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.vanhollen.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for South Dakota", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "511 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "http://www.thune.senate.gov/public/index.cfm/contact", + "fax": "202-228-5429", + "office": "511 Dirksen Senate Office Building", + "rss_url": "http://www.thune.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "T000250", + "birthday": "1961-01-07", + "cspanid": 45552, + "firstname": "John", + "gender": "male", + "gender_label": "Male", + "lastname": "Thune", + "link": "https://www.govtrack.us/congress/members/john_thune/400546", + "middlename": "", + "name": "Sen. John Thune [R-SD]", + "namemod": "", + "nickname": "", + "osid": "N00004572", + "pvsid": "398", + "sortname": "Thune, John (Sen.) [R-SD]", + "twitterid": "SenJohnThune", + "youtubeid": "johnthune" + }, + "phone": "202-224-2321", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "SD", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.thune.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Colorado", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "261 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.bennet.senate.gov/public/index.cfm/contact", + "fax": "202-228-5097", + "office": "261 Russell Senate Office Building", + "rss_url": "http://www.bennet.senate.gov/rss/feeds/?type=news" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "B001267", + "birthday": "1964-11-28", + "cspanid": 1031622, + "firstname": "Michael", + "gender": "male", + "gender_label": "Male", + "lastname": "Bennet", + "link": "https://www.govtrack.us/congress/members/michael_bennet/412330", + "middlename": "F.", + "name": "Sen. Michael Bennet [D-CO]", + "namemod": "", + "nickname": "", + "osid": "N00030608", + "pvsid": "110942", + "sortname": "Bennet, Michael (Sen.) [D-CO]", + "twitterid": "SenBennetCo", + "youtubeid": "SenatorBennet" + }, + "phone": "202-224-5852", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "CO", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.bennet.senate.gov/public" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Indiana", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "400 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.young.senate.gov/contact", + "fax": "202-226-6866", + "office": "400 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "Y000064", + "birthday": "1972-08-24", + "cspanid": 1033743, + "firstname": "Todd", + "gender": "male", + "gender_label": "Male", + "lastname": "Young", + "link": "https://www.govtrack.us/congress/members/todd_young/412428", + "middlename": "C.", + "name": "Sen. Todd Young [R-IN]", + "namemod": "", + "nickname": "", + "osid": "N00030670", + "pvsid": "120345", + "sortname": "Young, Todd (Sen.) [R-IN]", + "twitterid": "SenToddYoung", + "youtubeid": "RepToddYoung" + }, + "phone": "202-224-5623", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "IN", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.young.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Oklahoma", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "316 Hart Senate Office Building Washington DC 20510", + "contact_form": "http://www.lankford.senate.gov/contact/email", + "office": "316 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "L000575", + "birthday": "1968-03-04", + "cspanid": 1033847, + "firstname": "James", + "gender": "male", + "gender_label": "Male", + "lastname": "Lankford", + "link": "https://www.govtrack.us/congress/members/james_lankford/412464", + "middlename": "", + "name": "Sen. James Lankford [R-OK]", + "namemod": "", + "nickname": "", + "osid": "N00031129", + "pvsid": "124938", + "sortname": "Lankford, James (Sen.) [R-OK]", + "twitterid": "SenatorLankford", + "youtubeid": "SenatorLankford" + }, + "phone": "202-224-5754", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "OK", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.lankford.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for South Carolina", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "717 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.scott.senate.gov/contact/email-me", + "fax": "202-225-3407", + "office": "717 Hart Senate Office Building", + "rss_url": "http://www.scott.senate.gov/rss.xml" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "S001184", + "birthday": "1965-09-19", + "cspanid": 623506, + "firstname": "Tim", + "gender": "male", + "gender_label": "Male", + "lastname": "Scott", + "link": "https://www.govtrack.us/congress/members/tim_scott/412471", + "middlename": "", + "name": "Sen. Tim Scott [R-SC]", + "namemod": "", + "nickname": "", + "osid": "N00031782", + "pvsid": "11940", + "sortname": "Scott, Tim (Sen.) [R-SC]", + "twitterid": "SenatorTimScott", + "youtubeid": "SenatorTimScott" + }, + "phone": "202-224-6121", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "SC", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.scott.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Connecticut", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "706 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.blumenthal.senate.gov/contact/", + "fax": "202-224-9673", + "office": "706 Hart Senate Office Building", + "rss_url": "http://www.blumenthal.senate.gov/rss/feeds/?type=all" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "B001277", + "birthday": "1946-02-13", + "cspanid": 21799, + "firstname": "Richard", + "gender": "male", + "gender_label": "Male", + "lastname": "Blumenthal", + "link": "https://www.govtrack.us/congress/members/richard_blumenthal/412490", + "middlename": "", + "name": "Sen. Richard Blumenthal [D-CT]", + "namemod": "", + "nickname": "", + "osid": "N00031685", + "pvsid": "1568", + "sortname": "Blumenthal, Richard (Sen.) [D-CT]", + "twitterid": "SenBlumenthal", + "youtubeid": "SenatorBlumenthal" + }, + "phone": "202-224-2823", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "CT", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.blumenthal.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Florida", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "284 Russell Senate Office Building Washington DC 20510", + "contact_form": "http://www.rubio.senate.gov/public/index.cfm/contact", + "fax": "202-228-0285", + "office": "284 Russell Senate Office Building", + "rss_url": "http://www.rubio.senate.gov/public/?a=rss.feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "R000595", + "birthday": "1971-05-28", + "cspanid": 87599, + "firstname": "Marco", + "gender": "male", + "gender_label": "Male", + "lastname": "Rubio", + "link": "https://www.govtrack.us/congress/members/marco_rubio/412491", + "middlename": "", + "name": "Sen. Marco Rubio [R-FL]", + "namemod": "", + "nickname": "", + "osid": "N00030612", + "pvsid": "1601", + "sortname": "Rubio, Marco (Sen.) [R-FL]", + "twitterid": "SenRubioPress", + "youtubeid": "SenatorMarcoRubio" + }, + "phone": "202-224-3041", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "FL", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.rubio.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Kentucky", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "167 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.paul.senate.gov/connect/email-rand", + "fax": "202-228-1373", + "office": "167 Russell Senate Office Building", + "rss_url": "http://paul.senate.gov/rss/?p=news" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "P000603", + "birthday": "1963-01-07", + "cspanid": 9265241, + "firstname": "Rand", + "gender": "male", + "gender_label": "Male", + "lastname": "Paul", + "link": "https://www.govtrack.us/congress/members/rand_paul/412492", + "middlename": "", + "name": "Sen. Rand Paul [R-KY]", + "namemod": "", + "nickname": "", + "osid": "N00030836", + "pvsid": "117285", + "sortname": "Paul, Rand (Sen.) [R-KY]", + "twitterid": "RandPaul", + "youtubeid": "SenatorRandPaul" + }, + "phone": "202-224-4343", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "KY", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.paul.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for North Dakota", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "338 Russell Senate Office Building Washington DC 20510", + "contact_form": "http://www.hoeven.senate.gov/public/index.cfm/email-the-senator", + "fax": "202-224-7999", + "office": "338 Russell Senate Office Building", + "rss_url": "http://www.hoeven.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "H001061", + "birthday": "1957-03-13", + "cspanid": 85233, + "firstname": "John", + "gender": "male", + "gender_label": "Male", + "lastname": "Hoeven", + "link": "https://www.govtrack.us/congress/members/john_hoeven/412494", + "middlename": "", + "name": "Sen. John Hoeven [R-ND]", + "namemod": "", + "nickname": "", + "osid": "N00031688", + "pvsid": "41788", + "sortname": "Hoeven, John (Sen.) [R-ND]", + "twitterid": "SenJohnHoeven", + "youtubeid": "senatorjohnhoevennd" + }, + "phone": "202-224-2551", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "ND", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.hoeven.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Utah", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "361A Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.lee.senate.gov/public/index.cfm/contact", + "office": "361a Russell Senate Office Building", + "rss_url": "http://www.lee.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "L000577", + "birthday": "1971-06-04", + "cspanid": 9267977, + "firstname": "Mike", + "gender": "male", + "gender_label": "Male", + "lastname": "Lee", + "link": "https://www.govtrack.us/congress/members/mike_lee/412495", + "middlename": "", + "name": "Sen. Mike Lee [R-UT]", + "namemod": "", + "nickname": "", + "osid": "N00031696", + "pvsid": "66395", + "sortname": "Lee, Mike (Sen.) [R-UT]", + "twitterid": "SenMikeLee", + "youtubeid": "senatormikelee" + }, + "phone": "202-224-5444", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "UT", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.lee.senate.gov/public" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Wisconsin", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "328 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.ronjohnson.senate.gov/public/index.cfm/email-the-senator", + "fax": "920-230-7262", + "office": "328 Hart Senate Office Building", + "rss_url": "http://www.ronjohnson.senate.gov/public/index.cfm/rss/feed" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "J000293", + "birthday": "1955-04-08", + "cspanid": 62835, + "firstname": "Ron", + "gender": "male", + "gender_label": "Male", + "lastname": "Johnson", + "link": "https://www.govtrack.us/congress/members/ron_johnson/412496", + "middlename": "", + "name": "Sen. Ron Johnson [R-WI]", + "namemod": "", + "nickname": "", + "osid": "N00032546", + "pvsid": "126217", + "sortname": "Johnson, Ron (Sen.) [R-WI]", + "twitterid": "SenRonJohnson", + "youtubeid": "SenatorRonJohnson" + }, + "phone": "202-224-5323", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "WI", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.ronjohnson.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Senior Senator for Hawaii", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "722 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.schatz.senate.gov/contact", + "fax": "202-228-1153", + "office": "722 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "S001194", + "birthday": "1972-10-20", + "cspanid": 87784, + "firstname": "Brian", + "gender": "male", + "gender_label": "Male", + "lastname": "Schatz", + "link": "https://www.govtrack.us/congress/members/brian_schatz/412507", + "middlename": "Emanuel", + "name": "Sen. Brian Schatz [D-HI]", + "namemod": "", + "nickname": "", + "osid": "N00028138", + "pvsid": "17852", + "sortname": "Schatz, Brian (Sen.) [D-HI]", + "twitterid": "SenBrianSchatz", + "youtubeid": "senbrianschatz" + }, + "phone": "202-224-3934", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "senior", + "senator_rank_label": "Senior", + "startdate": "2017-01-03", + "state": "HI", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.schatz.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Illinois", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "524 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.duckworth.senate.gov/content/contact-senator", + "office": "524 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "D000622", + "birthday": "1968-03-12", + "cspanid": 94484, + "firstname": "Tammy", + "gender": "female", + "gender_label": "Female", + "lastname": "Duckworth", + "link": "https://www.govtrack.us/congress/members/tammy_duckworth/412533", + "middlename": "", + "name": "Sen. Tammy Duckworth [D-IL]", + "namemod": "", + "nickname": "", + "osid": "N00027860", + "pvsid": "57442", + "sortname": "Duckworth, Tammy (Sen.) [D-IL]", + "twitterid": "SenDuckworth", + "youtubeid": "repduckworth" + }, + "phone": "202-224-2854", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "IL", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.duckworth.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for California", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "112 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.harris.senate.gov/contact", + "office": "112 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "H001075", + "birthday": "1964-10-20", + "cspanid": 1018696, + "firstname": "Kamala", + "gender": "female", + "gender_label": "Female", + "lastname": "Harris", + "link": "https://www.govtrack.us/congress/members/kamala_harris/412678", + "middlename": "", + "name": "Sen. Kamala Harris [D-CA]", + "namemod": "", + "nickname": "", + "osid": "N00036915", + "pvsid": "120012", + "sortname": "Harris, Kamala (Sen.) [D-CA]", + "twitterid": "SenKamalaHarris", + "youtubeid": null + }, + "phone": "202-224-3553", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "CA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.harris.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Louisiana", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "383 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.kennedy.senate.gov/public/email-me", + "office": "383 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "K000393", + "birthday": "1951-11-21", + "cspanid": 1011723, + "firstname": "John", + "gender": "male", + "gender_label": "Male", + "lastname": "Kennedy", + "link": "https://www.govtrack.us/congress/members/john_kennedy/412679", + "middlename": "Neely", + "name": "Sen. John Kennedy [R-LA]", + "namemod": "", + "nickname": "", + "osid": "N00026823", + "pvsid": "35496", + "sortname": "Kennedy, John (Sen.) [R-LA]", + "twitterid": "SenJohnKennedy", + "youtubeid": null + }, + "phone": "202-224-4623", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "LA", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.kennedy.senate.gov/public" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for New Hampshire", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "330 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.hassan.senate.gov/content/contact-senator", + "office": "330 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "H001076", + "birthday": "1958-02-27", + "cspanid": 67481, + "firstname": "Margaret", + "gender": "female", + "gender_label": "Female", + "lastname": "Hassan", + "link": "https://www.govtrack.us/congress/members/margaret_hassan/412680", + "middlename": "Wood", + "name": "Sen. Margaret “Maggie” Hassan [D-NH]", + "namemod": "", + "nickname": "Maggie", + "osid": "N00038397", + "pvsid": "42552", + "sortname": "Hassan, Margaret “Maggie” (Sen.) [D-NH]", + "twitterid": "Senatorhassan", + "youtubeid": null + }, + "phone": "202-224-3324", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "NH", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.hassan.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116, + 117 + ], + "current": true, + "description": "Junior Senator for Nevada", + "district": null, + "enddate": "2023-01-03", + "extra": { + "address": "204 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.cortezmasto.senate.gov/contact", + "office": "204 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "C001113", + "birthday": "1964-03-29", + "cspanid": 105698, + "firstname": "Catherine", + "gender": "female", + "gender_label": "Female", + "lastname": "Cortez Masto", + "link": "https://www.govtrack.us/congress/members/catherine_cortez_masto/412681", + "middlename": "", + "name": "Sen. Catherine Cortez Masto [D-NV]", + "namemod": "", + "nickname": "", + "osid": "N00037161", + "pvsid": "69579", + "sortname": "Cortez Masto, Catherine (Sen.) [D-NV]", + "twitterid": "sencortezmasto", + "youtubeid": null + }, + "phone": "202-224-3542", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2017-01-03", + "state": "NV", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.cortezmasto.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Alabama", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "326 Russell Senate Office Building Washington DC 20510", + "contact_form": "https://www.jones.senate.gov/content/contact-senator", + "office": "326 Russell Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "J000300", + "birthday": "1954-05-04", + "cspanid": 1024592, + "firstname": "Doug", + "gender": "male", + "gender_label": "Male", + "lastname": "Jones", + "link": "https://www.govtrack.us/congress/members/doug_jones/412741", + "middlename": "", + "name": "Sen. Doug Jones [D-AL]", + "namemod": "", + "nickname": "", + "osid": "N00024817", + "pvsid": "176464", + "sortname": "Jones, Doug (Sen.) [D-AL]", + "twitterid": "sendougjones", + "youtubeid": null + }, + "phone": "202-224-4124", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2018-01-03", + "state": "AL", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.jones.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115 + ], + "current": true, + "description": "Junior Senator for Mississippi", + "district": null, + "enddate": "2018-11-27", + "extra": { + "address": "G12 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.hydesmith.senate.gov/content/contact-senator", + "end-type": "special-election", + "how": "appointment", + "office": "G12 Dirksen Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "H001079", + "birthday": "1959-05-10", + "cspanid": null, + "firstname": "Cindy", + "gender": "female", + "gender_label": "Female", + "lastname": "Hyde-Smith", + "link": "https://www.govtrack.us/congress/members/cindy_hyde_smith/412743", + "middlename": "", + "name": "Sen. Cindy Hyde-Smith [R-MS]", + "namemod": "", + "nickname": "", + "osid": "N00043298", + "pvsid": null, + "sortname": "Hyde-Smith, Cindy (Sen.) [R-MS]", + "twitterid": "SenHydeSmith", + "youtubeid": null + }, + "phone": "202-224-5054", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2018-04-09", + "state": "MS", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.hydesmith.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Arizona", + "district": null, + "enddate": "2020-11-03", + "extra": { + "address": "G12 Dirksen Senate Office Building Washington DC 20510", + "contact_form": "https://www.kyl.senate.gov/content/contact-senator-kyl", + "end-type": "special-election", + "fax": "202-228-2862", + "how": "appointment", + "office": "G12 Dirksen Senate Office Building" + }, + "leadership_title": null, + "party": "Republican", + "person": { + "bioguideid": "K000352", + "birthday": "1942-04-25", + "cspanid": null, + "firstname": "Jon", + "gender": "male", + "gender_label": "Male", + "lastname": "Kyl", + "link": "https://www.govtrack.us/congress/members/jon_kyl/300062", + "middlename": "", + "name": "Sen. Jon Kyl [R-AZ]", + "namemod": "", + "nickname": "", + "osid": "N00006406", + "pvsid": "26721", + "sortname": "Kyl, Jon (Sen.) [R-AZ]", + "twitterid": null, + "youtubeid": null + }, + "phone": "202-224-2235", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class3", + "senator_class_label": "Class 3", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2018-09-05", + "state": "AZ", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.kyl.senate.gov" +}, +{ + "caucus": null, + "congress_numbers": [ + 115, + 116 + ], + "current": true, + "description": "Junior Senator for Minnesota", + "district": null, + "enddate": "2021-01-03", + "extra": { + "address": "309 Hart Senate Office Building Washington DC 20510", + "contact_form": "https://www.smith.senate.gov/content/contact-senator", + "office": "309 Hart Senate Office Building" + }, + "leadership_title": null, + "party": "Democrat", + "person": { + "bioguideid": "S001203", + "birthday": "1958-03-04", + "cspanid": 111313, + "firstname": "Tina", + "gender": "female", + "gender_label": "Female", + "lastname": "Smith", + "link": "https://www.govtrack.us/congress/members/tina_smith/412742", + "middlename": "Flint", + "name": "Sen. Tina Smith [D-MN]", + "namemod": "", + "nickname": "", + "osid": "N00042353", + "pvsid": "152968", + "sortname": "Smith, Tina (Sen.) [D-MN]", + "twitterid": "SenTinaSmith", + "youtubeid": null + }, + "phone": "202-224-5641", + "role_type": "senator", + "role_type_label": "Senator", + "senator_class": "class2", + "senator_class_label": "Class 2", + "senator_rank": "junior", + "senator_rank_label": "Junior", + "startdate": "2018-11-07", + "state": "MN", + "title": "Sen.", + "title_long": "Senator", + "website": "https://www.smith.senate.gov" +} \ No newline at end of file diff --git a/tests/integration/test_select_object_client.py b/tests/integration/test_select_object_client.py new file mode 100644 index 0000000..7588efe --- /dev/null +++ b/tests/integration/test_select_object_client.py @@ -0,0 +1,472 @@ +# pylint: skip-file +import base64 +import csv +import json +import re + +import alibabacloud_oss_v2 as oss +from . import TestIntegration, OBJECTNAME_PREFIX, random_str + + +class TestSelectObject(TestIntegration): + def test_select_object_csv(self): + def select_call_back(consumed_bytes, total_bytes=None): + print('Consumed Bytes:' + str(consumed_bytes) + '\n') + + data = "name,school,company,age\nLora Francis,School,Staples Inc,27\n#Lora Francis,School,Staples Inc,27\nEleanor Little,School,\"Conectiv, Inc\",43\nRosie Hughes,School,Western Gas Resources Inc,44\nLawrence Ross,School,MetLife Inc.,24\n" + key = 'select_object_csv.csv' + expression = 'select * from ossobject' + result = self.client.put_object(oss.PutObjectRequest( + bucket=self.bucket_name, + key=key, + acl=oss.ObjectACLType.PRIVATE, + body=data, + content_type='text/txt', + )) + self.assertEqual(200, result.status_code) + + request = oss.SelectObjectRequest( + headers={'content-length': '422'}, + bucket=self.bucket_name, + key=key, + select_request=oss.SelectRequest( + expression=base64.b64encode(expression.encode()).decode(), + input_serialization=oss.InputSerialization( + compression_type=None, + csv_input=oss.CSVInput( + file_header_info='Ignore', + record_delimiter=base64.b64encode('\n'.encode()).decode(), + field_delimiter=base64.b64encode(','.encode()).decode(), + quote_character=base64.b64encode('\"'.encode()).decode(), + comment_character=base64.b64encode('#'.encode()).decode(), + allow_quoted_record_delimiter=True, + ), + ), + output_serialization=oss.OutputSerialization( + csv_output=oss.CSVOutput( + record_delimiter=base64.b64encode('\n'.encode()).decode(), + field_delimiter=base64.b64encode(','.encode()).decode(), + quote_character=base64.b64encode('\"'.encode()).decode(), + ), + output_raw_data=False, + keep_all_columns=True, + enable_payload_crc=True, + output_header=False, + ), + options=oss.SelectOptions( + skip_partial_data_record=False, + ), + ), + progress_callback=select_call_back, + ) + result = self.client.select_object(request) + self.assertIsNotNone(result) + self.assertEqual(206, result.status_code) + content = b'' + try: + for chunk in result.body: + content += chunk + except Exception as e: + print(e) + self.assertEqual(str(data.split('#')[1]).encode(), content) + + def test_select_object_csv_file_concat(self): + key = 'sample_data_concat.csv' + expression = "select Year,StateAbbr, CityName, Short_Question_Text from ossobject where (data_value || data_value_unit) = '14.8%'" + file_path = '../tests/data/sample_data.csv' + + result = self.client.put_object_from_file(oss.PutObjectRequest( + bucket=self.bucket_name, + key=key, + ), file_path) + self.assertEqual(200, result.status_code) + + request = oss.SelectObjectRequest( + bucket=self.bucket_name, + key=key, + select_request=oss.SelectRequest( + expression=base64.b64encode(expression.encode()).decode(), + input_serialization=oss.InputSerialization( + csv_input=oss.CSVInput( + file_header_info='Use', + ), + ), + + ), + ) + result = self.client.select_object(request) + self.assertIsNotNone(result) + self.assertEqual(206, result.status_code) + + content = b'' + try: + for chunk in result.body: + content += chunk + except Exception as e: + print(e) + print(f'content: {content}') + + select_data = b'' + with open(file_path, 'r', encoding='utf-8') as csvfile: + spamreader = csv.DictReader(csvfile, delimiter=',', quotechar='"') + for row in spamreader: + line = b'' + if row['Data_Value_Unit'] == '%' and row['Data_Value'] == '14.8': + line += row['Year'].encode('utf-8') + line += ','.encode('utf-8') + line += row['StateAbbr'].encode('utf-8') + line += ','.encode('utf-8') + line += row['CityName'].encode('utf-8') + line += ','.encode('utf-8') + line += row['Short_Question_Text'].encode('utf-8') + line += '\n'.encode('utf-8') + select_data += line + + print(select_data) + self.assertEqual(select_data, content) + + def test_select_object_csv_file_complicate_condition(self): + key = 'sample_data_complicate_condition.csv' + expression = "select Year,StateAbbr, CityName, Short_Question_Text, data_value, data_value_unit, category, high_confidence_limit from ossobject where data_value > 14.8 and data_value_unit = '%' or Measure like '%18 Years' and Category = 'Unhealthy Behaviors' or high_confidence_limit > 70.0 " + file_path = '../tests/data/sample_data.csv' + + result = self.client.put_object_from_file(oss.PutObjectRequest( + bucket=self.bucket_name, + key=key, + ), file_path) + self.assertEqual(200, result.status_code) + + request = oss.SelectObjectRequest( + bucket=self.bucket_name, + key=key, + select_request=oss.SelectRequest( + expression=base64.b64encode(expression.encode()).decode(), + input_serialization=oss.InputSerialization( + csv_input=oss.CSVInput( + file_header_info='Use', + ), + ), + + ), + ) + result = self.client.select_object(request) + self.assertIsNotNone(result) + self.assertEqual(206, result.status_code) + + content = b'' + try: + for chunk in result.body: + content += chunk + except Exception as e: + print(e) + print(f'content: {content}') + + + matcher = re.compile('^.*18 Years$') + with open(file_path, 'r', encoding='utf-8') as csvfile: + select_data = b'' + spamreader = csv.DictReader(csvfile, delimiter=',', quotechar='"') + for row in spamreader: + line = b'' + if len(row['Data_Value']) > 0 and float(row['Data_Value']) > 14.8 and row['Data_Value_Unit'] == '%' or matcher.match(row['Measure']) and row['Category'] == 'Unhealthy Behaviors' or len(row['High_Confidence_Limit']) > 0 and float(row['High_Confidence_Limit']) > 70.0: + line += row['Year'].encode('utf-8') + line += ','.encode('utf-8') + line += row['StateAbbr'].encode('utf-8') + line += ','.encode('utf-8') + line += row['CityName'].encode('utf-8') + line += ','.encode('utf-8') + line += row['Short_Question_Text'].encode('utf-8') + line += ','.encode('utf-8') + line += row['Data_Value'].encode('utf-8') + line += ','.encode('utf-8') + line += row['Data_Value_Unit'].encode('utf-8') + line += ','.encode('utf-8') + line += row['Category'].encode('utf-8') + line += ','.encode('utf-8') + line += row['High_Confidence_Limit'].encode('utf-8') + line += '\n'.encode('utf-8') + select_data += line + print(select_data) + self.assertEqual(select_data, content) + + def test_select_object_json(self): + data = "{\t\"name\":\"Eleanor Little\",\n\t\"age\":43,\n\t\"company\":\"Conectiv, Inc\"}\n{\t\"name\":\"Rosie Hughes\",\n\t\"age\":44,\n\t\"company\":\"Western Gas Resources Inc\"}\n" + + key = "select_object_json.json" + expression = 'select * from ossobject as s where cast(s.age as int) > 40' + result = self.client.put_object(oss.PutObjectRequest( + bucket=self.bucket_name, + key=key, + acl=oss.ObjectACLType.PRIVATE, + body=data, + )) + self.assertEqual(200, result.status_code) + + request = oss.SelectObjectRequest( + bucket=self.bucket_name, + key=key, + select_request=oss.SelectRequest( + expression=base64.b64encode(expression.encode()).decode(), + input_serialization=oss.InputSerialization( + compression_type=None, + json_input=oss.JSONInput( + type='LINES', + parse_json_number_as_string=True, + ), + ), + output_serialization=oss.OutputSerialization( + json_output=oss.JSONOutput( + record_delimiter=base64.b64encode('\n'.encode()).decode(), + ), + output_raw_data=False, + keep_all_columns=True, + enable_payload_crc=True, + output_header=False, + ), + options=oss.SelectOptions( + skip_partial_data_record=False, + ), + ), + ) + result = self.client.select_object(request) + self.assertIsNotNone(result) + self.assertEqual(206, result.status_code) + content = b'' + try: + for chunk in result.body: + content += chunk + except Exception as e: + print(e) + + self.assertEqual(data.replace("\t", "").replace(",\n", ",").encode(), content) + + def test_select_object_json_file_line_range(self): + key = 'sample_json_lines_line_range.json' + expression = "select person.firstname as aaa as firstname, person.lastname, extra from ossobject'" + json_file_path = '../tests/data/sample_json.json' + json_lines_path = '../tests/data/sample_json_lines.json' + + result = self.client.put_object_from_file(oss.PutObjectRequest( + bucket=self.bucket_name, + key=key, + ), json_lines_path) + self.assertEqual(200, result.status_code) + + request = oss.CreateSelectObjectMetaRequest( + bucket=self.bucket_name, + key=key, + json_meta_request=oss.JsonMetaRequest( + input_serialization=oss.InputSerialization( + json_input=oss.JSONInput( + type='LINES', + ), + ), + ), + ) + + result = self.client.create_select_object_meta(request) + + request = oss.SelectObjectRequest( + bucket=self.bucket_name, + key=key, + select_request=oss.SelectRequest( + expression=base64.b64encode(expression.encode()).decode(), + input_serialization=oss.InputSerialization( + json_input=oss.JSONInput( + type='LINES', + range='line-range=10-50', + ), + + ), + output_serialization=oss.OutputSerialization( + json_output=oss.JSONOutput( + record_delimiter=base64.b64encode(','.encode()).decode(), + ) + ) + ), + ) + result = self.client.select_object(request) + self.assertIsNotNone(result) + self.assertEqual(206, result.status_code) + + content = b'' + try: + for chunk in result.body: + content += chunk + except Exception as e: + print(e) + print(f'content: {content}') + + content = content[0:len(content) - 1] # remove the last ',' + content = b"[" + content + b"]" # make json parser happy + result = json.loads(content.decode('utf-8')) + + result_index = 0 + with open(json_file_path, 'r', encoding='utf-8') as json_file: + data = json.load(json_file) + index = 0 + for row in data['objects']: + select_row = {} + if index >= 10 and index < 50: + select_row['firstname'] = row['person']['firstname'] + select_row['lastname'] = row['person']['lastname'] + select_row['extra'] = row['extra'] + self.assertEqual(result[result_index], select_row) + result_index += 1 + elif index >= 50: + break + index += 1 + + def test_select_object_json_file_complicate_condition(self): + key = 'sample_json_linesz_complicate_condition.json' + expression = "select person.firstname, person.lastname, congress_numbers from ossobject where startdate > '2017-01-01' and senator_rank = 'junior' or state = 'CA' and party = 'Republican'" + json_file_path = '../tests/data/sample_json.json' + json_lines_path = '../tests/data/sample_json_lines.json' + + result = self.client.put_object_from_file(oss.PutObjectRequest( + bucket=self.bucket_name, + key=key, + ), json_lines_path) + self.assertEqual(200, result.status_code) + + request = oss.CreateSelectObjectMetaRequest( + bucket=self.bucket_name, + key=key, + json_meta_request=oss.JsonMetaRequest( + input_serialization=oss.InputSerialization( + json_input=oss.JSONInput( + type='LINES', + ), + ), + ), + ) + result = self.client.create_select_object_meta(request) + + request = oss.SelectObjectRequest( + bucket=self.bucket_name, + key=key, + select_request=oss.SelectRequest( + expression=base64.b64encode(expression.encode()).decode(), + input_serialization=oss.InputSerialization( + json_input=oss.JSONInput( + type='LINES', + ), + + ), + output_serialization=oss.OutputSerialization( + json_output=oss.JSONOutput( + record_delimiter=base64.b64encode(','.encode()).decode(), + ) + ) + ), + ) + result = self.client.select_object(request) + self.assertIsNotNone(result) + self.assertEqual(206, result.status_code) + + content = b'' + try: + for chunk in result.body: + content += chunk + except Exception as e: + print(e) + print(f'content: {content}') + + content = content[0:len(content) - 1] # remove the last ',' + content = b"[" + content + b"]" # make json parser happy + result = json.loads(content.decode('utf-8')) + + result_index = 0 + with open(json_file_path, 'r', encoding='utf-8') as json_file: + data = json.load(json_file) + for row in data['objects']: + if row['startdate'] > '2017-01-01' and row['senator_rank'] == 'junior' or row['state'] == 'CA' and row['party'] == 'Republican': + self.assertEqual(result[result_index]['firstname'], row['person']['firstname']) + self.assertEqual(result[result_index]['lastname'], row['person']['lastname']) + self.assertEqual(result[result_index]['congress_numbers'], row['congress_numbers']) + result_index += 1 + + def test_select_object_csv_metadata(self): + key = 'select_object_metadata_csv.csv' + data = "name,school,company,age\nLora Francis,School,Staples Inc,27\nEleanor Little,School,\"Conectiv, Inc\",43\nRosie Hughes,School,Western Gas Resources Inc,44\nLawrence Ross,School,MetLife Inc.,24" + key = OBJECTNAME_PREFIX + random_str(16) + + result = self.client.put_object(oss.PutObjectRequest( + bucket=self.bucket_name, + key=key, + acl=oss.ObjectACLType.PRIVATE, + body=data, + content_type='text/txt', + )) + self.assertEqual(200, result.status_code) + + request = oss.CreateSelectObjectMetaRequest( + bucket=self.bucket_name, + key=key, + csv_meta_request=oss.CsvMetaRequest( + overwrite_if_exists=True, + input_serialization=oss.InputSerialization( + compression_type=None, + csv_input=oss.CSVInput( + file_header_info='NONE', + record_delimiter=base64.b64encode('\n'.encode()).decode(), + field_delimiter=base64.b64encode(','.encode()).decode(), + quote_character=base64.b64encode('\"'.encode()).decode(), + ), + ), + ), + ) + + result = self.client.create_select_object_meta(request) + + content = b'' + try: + for chunk in result.body: + content += chunk + except Exception as e: + print(e) + print(f'content: {content}') + + self.assertEqual(5, result.body.select_resp.rows) + self.assertEqual(1, result.body.select_resp.splits) + + def test_select_object_json_metadata(self): + key = 'select_object_metadata_json.json' + data = "{\n\t\"name\": \"Lora Francis\",\n\t\"age\": 27,\n\t\"company\": \"Staples Inc\"\n}\n{\n\t\"k2\": [-1, 79, 90],\n\t\"k3\": {\n\t\t\"k2\": 5,\n\t\t\"k3\": 1,\n\t\t\"k4\": 0\n\t}\n}\n{\n\t\"k1\": 1,\n\t\"k2\": {\n\t\t\"k2\": 5\n\t},\n\t\"k3\": []\n}" + key = OBJECTNAME_PREFIX + random_str(16) + + result = self.client.put_object(oss.PutObjectRequest( + bucket=self.bucket_name, + key=key, + acl=oss.ObjectACLType.PRIVATE, + body=data, + content_type='text/txt', + )) + self.assertEqual(200, result.status_code) + + request = oss.CreateSelectObjectMetaRequest( + bucket=self.bucket_name, + key=key, + json_meta_request=oss.JsonMetaRequest( + overwrite_if_exists=True, + input_serialization=oss.InputSerialization( + json_input=oss.JSONInput( + type='LINES', + ), + compression_type=None, + ), + ), + ) + + result = self.client.create_select_object_meta(request) + + content = b'' + try: + for chunk in result.body: + content += chunk + except Exception as e: + print(e) + print(f'content: {content}') + + self.assertEqual(3, result.body.select_resp.rows) + self.assertEqual(1, result.body.select_resp.splits) \ No newline at end of file diff --git a/tests/unit/models/test_select_object.py b/tests/unit/models/test_select_object.py new file mode 100644 index 0000000..c9380d0 --- /dev/null +++ b/tests/unit/models/test_select_object.py @@ -0,0 +1,410 @@ +# pylint: skip-file +import base64 +import unittest +import xml.etree.ElementTree as ET +from alibabacloud_oss_v2 import serde +from alibabacloud_oss_v2.models import select_object as model +from alibabacloud_oss_v2.types import OperationInput, OperationOutput, CaseInsensitiveDict +from .. import MockHttpResponse + + +class TestSelectObject(unittest.TestCase): + def test_constructor_request(self): + request = model.SelectObjectRequest( + bucket='bucket_name', + key='example-object-2.jpg', + ) + self.assertIsNotNone(request.bucket) + self.assertIsNotNone(request.key) + self.assertIsNone(request.select_request) + self.assertIsNone(request.request_payer) + self.assertFalse(hasattr(request, 'headers')) + self.assertFalse(hasattr(request, 'parameters')) + self.assertFalse(hasattr(request, 'payload')) + self.assertIsInstance(request, serde.RequestModel) + + request = model.SelectObjectRequest( + bucket='bucket_name', + key='example-object-2.jpg', + select_request=model.SelectRequest( + expression=base64.b64encode('select * from ossobject as s where cast(s.age as int) > 40'.encode()).decode(), + input_serialization=model.InputSerialization( + compression_type='GZIP', + json_input=model.JSONInput( + type='DOCUMENT|LINES', + range='line-range=start-end|split-range=start-end', + parse_json_number_as_string=True, + ), + csv_input=model.CSVInput( + file_header_info='DOCUMENT|LINES', + record_delimiter=base64.b64encode('\n'.encode()).decode(), + field_delimiter=base64.b64encode(','.encode()).decode(), + quote_character='\"', + comment_character='#', + range='line-range=start-end', + allow_quoted_record_delimiter=True, + ), + ), + output_serialization=model.OutputSerialization( + csv_output=model.CSVOutput( + record_delimiter=base64.b64encode('\n'.encode()).decode(), + field_delimiter=base64.b64encode(','.encode()).decode(), + quote_character=base64.b64encode('\"'.encode()).decode(), + ), + json_output=model.JSONOutput( + record_delimiter=base64.b64encode('\n'.encode()).decode(), + ), + output_raw_data=False, + keep_all_columns=True, + enable_payload_crc=True, + output_header=False, + ), + options=model.SelectOptions( + skip_partial_data_record=True, + max_skipped_records_allowed=111, + ), + ), + request_payer='requester', + ) + + self.assertEqual('bucket_name', request.bucket) + self.assertEqual('example-object-2.jpg', request.key) + self.assertEqual(base64.b64encode('select * from ossobject as s where cast(s.age as int) > 40'.encode()).decode(), request.select_request.expression) + self.assertEqual('GZIP', request.select_request.input_serialization.compression_type) + self.assertEqual('DOCUMENT|LINES', request.select_request.input_serialization.json_input.type) + self.assertEqual('line-range=start-end|split-range=start-end', request.select_request.input_serialization.json_input.range) + self.assertEqual(True, request.select_request.input_serialization.json_input.parse_json_number_as_string) + self.assertEqual('DOCUMENT|LINES', request.select_request.input_serialization.csv_input.file_header_info) + self.assertEqual(base64.b64encode('\n'.encode()).decode(), request.select_request.input_serialization.csv_input.record_delimiter) + self.assertEqual(base64.b64encode(','.encode()).decode(), request.select_request.input_serialization.csv_input.field_delimiter) + self.assertEqual('\"', request.select_request.input_serialization.csv_input.quote_character) + self.assertEqual('#', request.select_request.input_serialization.csv_input.comment_character) + self.assertEqual('line-range=start-end', request.select_request.input_serialization.csv_input.range) + self.assertEqual(True, request.select_request.input_serialization.csv_input.allow_quoted_record_delimiter) + self.assertEqual(base64.b64encode('\n'.encode()).decode(), request.select_request.output_serialization.csv_output.record_delimiter) + self.assertEqual(base64.b64encode(','.encode()).decode(), request.select_request.output_serialization.csv_output.field_delimiter) + self.assertEqual(base64.b64encode('\"'.encode()).decode(), request.select_request.output_serialization.csv_output.quote_character) + self.assertEqual(base64.b64encode('\n'.encode()).decode(), request.select_request.output_serialization.json_output.record_delimiter) + self.assertEqual(False, request.select_request.output_serialization.output_raw_data) + self.assertEqual(True, request.select_request.output_serialization.keep_all_columns) + self.assertEqual(True, request.select_request.output_serialization.enable_payload_crc) + self.assertEqual(False, request.select_request.output_serialization.output_header) + self.assertEqual(True, request.select_request.options.skip_partial_data_record) + self.assertEqual(111, request.select_request.options.max_skipped_records_allowed) + self.assertEqual('requester', request.request_payer) + + + request = model.SelectObjectRequest( + bucket='bucket_name', + key='example-object-2.jpg', + invalid_field='invalid_field', + ) + self.assertTrue(hasattr(request, 'bucket')) + self.assertEqual('bucket_name', request.bucket) + self.assertTrue(hasattr(request, 'key')) + self.assertEqual('example-object-2.jpg', request.key) + self.assertFalse(hasattr(request, 'invalid_field')) + + request = model.SelectObjectRequest( + bucket='bucket_name', + key='example-object-2.jpg', + headers={'key1': 'value1'}, + parameters={'parm1': 'value1'}, + payload='hello world', + ) + self.assertEqual('bucket_name', request.bucket) + self.assertEqual('example-object-2.jpg', request.key) + self.assertDictEqual({'key1': 'value1'}, request.headers) + self.assertDictEqual({'parm1': 'value1'}, request.parameters) + self.assertEqual('hello world', request.payload) + + def test_serialize_request(self): + request = model.SelectObjectRequest( + bucket='bucket_name', + key='example-object-2.jpg', + select_request=model.SelectRequest( + expression=base64.b64encode('select * from ossobject as s where cast(s.age as int) > 40'.encode()).decode(), + input_serialization=model.InputSerialization( + compression_type='GZIP', + json_input=model.JSONInput( + type='DOCUMENT|LINES', + range='line-range=start-end|split-range=start-end', + parse_json_number_as_string=True, + ), + csv_input=model.CSVInput( + file_header_info='DOCUMENT|LINES', + record_delimiter=base64.b64encode('\n'.encode()).decode(), + field_delimiter=base64.b64encode(','.encode()).decode(), + quote_character='\"', + comment_character='#', + range='line-range=start-end', + allow_quoted_record_delimiter=True, + ), + ), + output_serialization=model.OutputSerialization( + csv_output=model.CSVOutput( + record_delimiter=base64.b64encode('\n'.encode()).decode(), + field_delimiter=base64.b64encode(','.encode()).decode(), + quote_character=base64.b64encode('\"'.encode()).decode(), + ), + json_output=model.JSONOutput( + record_delimiter=base64.b64encode('\n'.encode()).decode(), + ), + output_raw_data=False, + keep_all_columns=True, + enable_payload_crc=True, + output_header=False, + ), + options=model.SelectOptions( + skip_partial_data_record=True, + max_skipped_records_allowed=111, + ), + ), + request_payer='requester', + ) + + self.assertEqual('bucket_name', request.bucket) + self.assertEqual('example-object-2.jpg', request.key) + self.assertEqual(base64.b64encode('select * from ossobject as s where cast(s.age as int) > 40'.encode()).decode(), request.select_request.expression) + self.assertEqual('GZIP', request.select_request.input_serialization.compression_type) + self.assertEqual('DOCUMENT|LINES', request.select_request.input_serialization.json_input.type) + self.assertEqual('line-range=start-end|split-range=start-end', request.select_request.input_serialization.json_input.range) + self.assertEqual(True, request.select_request.input_serialization.json_input.parse_json_number_as_string) + self.assertEqual('DOCUMENT|LINES', request.select_request.input_serialization.csv_input.file_header_info) + self.assertEqual(base64.b64encode('\n'.encode()).decode(), request.select_request.input_serialization.csv_input.record_delimiter) + self.assertEqual(base64.b64encode(','.encode()).decode(), request.select_request.input_serialization.csv_input.field_delimiter) + self.assertEqual('\"', request.select_request.input_serialization.csv_input.quote_character) + self.assertEqual('#', request.select_request.input_serialization.csv_input.comment_character) + self.assertEqual('line-range=start-end', request.select_request.input_serialization.csv_input.range) + self.assertEqual(True, request.select_request.input_serialization.csv_input.allow_quoted_record_delimiter) + self.assertEqual(base64.b64encode('\n'.encode()).decode(), request.select_request.output_serialization.csv_output.record_delimiter) + self.assertEqual(base64.b64encode(','.encode()).decode(), request.select_request.output_serialization.csv_output.field_delimiter) + self.assertEqual(base64.b64encode('\"'.encode()).decode(), request.select_request.output_serialization.csv_output.quote_character) + self.assertEqual(base64.b64encode('\n'.encode()).decode(), request.select_request.output_serialization.json_output.record_delimiter) + self.assertEqual(False, request.select_request.output_serialization.output_raw_data) + self.assertEqual(True, request.select_request.output_serialization.keep_all_columns) + self.assertEqual(True, request.select_request.output_serialization.enable_payload_crc) + self.assertEqual(False, request.select_request.output_serialization.output_header) + self.assertEqual(True, request.select_request.options.skip_partial_data_record) + self.assertEqual(111, request.select_request.options.max_skipped_records_allowed) + self.assertEqual('requester', request.request_payer) + + op_input = serde.serialize_input(request, OperationInput( + op_name='SelectObject', + method='POST', + bucket=request.bucket, + )) + self.assertEqual('SelectObject', op_input.op_name) + self.assertEqual('POST', op_input.method) + self.assertEqual('bucket_name', op_input.bucket) + self.assertEqual('requester', op_input.headers.get('x-oss-request-payer')) + + root = ET.fromstring(op_input.body) + self.assertEqual('SelectRequest', root.tag) + self.assertEqual(base64.b64encode('select * from ossobject as s where cast(s.age as int) > 40'.encode()).decode(), root.findtext('Expression')) + + + def test_constructor_result(self): + result = model.SelectObjectResult() + self.assertIsNone(result.body) + self.assertIsInstance(result, serde.Model) + + result = model.SelectObjectResult( + invalid_field='invalid_field', + ) + self.assertFalse(hasattr(result, 'invalid_field')) + + def test_deserialize_result(self): + xml_data = None + result = model.SelectObjectResult() + serde.deserialize_output( + result, + OperationOutput( + status='OK', + status_code=200, + headers=CaseInsensitiveDict({ + 'x-oss-request-id': '123', + 'x-oss-hash-crc64ecma': '316181249502703****', + 'x-oss-version-id': 'CAEQNhiBgMDJgZCA0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY0****', + 'x-oss-select-output-raw': 'false', + }), + http_response=MockHttpResponse( + status_code=200, + reason='OK', + headers={'x-oss-request-id': 'id-1234'}, + body=xml_data, + ) + ) + ) + self.assertEqual('OK', result.status) + self.assertEqual(200, result.status_code) + self.assertEqual('123', result.request_id) + self.assertEqual('316181249502703****', result.headers.get('x-oss-hash-crc64ecma')) + self.assertEqual('CAEQNhiBgMDJgZCA0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY0****', result.headers.get('x-oss-version-id')) + self.assertEqual('false', result.headers.get('x-oss-select-output-raw')) + + + +class TestCreateSelectObjectMeta(unittest.TestCase): + def test_constructor_request(self): + request = model.CreateSelectObjectMetaRequest( + ) + self.assertIsNone(request.bucket) + self.assertIsNone(request.key) + self.assertIsNone(request.csv_meta_request) + self.assertIsNone(request.json_meta_request) + self.assertFalse(hasattr(request, 'headers')) + self.assertFalse(hasattr(request, 'parameters')) + self.assertFalse(hasattr(request, 'payload')) + self.assertIsInstance(request, serde.RequestModel) + + request = model.CreateSelectObjectMetaRequest( + bucket='bucketexampletest', + key='test_key', + csv_meta_request=model.CsvMetaRequest( + input_serialization=model.InputSerialization( + compression_type='GZIP', + json_input=model.JSONInput( + type='DOCUMENT|LINES', + range='line-range=start-end|split-range=start-end', + parse_json_number_as_string=True, + ), + csv_input=model.CSVInput( + file_header_info='DOCUMENT|LINES', + record_delimiter=base64.b64encode('\n'.encode()).decode(), + field_delimiter=base64.b64encode(','.encode()).decode(), + quote_character='"', + comment_character='#', + range='line-range=start-end', + allow_quoted_record_delimiter=True, + ), + ), + overwrite_if_exists=False, + ), + json_meta_request=model.JsonMetaRequest( + input_serialization=model.InputSerialization( + compression_type='None', + json_input=model.JSONInput( + type='LINES', + range='split-range=10-20', + parse_json_number_as_string=False, + ), + csv_input=model.CSVInput( + file_header_info='DOCUMENT', + record_delimiter=base64.b64encode('\n\r'.encode()).decode(), + field_delimiter=base64.b64encode(',.'.encode()).decode(), + quote_character='\\', + comment_character='//', + range='split-range=20-660', + allow_quoted_record_delimiter=False, + ), + ), + overwrite_if_exists=True, + ), + ) + self.assertEqual('bucketexampletest', request.bucket) + self.assertEqual('test_key', request.key) + self.assertEqual('GZIP', request.csv_meta_request.input_serialization.compression_type) + self.assertEqual('DOCUMENT|LINES', request.csv_meta_request.input_serialization.json_input.type) + self.assertEqual('line-range=start-end|split-range=start-end', request.csv_meta_request.input_serialization.json_input.range) + self.assertEqual(True, request.csv_meta_request.input_serialization.json_input.parse_json_number_as_string) + self.assertEqual('DOCUMENT|LINES', request.csv_meta_request.input_serialization.csv_input.file_header_info) + self.assertEqual(base64.b64encode('\n'.encode()).decode(), request.csv_meta_request.input_serialization.csv_input.record_delimiter) + self.assertEqual(base64.b64encode(','.encode()).decode(), request.csv_meta_request.input_serialization.csv_input.field_delimiter) + self.assertEqual('"', request.csv_meta_request.input_serialization.csv_input.quote_character) + self.assertEqual('#', request.csv_meta_request.input_serialization.csv_input.comment_character) + self.assertEqual('line-range=start-end', request.csv_meta_request.input_serialization.csv_input.range) + self.assertEqual(True, request.csv_meta_request.input_serialization.csv_input.allow_quoted_record_delimiter) + self.assertEqual(False, request.csv_meta_request.overwrite_if_exists) + self.assertEqual('None', request.json_meta_request.input_serialization.compression_type) + self.assertEqual('LINES', request.json_meta_request.input_serialization.json_input.type) + self.assertEqual('split-range=10-20', request.json_meta_request.input_serialization.json_input.range) + self.assertEqual(False, request.json_meta_request.input_serialization.json_input.parse_json_number_as_string) + self.assertEqual('DOCUMENT', request.json_meta_request.input_serialization.csv_input.file_header_info) + self.assertEqual(base64.b64encode('\n\r'.encode()).decode(), request.json_meta_request.input_serialization.csv_input.record_delimiter) + self.assertEqual(base64.b64encode(',.'.encode()).decode(), request.json_meta_request.input_serialization.csv_input.field_delimiter) + self.assertEqual('\\', request.json_meta_request.input_serialization.csv_input.quote_character) + self.assertEqual('//', request.json_meta_request.input_serialization.csv_input.comment_character) + self.assertEqual('split-range=20-660', request.json_meta_request.input_serialization.csv_input.range) + self.assertEqual(False, request.json_meta_request.input_serialization.csv_input.allow_quoted_record_delimiter) + self.assertEqual(True, request.json_meta_request.overwrite_if_exists) + + def test_serialize_request(self): + request = model.CreateSelectObjectMetaRequest( + bucket='bucketexampletest', + key='test_key', + csv_meta_request=model.CsvMetaRequest( + input_serialization=model.InputSerialization( + compression_type='GZIP', + json_input=model.JSONInput( + type='DOCUMENT|LINES', + range='line-range=start-end|split-range=start-end', + parse_json_number_as_string=True, + ), + csv_input=model.CSVInput( + file_header_info='DOCUMENT|LINES', + record_delimiter=base64.b64encode('\n'.encode()).decode(), + field_delimiter=base64.b64encode(','.encode()).decode(), + quote_character='\"', + comment_character='#', + range='line-range=start-end', + allow_quoted_record_delimiter=True, + ), + ), + overwrite_if_exists=False, + ) + ) + + op_input = serde.serialize_input(request, OperationInput( + op_name='CreateSelectObjectMeta', + method='POST', + bucket=request.bucket, + )) + self.assertEqual('CreateSelectObjectMeta', op_input.op_name) + self.assertEqual('POST', op_input.method) + self.assertEqual('bucketexampletest', op_input.bucket) + + def test_constructor_result(self): + result = model.CreateSelectObjectMetaResult() + self.assertIsNone(result.body) + self.assertIsInstance(result, serde.Model) + + result = model.CreateSelectObjectMetaResult( + body=model.SelectResult( + resp=MockHttpResponse(), + progress_callback='progress_callback', + content_length=11, + crc_enabled=False, + ), + ) + self.assertEqual('progress_callback', result.body.select_resp.callback) + self.assertEqual(11, result.body.select_resp.content_length) + self.assertEqual(False, result.body.select_resp.enable_crc) + + def test_deserialize_result(self): + xml_data = None + result = model.CreateSelectObjectMetaResult() + serde.deserialize_output( + result, + OperationOutput( + status='OK', + status_code=200, + headers=CaseInsensitiveDict({ + 'x-oss-request-id': '123', + 'x-oss-hash-crc64ecma': '316181249502703****', + 'x-oss-version-id': 'CAEQNhiBgMDJgZCA0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY0****', + }), + http_response=MockHttpResponse( + status_code=200, + reason='OK', + headers={'x-oss-request-id': 'id-1234'}, + body=xml_data, + ) + ) + ) + self.assertEqual('OK', result.status) + self.assertEqual(200, result.status_code) + self.assertEqual('123', result.request_id) + self.assertEqual('316181249502703****', result.headers.get('x-oss-hash-crc64ecma')) + self.assertEqual('CAEQNhiBgMDJgZCA0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY0****', result.headers.get('x-oss-version-id')) +