選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

199 行
5.6KB

  1. spec_export_search_results <- function() {
  2. readr::cols(
  3. `Committee Name` = readr::col_character(),
  4. `SBoE ID` = readr::col_character(),
  5. Year = readr::col_character(),
  6. `Doc Type` = readr::col_character(),
  7. `Doc Name` = readr::col_character(),
  8. Amend = readr::col_character(),
  9. `Received Image` = readr::col_date(format = "%m/%d/%Y"),
  10. `Received Data` = readr::col_date(format = "%m/%d/%Y"),
  11. `Start Date` = readr::col_date(format = "%m/%d/%Y"),
  12. `End Date` = readr::col_date(format = "%m/%d/%Y"),
  13. Image = readr::col_character(),
  14. Data = readr::col_character()
  15. )
  16. }
  17. spec_report_by_year_scrape <- function() {
  18. readr::cols(
  19. CommitteeName = readr::col_character(),
  20. SBoEID = readr::col_character(),
  21. DocumentType = readr::col_character(),
  22. ReportYear = readr::col_character(),
  23. ReportType = readr::col_character(),
  24. IsAmendment = readr::col_character(),
  25. ImageReceiptDate = readr::col_date(format = "%m/%d/%Y"),
  26. DataImportDate = readr::col_date(format = "%m/%d/%Y"),
  27. PeriodStartDate = readr::col_date(format = "%m/%d/%Y"),
  28. PeriodEndDate = readr::col_date(format = "%m/%d/%Y"),
  29. ImageType = readr::col_character(),
  30. DataType = readr::col_character(),
  31. DataLink = readr::col_character(),
  32. ImageLink = readr::col_character()
  33. )
  34. }
  35. get_report_by_year_export <- function(year, report) {
  36. res <-
  37. req_report_by_year_export(year, report) |>
  38. req_perform() |>
  39. resp_body_string() |>
  40. readr::read_csv(col_types = spec_export_search_results())
  41. names(res)[which(names(res) == "SBoE ID")] <- "sboe_id"
  42. names(res) <- snakecase::to_snake_case(names(res))
  43. res |>
  44. mutate(amend = amend == "Y") |>
  45. relocate(year, doc_name) |>
  46. group_by(year, doc_name) |>
  47. targets::tar_group()
  48. }
  49. get_report_by_year_scrape <- function(year, report) {
  50. res <-
  51. req_report_by_year(year, report) |>
  52. req_perform() |>
  53. resp_body_string()
  54. res <- strsplit(res, "\r\n")[[1]]
  55. res <- res[grepl("^\\s*var data = \\[", res)]
  56. res <- sub("\\s*var data = ", "", res)
  57. jsonlite::fromJSON(res) |>
  58. as_tibble() |>
  59. readr::type_convert(col_types = spec_report_by_year_scrape()) |>
  60. select(
  61. year = ReportYear,
  62. doc_name = ReportType,
  63. sboe_id = SBoEID,
  64. committee_name = CommitteeName,
  65. report_id = DataLink,
  66. doc_type = DocumentType,
  67. amended = IsAmendment,
  68. received_image = ImageReceiptDate,
  69. received_data = DataImportDate,
  70. start_date = PeriodStartDate,
  71. end_date = PeriodEndDate,
  72. img_link = ImageLink
  73. ) |>
  74. mutate(amended = amended == "Y") |>
  75. group_by(year, doc_name) |>
  76. targets::tar_group()
  77. }
  78. spec_report_section_receipts <- function() {
  79. readr::cols(
  80. Date = readr::col_date(format = "%m/%d/%Y"),
  81. `Is Prior` = readr::col_character(),
  82. Name = readr::col_character(),
  83. `Street 1` = readr::col_character(),
  84. `Street 2` = readr::col_character(),
  85. City = readr::col_character(),
  86. State = readr::col_character(),
  87. `Full Zip` = readr::col_character(),
  88. `Country Name` = readr::col_character(),
  89. `Outside US Postal Code` = readr::col_character(),
  90. Profession = readr::col_character(),
  91. `Employers Name` = readr::col_character(),
  92. Purpose = readr::col_character(),
  93. `Receipt Type Desc` = readr::col_character(),
  94. `Account Abbr` = readr::col_character(),
  95. `Form Of Payment Desc` = readr::col_character(),
  96. Description = readr::col_character(),
  97. Amount = readr::col_double(),
  98. `Sum To Date` = readr::col_double()
  99. )
  100. }
  101. spec_report_section_expenses <- function() {
  102. cols(
  103. Date = col_date(format = "%m/%d/%Y"),
  104. Name = col_character(),
  105. `Street 1` = col_character(),
  106. `Street 2` = col_character(),
  107. City = col_character(),
  108. State = col_character(),
  109. `Full Zip` = col_character(),
  110. `Country Name` = col_character(),
  111. `Outside US Postal Code` = col_character(),
  112. Profession = col_character(),
  113. `Employer Name` = col_character(),
  114. `Purpose Type Code` = col_character(),
  115. Purpose = col_character(),
  116. Candidate = col_character(),
  117. `Office Sought` = col_character(),
  118. Declaration = col_character(),
  119. Amount = col_double(),
  120. `Expenditure Type Desc` = col_character(),
  121. `Account Abbr` = col_character(),
  122. `Form Of Payment Desc` = col_character(),
  123. Description = col_character(),
  124. Amount1 = col_double(),
  125. `Sum To Date` = col_double()
  126. )
  127. }
  128. get_report_section <- function(
  129. report_id,
  130. section = "receipts",
  131. sboe_id = NULL
  132. ) {
  133. delay()
  134. res <-
  135. req_report_detail(report_id, section) |>
  136. req_perform()
  137. if (identical(res$body, raw(0))) return(NULL)
  138. res <- resp_body_string(res)
  139. spec <- switch(
  140. section,
  141. receipts = list(skip = 1, col_types = spec_report_section_receipts()),
  142. expenses = ,
  143. expenditures = list(skip = 1, col_types = spec_report_section_expenses()),
  144. NULL
  145. )
  146. if (is.null(spec)) return(res)
  147. res <- readr::read_csv(res, col_types = spec$col_types, skip = spec$skip)
  148. names(res) <- snakecase::to_snake_case(names(res))
  149. res <- mutate(res, report_id = !!report_id, .before = 1)
  150. if (!is.null(sboe_id)) {
  151. res <- mutate(res, sboe_id = !!sboe_id, .after = report_id)
  152. }
  153. res
  154. }
  155. get_raw_report_all <- function(report_id) {
  156. delay()
  157. res <-
  158. req_report_detail(report_id, "all") |>
  159. req_perform()
  160. if (identical(res$body, raw(0))) return("")
  161. resp_body_string(res)
  162. }
  163. save_raw_report_all <- function(report_id, sboe_id) {
  164. res <- get_raw_report_all(report_id)
  165. dir <- here::here("data-raw", "reports", sboe_id)
  166. dir_create(dir)
  167. path <- path(dir, report_id, ext = "txt")
  168. brio::write_lines(res, path)
  169. invisible(path)
  170. }