Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Using R and the SparkTable package to get Wordpress postview sparklines. See
# <- Start of bit by Tony Hirst (@psychemedia) see
#Wordpress Stats
#Wordpress Stats API docs (from
#You can get a copy of your API key (required) from Akismet:
#Login with you Wordpress account:
#Resend API key:
#Required parameters: api_key, blog_id or blog_uri.
#Optional parameters: table, post_id, end, days, limit, summarize.
#api_key String A secret unique to your user account.
#blog_id Integer The number that identifies your blog. Find it in other stats URLs.
#blog_uri String The full URL to the root directory of your blog. Including the full path.
#table String One of views, postviews, referrers, referrers_grouped, searchterms, clicks, videoplays.
#post_id Integer For use with postviews table.
#end String The last day of the desired time frame. Format is 'Y-m-d' (e.g. 2007-05-01) and default is UTC date.
#days Integer The length of the desired time frame. Default is 30. "-1" means unlimited.
#period String For use with views table and the 'days' parameter. The desired time period grouping. 'week' or 'month'
#Use 'days' as the number of results to return (e.g. '&period=week&days=12' to return 12 weeks)
#limit Integer The maximum number of records to return. Default is 100. "-1" means unlimited. If days is -1, limit is capped at 500.
#summarize Flag If present, summarizes all matching records.
#format String The format the data is returned in, 'csv', 'xml' or 'json'. Default is 'csv'.
#NOTE: some of the report calls I tried didn't seem to work properly?
#Need to build up a list of tested calls to the API that actually do what you think they should?
wordpress.getstats.demo=function(apikey, blogurl, table='postviews', end=Sys.Date(), days='12', period='week', limit='', summarise=''){
#default parameters gets back last 12 weeks of postviews aggregated by week
'&',summarise, #set this to 'summarise=T' if required
#Martin's post notes that JSON appears to work better than CSV
#May be worth doing a JSON parsing version?
#Use the URL of a Wordpress blog associated with the same account as the API key
# -> End of bit by Tony Hirst (@psychemedia)
# getting stats for postviews last year. Note examples above for different query options e.g. without end date
wp.postviews=wordpress.getstats.demo(APIKEY,BLOGURL,'postviews',days='366',end='2012-12-31', period='day',limit=-1)
# make data frame of just title, views and date
data <- data.frame(post_title=wp.postviews$post_title, views=wp.postviews$views, date=wp.postviews$date)
# convert date string into date
data$date <- as.Date(as.character(data$date ),format="%Y-%m-%d")
# cast data frame to fill missing data points with 0 (seemed to be required for spaarkTable)
data.casted <- cast(data, post_title ~ date, sum)
# melt back for sparkTable
data.melted <- melt(data.casted, id.vars=c("post_title"))
df <- data.melted
# examples appear to use set column heading variabe, value and time
columnNames <- c("variable","value","time")
colnames(df) <- columnNames
# sparkTable cobbled together from and
content [['Mean']] <- function (x) { round(sum(x)/length(which(x>0)),1) }
content [['Max']] <- function (x) { max(x) }
content [['Views']] <- function (x) { sum(x) }
content [['Days']] <- function(x) { length(which(x>0)) }
plotSparkTable ( sparkTab , outputType = "html", filename = "t1")
# a dead end but keeping in for ref - adding summary to cast of data frame
pivot <- cast(data, post_title ~ date, sum, fill=NA)
noDays <- ncol(pivot)
pivot$sum <- apply(pivot[2:noDays], 1, sum, na.rm=TRUE)
pivot$max <- apply(pivot[2:noDays], 1, max, na.rm=TRUE)
pivot$mean <- lapply(pivot$mean,round,2)
pivot$count <- apply(pivot[2:noDays], 1, function(x) length(which(!
pivot.sort <- pivot[order(-pivot$mean) , ][1:20,]
# <- More of Tony Hirst (@psychemedia) see
getDomain=function(url) str_match(url, "^http[s]?://([^/]*)/.*?")[, 2]
#We can pull out the domains clicks were sent to or referrals came from
#Scruffy bar chart - is there a way of doing this sorted chart using geom_bar? How would we reorder x?$domain))
ggplot(c)+geom_bar(aes(x=reorder(Var1,Freq),y=Freq),stat='identity')+theme( axis.text.x=element_text(angle=-90))$domain))
ggplot(c)+geom_bar(aes(x=reorder(Var1,Freq),y=Freq),stat='identity')+theme( axis.text.x=element_text(angle=-90))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment