15

A similar question was posed quite a while back, without much specificity. The only answer identifies the taxing nature of a SEDE query on the server in order to get a rough estimate of the user reputation over time. This is rough because it doesn't include any reputation corrections (due to daily reputation cap and possible serial voting reversals).

Ideally it would be another table, UserReputation(id, userid, creationdate, reputation) (say), representing the userid's reputation for the creationdate (just a day stamp, like the votes)... a tabulation of the reputation tab that is already visible (to everyone) in your user profile:

reputation

Apparently there's a RepHistory table available (internally):

enter image description here

If the daily reputation become to questionable in terms of anonymity-loss (for downvotes, say), perhaps the weekly, monthly, quarterly and yearly reputation league results would be a consolation prize.

References:

1 Answer 1

4

It is possible to extract single user content using the following R script:

# 0 Package loading ####

library(tidyverse)
library(lubridate)
library(RCurl)
library(magrittr)

# 1 Setup ####

userId <- 5764 # Select user ID
site <- 'tex'  # Select SE network

# 2 Download user reputation history ####

user_reputation <- getURLContent(
  paste0(
    'https://',
    site,
    '.stackexchange.com/users/',
    userId,
    '/?tab=reputation&sort=graph'
  ),
  followlocation = TRUE
)

# If the user has any reputation history/changes  
if (!is.na(str_locate(user_reputation, '\\[\\[')[1, 'end'])) {

  user_reputation <- user_reputation %>% str_sub(
    # Extract only relevant parts of user reputation HTML string
    start = str_locate(., 'var rawData = \\[\\[')[1, 'end'] + 1,
    end = str_locate(., '\\]\\];')[1, 'start'] - 1
  ) %>% str_split(
    '\\],\\['
  ) %>% unlist() %>% trimws() %>% as_tibble() %>% separate(
    col = 'value', 
    into = c(
      'YEAR', 'MONTH', 'DAY', 'REP'
    ),
    sep = ','
  ) %>% transmute(
    DATE = paste(
      YEAR, MONTH, DAY, sep = '-'
    ) %>% ymd(),
    USERID = userId,
    REP = REP %>% as.numeric()
  ) %>% filter(
    REP != 0 # Remove zero-reputation days
  )

} else {
  # User does not have any reputation history available
  user_reputation <- NULL

}

enter image description here

The above script visits the user's reputation graph on their profile page and extracts the data from the retrieved HTML.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .