R/utils.R

Defines functions collapse_query from_unix

#' @export
from_unix <- function(x) as.POSIXct(as.numeric(x), origin = "1970-01-01", tz = "UTC")

#' @export
collapse_query <- function(data){
    data %>%
        purrr::imap_chr(~paste0(.y, "=", .x)) %>%
        paste(collapse = "&") %>%
        paste0("?", .)
}

get_proxy <- function(){
    if(Sys.getenv("BINANCE_PROXY") == "") return(NULL)

    stringr::str_split(Sys.getenv("BINANCE_PROXY"), ":")[[1]]
}

get_proxy_user <- function(){
    if(Sys.getenv("BINANCE_USERPW") == "") return(NULL)

    stringr::str_split(Sys.getenv("BINANCE_USERPW"), ":")[[1]]
}

add_proxy <- function(){
    httr::use_proxy(url = get_proxy()[1],
                    port = as.numeric(get_proxy()[2]),
                    username = get_proxy_user()[1],
                    password = get_proxy_user()[2])
}

#' @export
generate_signature <- function(data){

    query_string = data %>%
        order_params %>%
        collapse_query

    digest::hmac(enc2utf8(api_secret()), enc2utf8(stringr::str_remove(query_string, "^\\?")), "sha256")

}

#' @export
order_params <- function(data){

    signature <- data[["signature"]]
    data$signature <- NULL
    params <- data[order(names(data))]

    if(!is.null(signature)){
        params$signature <- signature
    }

    return(params)

}

#' @export
symbols <- function(){
    readr::read_rds(system.file("symbols.rds", package = "binancer"))
}

#' @export
update_symbols <- function(){
    readr::write_rds(coin_prices()[,"symbol"], system.file("symbols.rds", package = "binancer"))
}

#' @export
check_symbol <- function(symbol, limit = NULL, required = T){

    if(required & is.null(symbol)){
        stop("Symbol must be specified")
    }
    if(symbol == "COSUSDT"){
        symbol <- "^COSUSDT"
    }

    if(!symbol %in% symbols()){
        update_symbols()
    }

    symbols() %>%
        dplyr::filter(stringr::str_detect(symbol, !!symbol)) %>%
        dplyr::select(symbol) %>%
        dplyr::mutate(limit = !!limit) %>%
        split(1:nrow(.))
}
benjaminguinaudeau/binancer documentation built on Aug. 8, 2022, 12:05 a.m.