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