-
Notifications
You must be signed in to change notification settings - Fork 4
/
get-wp-posts-after.R
71 lines (67 loc) · 2.72 KB
/
get-wp-posts-after.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#' @title Retrieve WordPress Posts
#'
#' @description Retrieve posts made on the WordPress site.
#'
#' @param root_url The WordPress site for which posts are sought to be retrieved.
#' @param post_count The maximum number of posts to return, sorted by the most recent date. Default value is to return all posts made on the site.
#' @param after_date The date after which posts should be returned.
#' @return A data frame returning the post ID, publication date, title, excerpt, content, tag IDs, category IDs, and author IDs.
#'
#'@examples
#' \dontrun{
#'get_wp_posts(root_url = 'https://domain.com',post_count = 200, after_date = NULL)
#'}
#'
#' @export get_wp_posts
#' @import tibble
#' @import httr
#' @import dplyr
#' @importFrom glue glue
#' @importFrom glue glue_collapse
get_wp_posts_after <- function(root_url, after_date) {
print('line23')
response <- list(list(1),list(1),list(status = 1))
n <- 1
posts_real <- tibble()
after_date <- after_date %>% as.character() %>% paste0("T00:00:00")
while (length(response) > 0 & response[[3]]$status != 400) {
response <- content(GET(paste0(root_url,'/wp-json/wp/v2/posts?per_page=100&page=',n,'&after=',after_date,'&orderby=id'),accept_json()))
if(length(response) > 0 & response[[3]]$status != 400) {
for(k in 1:length(response)) {
response_df <- tibble(id = response[[k]]$id, date = response[[k]]$date, url = response[[k]]$guid$rendered,
title = response[[k]]$title$rendered, content = response[[k]]$content$rendered,
author = response[[k]]$author)
response_tags <- c()
if(length(response[[k]]$tags) > 0) {
for(i in 1:length(response[[k]]$tags)) {
itag = response[[k]]$tags[[i]]
response_tags <- c(response_tags,itag)
}
rtg <- response_tags %>% glue_collapse(sep = ',', last = ',')
}
if(length(response[[k]]$tags) == 0) {
rtg = ''
}
response_cats <- c()
if(length(response[[k]]$categories) > 0) {
for(i in 1:length(response[[k]]$categories)) {
icat = response[[k]]$categories[[i]]
response_cats <- c(response_cats,icat)
}
rtc <- response_cats %>% glue_collapse(sep = ',', last = ',')
}
if(length(response[[k]]$tags) == 0) {
rtg = ''
}
if(length(response[[k]]$categories) == 0) {
rtc = ''
}
response_df <- response_df %>% mutate(tags = rtg, categories = rtc)
posts_real <- bind_rows(posts_real,response_df %>% mutate_at(vars(tags,categories),as.character))
}
n <- n + 1
}
else(print(paste0('out of content after ',n,' pages')))
}
return(posts_real)
}