/* Author: Alessandro Pellegrini <alessandro.pellegrini@tin.it>
* This class posts a Birthday Thank you on your Facebook wall
* You must donwload Facebook4J for this to work.
* Before running this script, log in to Facebook!
* You must configure static variables in the class for it to work correctly!
* Compile with:
* javac -cp facebook4j-core-2.0.4.jar BirthdayThanks.java
* Run with (on Windows):
* java -cp facebook4j-core-2.0.4.jar;. BirthdayThanks
* Check if the Facebook4J core jar has the correct name!
* There is a dryRun flag which prevents the program from actually posting
* to your Facebook wall. Set it to false after having tried its behaviour!
* ...and Happy Birthday! :)
*/
import facebook4j.Facebook;
import facebook4j.FacebookException;
import facebook4j.FacebookFactory;
import facebook4j.ResponseList;
import facebook4j.Post;
import facebook4j.Reading;
import facebook4j.auth.AccessToken;
public class BirthdayThanks {
// Get an access token from https://developers.facebook.com/tools/explorer
// You must specify the following permissions when getting the token:
// read_stream, publish_actions, publish_stream
private static final String accessTokenString = "TOKEN HERE!";
// This is the reply that will be posted to your birthday posts
private static final String ThankYouMessage = "Thank you %s! :)";
// If this flag is set to 'true', then the first name of the sender will be added to the thank you string.
// Note that, for this to work, a %s must be placed in ThankYouMessage where the name should appear.
// The first name is obtained as the first token in the poster name. So, if the name is 'My Long Name',
// %s will be replaced with My.
private static final boolean addName = true;
// This is the text that will be searched for in the posts (case insensitive)
// You can add as many as you want!
private static final String[] HBtext = {"auguri", "compleanno", "auguroni", "birthday", "bday"};
// This is to set your birthday. I will look all posts one day before and one day after your birthday (GMT time)
private static final int bYear = 2014;
private static final int bMonth = 1;
private static final int bDay = 7;
// If this flag is set to 'true', the prorgam will execute a dry run, i.e. no actual
// reply will be posted on you Facebook wall!
private static final boolean dryRun = true;
/********************************************/
/** DO NOT TOUCH ANYTHING BELOW THIS LINE! **/
/********************************************/
public static void main (String[] args) throws FacebookException {
ResponseList<Post> posts = null;
// Generate facebook instance.
Facebook facebook = new FacebookFactory().getInstance();
// Use default values for oauth app id.
facebook.setOAuthAppId("", "");
// Set access token.
AccessToken at = new AccessToken(accessTokenString);
facebook.setOAuthAccessToken(at);
// Get relevant posts
System.out.println("Retrieving posts...");
Reading r = new Reading();
r.until(bYear + "-" + bMonth + "-" + (bDay+1) + "T00:00:00+0000");
r.since(bYear + "-" + bMonth + "-" + (bDay-1) + "T00:00:00+0000");
r.limit(1000); // Ok, this is a bit too much maybe! :)
posts = facebook.getFeed(r);
// Loop on them
int i = 0;
for(Post t:posts) {
if(t.getMessage() == null)
continue;
if(haveToThank(t.getMessage())) {
String thankString;
if(addName) {
String[] currName = t.getFrom().getName().split(" ");
thankString = String.format(ThankYouMessage, currName[0]);
} else {
thankString = ThankYouMessage;
}
System.out.println(++i + ". Thanking " + t.getFrom().getName() + " for post \"" + t.getMessage().substring(0, Math.min(t.getMessage().length(), 20)) + "\" with message \"" + thankString + "\"");
if(!dryRun) {
facebook.commentPost(t.getId(), thankString);
try {
Thread.sleep(1500);
} catch (InterruptedException e) {}
}
}
}
System.out.println("Done.");
}
private static boolean haveToThank(String p){
for(String s:HBtext) {
if(p.toLowerCase().indexOf(s.toLowerCase()) != -1) {
return true;
}
}
return false;
}
}