Fortunately, it's fairly easy to generate a local version of the FCC database, thereby allowing one to use classical tools (such as, for example, awk) to obtain rapid answers to queries that one deems interesting.
The FCC generates a series of data files weekly (on Sunday), and makes those available over the Internet. (They also generate daily files of changes, as described here.) This allows interested parties to download the data, merge and simplify them, and generate a local file that contains the interesting/useful information.
In total there are eight data files, typically identified by a two-character tag: AM, CO, EN, HD, HS, LA, SC or SF. Each file contains a number of records, and the contents of each record is documented (lightly) in this document. Unfortunately, although that document gives the name of each field, it's not always obvious from the name what the field actually contains. Many (but far from all) fields are documented here; other fields are a matter for guesswork, or even a shrug of the shoulders.
Anyway, for the most part it's easy to combine all the useful fields from the eight data files into a single file in which each record is identified by a (unique) callsign. In practice, it turns out that, at least to my eyes, only the first four of the named data files contain information of general interest.
Consequently, I have created a file, updated weekly (on a Monday) that combines the more interesting data from the eight published data files. The records in this file are delimited by linefeeds, and fields within each record, as in the original data files, are separated by the standard UNIX pipe character, "|". Each output record contains 48 fields.
The contents of the eight original files are described in this document as follows:
Amateur
Position Data Element Definition
[AM]
1 Record Type [AM] char(2)
2 Unique System Identifier numeric(9,0)
3 ULS File Number char(14)
4 EBF Number varchar(30)
5 Call Sign char(10)
6 Operator Class char(1)
7 Group Code char(1)
8 Region Code tinyint
9 Trustee Call Sign char(10)
10 Trustee Indicator char(1)
11 Physician Certification char(1)
12 VE Signature char(1)
13 Systematic Call Sign Change char(1)
14 Vanity Call Sign Change char(1)
15 Vanity Relationship char(12)
16 Previous Call Sign char(10)
17 Previous Operator Class char(1)
18 Trustee Name varchar(50)
Comments
Position Data Element Definition
[CO]
1 Record Type [CO] char(2)
2 Unique System Identifier numeric(9,0)
3 ULS File Number char(14)
4 Call Sign char(10)
5 Comment Date mm/dd/yyyy
6 Description varchar(255)
7 Status Code char(1)
8 Status Date mm/dd/yyyy
Entity
Position Data Element Definition
[EN]
1 Record Type [EN] char(2)
2 Unique System Identifier numeric(9,0)
3 ULS File Number char(14)
4 EBF Number varchar(30)
5 Call Sign char(10)
6 Entity Type char(2)
7 Licensee ID char(9)
8 Entity Name varchar(200)
9 First Name varchar(20)
10 MI char(1)
11 Last Name varchar(20)
12 Suffix char(3)
13 Phone char(10)
14 Fax char(10)
15 Email varchar(50)
16 Street Address varchar(60)
17 City varchar(20)
18 State char(2)
19 Zip Code char(9)
20 PO Box varchar(20)
21 Attention Line varchar(35)
22 SGIN char(3)
23 FCC Registration Number (FRN) char(10)
24 Applicant Type Code char(1)
25 Applicant Type Code Other char(40)
26 Status Code char(1)
27 Status Date mm/dd/yyyy
1 Record Type [HD] char(2)
2 Unique System Identifier numeric(9,0)
3 ULS File Number char(14)
4 EBF Number varchar(30)
5 Call Sign char(10)
6 License Status char(1)
7 Radio Service Code char(2)
8 Grant Date mm/dd/yyyy
9 Expired Date mm/dd/yyyy
10 Cancellation Date mm/dd/yyyy
11 Eligibility Rule Num char(10)
12 Reserved char(1)
13 Alien char(1)
14 Alien Government char(1)
15 Alien Corporation char(1)
16 Alien Officer char(1)
17 Alien Control char(1)
18 Revoked char(1)
19 Convicted char(1)
20 Adjudged char(1)
21 Reserved char(1)
22 Common Carrier char(1)
23 Non Common Carrier char(1)
24 Private Comm char(1)
25 Fixed char(1)
26 Mobile char(1)
27 Radiolocation char(1)
28 Satellite char(1)
29 Developmental or STA or Demonstration char(1)
30 InterconnectedService char(1)
31 Certifier First Name varchar(20)
32 Certifier MI char(1)
33 Certifier Last Name varchar(20)
34 Certifier Suffix char(3)
35 Certifier Title char(40)
36 Female char(1)
37 Black or African-American char(1)
38 Native American char(1)
39 Hawaiian char(1)
40 Asian char(1)
41 White char(1)
42 Hispanic char(1)
43 Effective Date mm/dd/yyyy
44 Last Action Date mm/dd/yyyy
45 Auction ID integer
46 Broadcast Services - Regulatory Status char(1)
47 Band Manager - Regulatory Status char(1)
48 Broadcast Services - Type of Radio Service char(1)
49 Alien Ruling char(1)
50 Licensee Name Change char(1)
51 Whitespace Indicator char(1)
History
Position Data Element Definition
[HS]
1 Record Type [HS] char(2)
2 Unique System Identifier numeric(9,0)
3 ULS File Number char(14)
4 Call Sign char(10)
5 Log Date mm/dd/yyyy
6 Code char(6)
License Attachment
Position Data Element Definition
[LA]
1 Record Type [LA] char(2)
2 Unique System Identifier numeric(9,0)
3 Call Sign char(10)
4 Attachment Code char(1)
5 Attachment Description varchar(60)
6 Attachment Date mm/dd/yyyy
7 Attachment File Name varchar(60)
8 Action Performed char(1)
Special Condition
Position Data Element Definition
[SC]
1 Record Type [SC] char(2)
2 Unique System Identifier numeric(9,0)
3 ULS File Number char(14)
4 EBF Number varchar(30)
5 Call Sign char(10)
6 Special Condition Type char(1)
7 Special Condition Code int
8 Status Code char(1)
9 Status Date mm/dd/yyyy
License Free Form Special ConditionThe following extract from the code that creates the output database maps these on a one-to-one basis to internal identifiers:
Position Data Element Definition
[SF]
1 Record Type [SF] char(2)
2 Unique System Identifier numeric(9,0)
3 ULS File Number char(14)
4 EBF Number varchar(30)
5 Call Sign char(10)
6 License Free Form Type char(1)
7 Unique License Free Form Identifier numeric(9,0)
8 Sequence Number integer
9 License Free Form Condition varchar(255)
10 Status Code char(1)
11 Status Date mm/dd/yyyy
[AM]
RECORD_TYPE,[CO]
ID,
ULS_NUMBER,
EBF_NUMBER,
CALLSIGN,
OPERATOR_CLASS,
GROUP_CODE,
REGION_CODE,
TRUSTEE_CALLSIGN,
TRUSTEE_INDICATOR,
PHYSICIAN_CERTIFICATION,
VE_SIGNATURE,
SYSTEMATIC_CALLSIGN_CHANGE,
VANITY_CALLSIGN_CHANGE,
VANITY_RELATIONSHIP,
PREVIOUS_CALLSIGN,
PREVIOUS_OPERATOR_CLASS,
TRUSTEE_NAME
RECORD_TYPE,[EN]
ID,
ULS_NUMBER,
CALLSIGN,
COMMENT_DATE,
DESCRIPTION,
STATUS_CODE,
STATUS_DATE
RECORD_TYPE,[HD]
ID,
ULS_NUMBER,
EBF_NUMBER,
CALLSIGN,
ENTITY_TYPE,
LICENSE_ID,
ENTITY_NAME,
FIRST_NAME,
MIDDLE_INITIAL,
LAST_NAME,
SUFFIX,
PHONE,
FAX,
EMAIL,
STREET_ADDRESS,
CITY,
STATE,
ZIP_CODE,
PO_BOX,
ATTENTION_LINE,
SGIN,
FRN,
APPLICANT_TYPE_CODE,
APPLICANT_TYPE_CODE_OTHER,
STATUS_CODE,
STATUS_DATE
RECORD_TYPE,[HS]
ID,
ULS_NUMBER,
EBF_NUMBER,
CALLSIGN,
LICENSE_STATUS,
RADIO_SERVICE_CODE,
GRANT_DATE,
EXPIRED_DATE,
CANCELLATION_DATE,
ELIGIBILITY_RULE_NUM,
RESERVED_1,
ALIEN,
ALIEN_GOVERNMENT,
ALIEN_CORPORATION,
ALIEN_OFFICER,
ALIEN_CONTROL,
REVOKED,
CONVICTED,
ADJUDGED,
RESERVED_2,
COMMON_CARRIER,
NON_COMMON_CARRIER,
PRIVATE_COMM,
FIXED,
MOBILE,
RADIOLOCATION,
SATELLITE,
DEVELOPMENTAL_STA_DEMONSTRATION,
INTERCONNECTED_SERVICE,
CERTIFIER_FIRST_NAME,
CERTIFIER_MIDDLE_INITIAL,
CERTIFIER_LAST_NAME,
CERTIFIER_SUFFIX,
CERTIFIER_TITLE,
FEMALE,
BLACK_AFRICAN_AMERICAN,
NATIVE_AMERICAN,
HAWAIIAN,
ASIAN,
WHITE,
HISPANIC,
EFFECTIVE_DATE,
LAST_ACTION_DATE,
AUCTION_ID,
BROADCAST_SERVICES_REGULATORY_STATUS,
BAND_MANAGER_REGULATORY_STATUS,
BROADCAST_SERVICES_SERVICE_TYPE,
ALIEN_RULING,
LICENSEE_NAME_CHANGE,
WHITESPACE_INDICATOR
RECORD_TYPE,[LA]
ID,
ULS_NUMBER,
CALLSIGN,
LOG_DATE,
CODE
RECORD_TYPE,[SC]
ID,
CALLSIGN,
ATTACHMENT_CODE,
ATTACHMENT_DESCRIPTION,
ATTACHMENT_DATE,
ATTACHMENT_FILENAME,
ACTION_PERFORMED
RECORD_TYPE,[SF]
ID,
ULS_NUMBER,
EBF_NUMBER,
CALLSIGN,
SPECIAL_CONDITION_TYPE,
SPECIAL_CONDITION_CODE,
STATUS_CODE,
STATUS_DATE
RECORD_TYPE,
ID,
ULS_NUMBER,
EBF_NUMBER,
CALLSIGN,
LICENSE_FREEFORM_TYPE,
UNIQUE_LICENSE_FREEFORM_ID,
SEQUENCE_NUMBER,
LICENSE_FREEFORM_CONDITION,
STATUS_CODE,
STATUS_DATE
The 48 output fields selected from the above lists are (arranged in groups of ten for easy counting):
ID,The contents of these fields are based on the original equivalent entries in the original data files. The entries for the fields are subject to the following transformations before being written to the output file:
CALLSIGN,
OPERATOR_CLASS,
GROUP_CODE,
REGION_CODE,
TRUSTEE_CALLSIGN,
TRUSTEE_INDICATOR,
SYSTEMATIC_CALLSIGN_CHANGE,
VANITY_CALLSIGN_CHANGE,
VANITY_RELATIONSHIP,
PREVIOUS_CALLSIGN,
PREVIOUS_OPERATOR_CLASS,
TRUSTEE_NAME,
COMMENT_DATE,
DESCRIPTION,
CO_STATUS_CODE, (i.e., STATUS_CODE from [CO])
CO_STATUS_DATE, (i.e., STATUS_DATE from [CO])
ENTITY_NAME,
FIRST_NAME,
MIDDLE_INITIAL,
LAST_NAME,
SUFFIX,
PHONE,
FAX,
EMAIL,
STREET_ADDRESS,
CITY,
STATE,
ZIP_CODE,
PO_BOX,
ATTENTION_LINE,
FRN,
APPLICANT_TYPE_CODE,
APPLICANT_TYPE_CODE_OTHER,
EN_STATUS_CODE, (i.e., STATUS_CODE from [EN])
EN_STATUS_DATE, (i.e., STATUS_DATE from [EN])
LICENSE_STATUS,
RADIO_SERVICE_CODE,
GRANT_DATE,
EXPIRED_DATE,
CANCELLATION_DATE,
ELIGIBILITY_RULE_NUM,
REVOKED,
CONVICTED,
ADJUDGED,
EFFECTIVE_DATE,
LAST_ACTION_DATE,
LICENSEE_NAME_CHANGE
- The entry is converted to upper case;
- Any line feeds (yes, the FCC allows line feeds within a field) are converted to the four-character sequence: <LF>;
- Leading and trailing spaces are removed;
- If the field is a date, it is converted from FCC format (mm/dd/yyyy) to ISO 8601 extended format: YYYY-MM-DD.
The full source code to generate the output file may be downloaded here.
To create the binary from the source code, go to the directory that contains the makefile and type:
make fcc-dbThis should generate the executable program as: bin/fcc-db. The program may be executed from within the bin directory as:
fcc-db [directory]where [directory] is the name of the directory that contains the input FCC AM.dat, CO.dat, EN.dat and HD.dat files. Those files should be processed and the output written to stdout.
For what it's worth, it takes somewhat less than 15 seconds for the program to execute to completion on my desktop computer if stdout is redirected to an output file.
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.