Murphy, Murphy, Murphy…
FayerWayer tenía un concurso que consistía en publicar un comentario para una noticia específica justo después de las 00:00 hrs. de hoy 1 de Enero de 2009. Los dos primeros tenían un premio. Como obviamente iba a pasar las doce entre brindis, abrazos y fuegos artificiales, no iba a poder estar cerca del computador para publicar el comentario; ¡pero se me ocurrió la brillante idea!… hacer un pequeño programa en Java que se encargaría de publicar el comentario por mí mientras yo celebraba… Todo perfecto, pero nunca consideré de que la inactividad de mi notebook iba a hacer se “durmiera”… Así que bueno, ni siquiera participé…
Igual por si les sirve de algo les dejo el código que iba a usar construído usando Commons HTTP Client… (Afortunadamente no le dediqué más de 40-60 minutos).
package com.joseselman;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.HeadMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
public class ConcursoFW {
public static void main(String[] args) {
execute();
}
public static void execute() {
try {
HttpClient client = new HttpClient();
HttpMethod head = new HeadMethod("http://www.fayerwayer.com");
client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler());
int headStatusCode = client.executeMethod(head);
System.out.println("HTTP HEAD Status Code: " + headStatusCode);
head.releaseConnection();
String serverDate = head.getResponseHeader("Date").getValue();
SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
Date parsedServerDate = sdf.parse(serverDate);
System.out.println("Server Time: " + parsedServerDate);
Date now = new Date();
System.out.println("Local Time: " + now);
long diff = parsedServerDate.getTime() - now.getTime();
Calendar triggerTime = Calendar.getInstance();
triggerTime.set(Calendar.DATE, 1);
triggerTime.set(Calendar.MONDAY, Calendar.JANUARY);
triggerTime.set(Calendar.YEAR, 2009);
triggerTime.set(Calendar.HOUR, 0);
triggerTime.set(Calendar.MINUTE, 0);
triggerTime.set(Calendar.SECOND, 0);
// Le aplicamos el ajuste
triggerTime.add(Calendar.MILLISECOND, -(int) diff);
System.out.println("Trigger @: " + triggerTime.getTime());
Timer timer = new Timer();
timer.schedule(new PostMessageTask(), triggerTime.getTime());
} catch(Exception e) {
e.printStackTrace();
}
}
final static String comment = "Aca iba el comentario";
static class PostMessageTask extends TimerTask {
public void run() {
try {
System.out.println("Intentando ingresar comentario @ " + new Date());
HttpClient client = new HttpClient();
client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler());
PostMethod post = new PostMethod("http://www.fayerwayer.com/wp-comments-post.php");
NameValuePair[] data = {
new NameValuePair("author", "Jose Selman"),
new NameValuePair("email", "jose.selman@gmail.com"),
new NameValuePair("url", "http://www.joseselman.com"),
new NameValuePair("comment", comment),
new NameValuePair("comment_post_ID", "14263")
};
post.setRequestBody(data);
int postStatusCode = client.executeMethod(post);
System.out.println("Status Code: " + postStatusCode);
Header[] headers = post.getResponseHeaders();
for(Header h: headers) {
System.out.println(h.getName() + ": '" + h.getValue() + "'");
}
byte[] responseBody = post.getResponseBody();
String respuesta = new String(responseBody);
System.out.println(respuesta);
post.releaseConnection();
} catch(Exception e) {
e.printStackTrace();
}
}
}
}