library(devtools)
install_github("pablobarbera/Rfacebook/Rfacebook")
Skipping install of 'Rfacebook' from a github remote, the SHA1 (c7cd323d) has not changed since last install.
  Use `force = TRUE` to force installation
library(Rfacebook)
my_oauth<-fbOAuth(app_id="131021627566207",app_secret="688b94b954ace64ebf68b61cf0d4458a") ####create access token, short term though only lasts a few hours
Waiting for authentication in browser...
Press Esc/Ctrl + C to abort
Authentication complete.
Authentication successful.
#Copy and paste into Site URL on Facebook App Settings: http://localhost:1410/ 
#Then, add a platform (website), and add site URL as noted above
#On left hand side of developer screen, click "add product", and choose "facebook login"
#Enable embedded browser oauth login, and add URL to valid oauth redirect urls
#Now, return to R, press any key, and authentication will be complete
save(my_oauth, file="my_oauth")
load("my_oauth")
me<-getUsers("me", token = my_oauth,private_info = TRUE)
me$name ###pull my own facebook data
[1] "Alex DaSilva"
my_likes<-getLikes(user="me",token=my_oauth) ###see what I've liked
my_likes[1:10,]##top ten

Let see what Trump’s Facebook page is like…

trump<-getPage(153080620724,token=my_oauth,n=3000)###find trump's page unique id and pull last 3000 posts; turns out this page has 2975
25 posts 50 posts 75 posts 100 posts 125 posts 150 posts 175 posts 200 posts 225 posts 250 posts 275 posts 300 posts 325 posts 350 posts 375 posts 400 posts 425 posts 450 posts 475 posts 500 posts 525 posts 550 posts 575 posts 600 posts 625 posts 650 posts 675 posts 700 posts 725 posts 750 posts 775 posts 800 posts 825 posts 850 posts 875 posts 900 posts 925 posts 950 posts 975 posts 1000 posts 1025 posts 1050 posts 1075 posts 1100 posts 1125 posts 1150 posts 1175 posts 1200 posts 1225 posts 1250 posts 1275 posts 1300 posts 1325 posts 1350 posts 1375 posts 1400 posts 1425 posts 1450 posts 1475 posts 1500 posts 1525 posts 1550 posts 1575 posts 1600 posts 1625 posts 1650 posts 1675 posts 1700 posts 1725 posts 1750 posts 1775 posts 1800 posts 1825 posts 1850 posts 1875 posts 1900 posts 1925 posts 1950 posts 1975 posts 2000 posts 2025 posts 2050 posts 2075 posts 2100 posts 2125 posts 2150 posts 2175 posts 2200 posts 2225 posts 2250 posts 2275 posts 2300 posts 2325 posts 2350 posts 2375 posts 2400 posts 2425 posts 2450 posts 2475 posts 2500 posts 2525 posts 2550 posts 2575 posts 2600 posts 2625 posts 2650 posts 2675 posts 2700 posts 2725 posts 2750 posts 2775 posts 2800 posts 2825 posts 2850 posts 2875 posts 2900 posts 2925 posts 
###get likes, loves, angered etc from posts
trump.list<-list()
for (i in 1:nrow(trump))
  {
trump.list[[i]] <- getReactions(post=trump$id[i], token=my_oauth,verbose=FALSE)
}
trump.df<-do.call("rbind", trump.list)
trump.df$time<-rev(seq(1,2925,1)) ####2925 is most  recent time point
trump.df<-cbind(trump.df,trump[,c(3,5,6,8)])
plot(trump.df$time,trump.df$likes_count) ###get a crude distribution of likes over time

######what is his most popular post?
quantile(trump.df$likes_count)
     0%     25%     50%     75%    100% 
      7    8120   34769   70473 1113987 
most.liked<-subset(trump.df,likes_count>=1000000)
head(most.liked) ###telling obama to quit taking credit for killing bin laden

Let’s make a word cloud of his favorite words from his last 2925 posts…

trump.words<-trump[,"message",drop=TRUE]
trump.words<-gsub("[^[:alnum:]///' ]", "", trump.words)
corpus<-VCorpus(VectorSource(trump.words))
corpus<-tm_map(corpus,function(x) removeWords(x,stopwords()))
col=brewer.pal(6,"Dark2")
wordcloud(corpus, min.freq=100, scale=c(3,2),rot.per = 0.25,
          random.color=T, max.word=50, random.order=F,colors=col)

#######sentiment analysis, quick sample...would obviously be more interesting to look at this on a daily basis
library(tidytext)
temp.df<-trump
#words.df<-gsub("[^[:alnum:]///' ]","", temp.df) ##fine but doesnt wrap back to df
words.df<-as.data.frame(lapply(temp.df, function(y) gsub("[^[:alnum:]///' ]", "", y)))
words.df$message<-as.character(words.df$message)
tokens<-data_frame(text = words.df$message) %>% unnest_tokens(word, text)
analysis<-tokens %>%
  inner_join(get_sentiments("nrc")) %>% # pull out only sentiment words
  count(sentiment) # count the # of words by type
