package qa.qcri.aidr.collector.api;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import com.google.gson.Gson;
import facebook4j.Event;
import facebook4j.Facebook;
import facebook4j.FacebookException;
import facebook4j.FacebookFactory;
import facebook4j.Group;
import facebook4j.Ordering;
import facebook4j.Page;
import facebook4j.Post;
import facebook4j.Reading;
import facebook4j.ResponseList;
import facebook4j.auth.AccessToken;
import facebook4j.internal.org.json.JSONException;
/**
* @author Kushal RESTFul APIs to start and stop Twitter collections. TODO:
* remove non-API related operations such as startPersister to other
* appropriate classes.
*/
public class FbCollectorTest {
private static String accessToken = "EAACEdEose0cBAJwNtjZCHT1RtPkwHQCAqtqrpojdNX6n6dnRzkiRDfrXo4QHdv1ZAvoChFszc10uLVrkfZBNGChVnbrxKYHMQFXX2CnwgxjPllnnmoO94SeZAZC5S20F5YkagP19kviBTV3X2wuKT1W0JHweGUF4eNQFZAtUS8YydvytSiWhZBn";
private static String permissions = "public_profile,user_friends,email,user_about_me,user_actions.books,user_actions.fitness,user_actions.music,user_actions.news,user_actions.video,user_birthday,user_education_history,user_events,user_games_activity,user_hometownuser_likes,user_location,user_managed_groups,user_photos,user_posts,user_relationships,user_relationship_details,user_religion_politics,user_tagged_places,user_videos,user_website,user_work_history,read_custom_friendlists,read_insights,read_audience_network_insights,read_page_mailboxes,manage_pages,publish_pages,publish_actions,rsvp_event,pages_show_list,pages_manage_cta,pages_manage_instant_articles,ads_read,ads_management,pages_messaging,pages_messaging_phone_number ";
private static String appId = "1733662670179050";
private static String appSecret = "230e58387a4a4041be2ad0108ef8f30b";
private static Integer limit = 100;
public static void main(String atgs[]) throws IOException, JSONException {
Facebook facebook = new FacebookFactory().getInstance();
facebook.setOAuthAppId(appId,appSecret);
facebook.setOAuthPermissions(permissions);
facebook.setOAuthAccessToken(new AccessToken(accessToken,1463769000L));
String keyword = "spallions";
Long fromTimestamp = 1463855400L; //22 may
Long toTimestamp = ((new Date()).getTime())/1000;
}
private static void pagePosts(Facebook facebook, String keyword, Long fromTimestamp, Long toTimestamp) throws FacebookException,
IOException {
Gson gson = new Gson();
//Post post = facebook.getPost("854029464652397_1020536088001733", new Reading().summary());
int pageOffset = 0;
while(pageOffset>=0){
ResponseList<Page> pages = facebook.searchPages(keyword, new Reading().limit(limit).order(Ordering.CHRONOLOGICAL).offset(pageOffset));
pageOffset = pages.size() == limit ? pageOffset + limit : -1;
FileWriter fw = new FileWriter("C:/Users/Kushal/Desktop/abcPage.txt", true);
BufferedWriter bw = new BufferedWriter(fw);
System.out.println(" page size "+ pages.size());
for (Page page : pages) {
int postsOffset=0;
while(postsOffset>=0){
ResponseList<Post> feed = facebook.getFeed(page.getId(),new Reading().since(fromTimestamp.toString()).fields("likes.summary(true)").until(toTimestamp.toString()).order(Ordering.CHRONOLOGICAL).limit(limit).offset(postsOffset));
postsOffset = feed.size() == limit ? postsOffset + limit : -1;
System.out.println("post size : "+feed.size()+ " for page : " +page.getId());
for (Post post : feed) {
//bw.write(gson.toJson(post) + "\n\n\n");
bw.write(post + "\n\n\n");
}
}
}
bw.close();
}
}
private static void eventPosts(Facebook facebook, String keyword, Long fromTimestamp, Long toTimestamp) throws FacebookException,
IOException {
Gson gson = new Gson();
//Post post = facebook.getPost("854029464652397_1020536088001733", new Reading().summary());
int eventsOffset = 0;
while(eventsOffset>=0){
ResponseList<Event> events = facebook.searchEvents(keyword, new Reading().limit(limit).order(Ordering.CHRONOLOGICAL).offset(eventsOffset));
eventsOffset = events.size() == limit ? eventsOffset + limit : -1;
FileWriter fw = new FileWriter("C:/Users/Kushal/Desktop/abcEvent.txt", true);
BufferedWriter bw = new BufferedWriter(fw);
System.out.println("Event size "+ events.size());
for (Event event : events) {
int postsOffset=0;
while(postsOffset>=0){
ResponseList<Post> feed = facebook.getFeed(event.getId(),new Reading().since(fromTimestamp.toString()).until(toTimestamp.toString()).order(Ordering.CHRONOLOGICAL).limit(limit).offset(postsOffset).summary());
postsOffset = feed.size() == limit ? postsOffset + limit : -1;
System.out.println("post size : "+feed.size()+ " for event : " +event.getId());
for (Post post : feed) {
bw.write(gson.toJson(post) + "\n\n\n");
}
}
}
bw.close();
}
}
private static void groupPosts(Facebook facebook, String keyword, Long fromTimestamp, Long toTimestamp) throws FacebookException,
IOException {
Gson gson = new Gson();
//Post post = facebook.getPost("854029464652397_1020536088001733", new Reading().summary());
int groupsOffset = 0;
while(groupsOffset>=0){
ResponseList<Group> groups = facebook.searchGroups(keyword, new Reading().limit(limit).order(Ordering.CHRONOLOGICAL).offset(groupsOffset));
groupsOffset = groups.size() == limit ? groupsOffset + limit : -1;
FileWriter fw = new FileWriter("C:/Users/Kushal/Desktop/abcGroup.txt", true);
BufferedWriter bw = new BufferedWriter(fw);
System.out.println("Group size "+ groups.size());
for (Group group : groups) {
int postsOffset=0;
while(postsOffset>=0){
ResponseList<Post> feed = facebook.getFeed(group.getId(),new Reading().since(fromTimestamp.toString()).until(toTimestamp.toString()).order(Ordering.CHRONOLOGICAL).limit(limit).offset(postsOffset));
postsOffset = feed.size() == limit ? postsOffset + limit : -1;
System.out.println("post size : "+feed.size()+ " for group : " +group.getId());
for (Post post : feed) {
bw.write(gson.toJson(post) + "\n\n\n");
}
}
}
bw.close();
}
}
}