home · login to get plonkin'

wayback

@hrbrmstr.dev · 19d ago · c · 64 loc · raw · 0 comments

1library(httr)2library(digest)3library(base64enc)45hex_to_raw <- function(hex_string) {6  result <- raw(0)7  8  if (nchar(hex_string) > 0) {9    as.raw(10      strtoi(11        substring(12          hex_string, 13          seq(1, nchar(hex_string), by=2), 14          seq(2, nchar(hex_string), by=2)15        ), 16        16L17      )18    ) -> result19  }20  21  result22}2324base32_encode <- function(raw_data) {2526  alphabet <- c(LETTERS[1:26], as.character(0:5))27  28  bits <- as.integer(rawToBits(raw_data))29  30  n_bits <- length(bits)31  padding_needed <- (8 - (n_bits %% 40) %% 8) %% 832  bits <- c(bits, rep(0, padding_needed))33  n_bits <- length(bits)34  35  result <- character(n_bits %/% 5)36  for (i in seq(1, n_bits, by=5)) {37    if (i+4 <= n_bits) {38      value <- sum(bits[i:(i+4)] * 2^(4:0))39      result[i %/% 5 + 1] <- alphabet[value + 1]40    }41  }42  43  if (padding_needed > 0) {44    padding_chars <- padding_needed %/% 8 * 845    result <- c(result[1:(length(result) - padding_chars / 5)], rep("=", padding_chars / 5))46  }47  48  paste(result, collapse="")49}5051process_url <- function(url) {52  response <- httr::GET(url)53  content <- httr::content(response, "raw")54  55  hash <- digest(content, algo="sha1", serialize=FALSE, raw=TRUE)56  hash_hex <- paste(sprintf("%02x", as.integer(hash)), collapse="")57  raw_bytes <- hex_to_raw(hash_hex)5859  base32_encode(raw_bytes)60}6162(process_url("https://reporter.nih.gov/services/Projects/ProjectInfo?projectId=8008517"))63## [1] "XCQMKFZVSWQ01EGKMMAPGG0QM0NED1DK"64

login to post a comment