Joining, by = "word"
  
analysis
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCg0KYGBge3J9DQpsaWJyYXJ5KGRldnRvb2xzKQ0KaW5zdGFsbF9naXRodWIoInBhYmxvYmFyYmVyYS9SZmFjZWJvb2svUmZhY2Vib29rIikNCmxpYnJhcnkoUmZhY2Vib29rKQ0KDQpteV9vYXV0aDwtZmJPQXV0aChhcHBfaWQ9IjEzMTAyMTYyNzU2NjIwNyIsYXBwX3NlY3JldD0iNjg4Yjk0Yjk1NGFjZTY0ZWJmNjhiNjFjZjBkNDQ1OGEiKSAjIyMjY3JlYXRlIGFjY2VzcyB0b2tlbiwgc2hvcnQgdGVybSB0aG91Z2ggb25seSBsYXN0cyBhIGZldyBob3Vycw0KDQojQ29weSBhbmQgcGFzdGUgaW50byBTaXRlIFVSTCBvbiBGYWNlYm9vayBBcHAgU2V0dGluZ3M6IGh0dHA6Ly9sb2NhbGhvc3Q6MTQxMC8gDQojVGhlbiwgYWRkIGEgcGxhdGZvcm0gKHdlYnNpdGUpLCBhbmQgYWRkIHNpdGUgVVJMIGFzIG5vdGVkIGFib3ZlDQojT24gbGVmdCBoYW5kIHNpZGUgb2YgZGV2ZWxvcGVyIHNjcmVlbiwgY2xpY2sgImFkZCBwcm9kdWN0IiwgYW5kIGNob29zZSAiZmFjZWJvb2sgbG9naW4iDQojRW5hYmxlIGVtYmVkZGVkIGJyb3dzZXIgb2F1dGggbG9naW4sIGFuZCBhZGQgVVJMIHRvIHZhbGlkIG9hdXRoIHJlZGlyZWN0IHVybHMNCiNOb3csIHJldHVybiB0byBSLCBwcmVzcyBhbnkga2V5LCBhbmQgYXV0aGVudGljYXRpb24gd2lsbCBiZSBjb21wbGV0ZQ0KDQpzYXZlKG15X29hdXRoLCBmaWxlPSJteV9vYXV0aCIpDQpsb2FkKCJteV9vYXV0aCIpDQoNCmBgYA0KDQpgYGB7cn0NCg0KbWU8LWdldFVzZXJzKCJtZSIsIHRva2VuID0gbXlfb2F1dGgscHJpdmF0ZV9pbmZvID0gVFJVRSkNCg0KbWUkbmFtZSAjIyNwdWxsIG15IG93biBmYWNlYm9vayBkYXRhDQoNCm15X2xpa2VzPC1nZXRMaWtlcyh1c2VyPSJtZSIsdG9rZW49bXlfb2F1dGgpICMjI3NlZSB3aGF0IEkndmUgbGlrZWQNCg0KbXlfbGlrZXNbMToxMCxdIyN0b3AgdGVuDQoNCg0KYGBgDQoNCkxldCBzZWUgd2hhdCBUcnVtcCdzIEZhY2Vib29rIHBhZ2UgaXMgbGlrZS4uLg0KYGBge3J9DQp0cnVtcDwtZ2V0UGFnZSgxNTMwODA2MjA3MjQsdG9rZW49bXlfb2F1dGgsbj0zMDAwKSMjI2ZpbmQgdHJ1bXAncyBwYWdlIHVuaXF1ZSBpZCBhbmQgcHVsbCBsYXN0IDMwMDAgcG9zdHM7IHR1cm5zIG91dCB0aGlzIHBhZ2UgaGFzIDI5NzUNCg0KDQojIyNnZXQgbGlrZXMsIGxvdmVzLCBhbmdlcmVkIGV0YyBmcm9tIHBvc3RzDQp0cnVtcC5saXN0PC1saXN0KCkNCmZvciAoaSBpbiAxOm5yb3codHJ1bXApKQ0KICB7DQp0cnVtcC5saXN0W1tpXV0gPC0gZ2V0UmVhY3Rpb25zKHBvc3Q9dHJ1bXAkaWRbaV0sIHRva2VuPW15X29hdXRoLHZlcmJvc2U9RkFMU0UpDQoNCn0NCg0KDQp0cnVtcC5kZjwtZG8uY2FsbCgicmJpbmQiLCB0cnVtcC5saXN0KQ0KdHJ1bXAuZGYkdGltZTwtcmV2KHNlcSgxLDI5MjUsMSkpICMjIyMyOTI1IGlzIG1vc3QgIHJlY2VudCB0aW1lIHBvaW50DQp0cnVtcC5kZjwtY2JpbmQodHJ1bXAuZGYsdHJ1bXBbLGMoMyw1LDYsOCldKQ0KDQpwbG90KHRydW1wLmRmJHRpbWUsdHJ1bXAuZGYkbGlrZXNfY291bnQpICMjI2dldCBhIGNydWRlIGRpc3RyaWJ1dGlvbiBvZiBsaWtlcyBvdmVyIHRpbWUNCg0KIyMjIyMjd2hhdCBpcyBoaXMgbW9zdCBwb3B1bGFyIHBvc3Q/DQoNCnF1YW50aWxlKHRydW1wLmRmJGxpa2VzX2NvdW50KQ0KDQptb3N0Lmxpa2VkPC1zdWJzZXQodHJ1bXAuZGYsbGlrZXNfY291bnQ+PTEwMDAwMDApDQpoZWFkKG1vc3QubGlrZWQpICMjI3RlbGxpbmcgb2JhbWEgdG8gcXVpdCB0YWtpbmcgY3JlZGl0IGZvciBraWxsaW5nIGJpbiBsYWRlbg0KDQpgYGANCg0KTGV0J3MgbWFrZSBhIHdvcmQgY2xvdWQgb2YgaGlzIGZhdm9yaXRlIHdvcmRzIGZyb20gaGlzIGxhc3QgMjkyNSBwb3N0cy4uLg0KYGBge3IgZmlnLmhlaWdodCA9IDgsIGZpZy53aWR0aD01fQ0KDQp0cnVtcC53b3JkczwtdHJ1bXBbLCJtZXNzYWdlIixkcm9wPVRSVUVdDQoNCnRydW1wLndvcmRzPC1nc3ViKCJbXls6YWxudW06XS8vLycgXSIsICIiLCB0cnVtcC53b3JkcykNCg0KY29ycHVzPC1WQ29ycHVzKFZlY3RvclNvdXJjZSh0cnVtcC53b3JkcykpDQpjb3JwdXM8LXRtX21hcChjb3JwdXMsZnVuY3Rpb24oeCkgcmVtb3ZlV29yZHMoeCxzdG9wd29yZHMoKSkpDQoNCg0KY29sPWJyZXdlci5wYWwoNiwiRGFyazIiKQ0Kd29yZGNsb3VkKGNvcnB1cywgbWluLmZyZXE9MTAwLCBzY2FsZT1jKDMsMikscm90LnBlciA9IDAuMjUsDQogICAgICAgICAgcmFuZG9tLmNvbG9yPVQsIG1heC53b3JkPTUwLCByYW5kb20ub3JkZXI9Rixjb2xvcnM9Y29sKQ0KDQoNCmBgYA0KDQoNCmBgYHtyfQ0KIyMjIyMjI3NlbnRpbWVudCBhbmFseXNpcywgcXVpY2sgc2FtcGxlLi4ud291bGQgb2J2aW91c2x5IGJlIG1vcmUgaW50ZXJlc3RpbmcgdG8gbG9vayBhdCB0aGlzIG9uIGEgZGFpbHkgYmFzaXMNCmxpYnJhcnkodGlkeXRleHQpDQoNCnRlbXAuZGY8LXRydW1wDQojd29yZHMuZGY8LWdzdWIoIlteWzphbG51bTpdLy8vJyBdIiwiIiwgdGVtcC5kZikgIyNmaW5lIGJ1dCBkb2VzbnQgd3JhcCBiYWNrIHRvIGRmDQp3b3Jkcy5kZjwtYXMuZGF0YS5mcmFtZShsYXBwbHkodGVtcC5kZiwgZnVuY3Rpb24oeSkgZ3N1YigiW15bOmFsbnVtOl0vLy8nIF0iLCAiIiwgeSkpKQ0Kd29yZHMuZGYkbWVzc2FnZTwtYXMuY2hhcmFjdGVyKHdvcmRzLmRmJG1lc3NhZ2UpDQoNCnRva2VuczwtZGF0YV9mcmFtZSh0ZXh0ID0gd29yZHMuZGYkbWVzc2FnZSkgJT4lIHVubmVzdF90b2tlbnMod29yZCwgdGV4dCkNCg0KYW5hbHlzaXM8LXRva2VucyAlPiUNCiAgaW5uZXJfam9pbihnZXRfc2VudGltZW50cygibnJjIikpICU+JSAjIHB1bGwgb3V0IG9ubHkgc2VudGltZW50IHdvcmRzDQogIGNvdW50KHNlbnRpbWVudCkgIyBjb3VudCB0aGUgIyBvZiB3b3JkcyBieSB0eXBlDQogIA0KYW5hbHlzaXMNCmBgYA0KDQo=