Because sharing is caring

Google AppEngine translate bot

Posted: May 13th, 2011 | Author: | Filed under: Java, Web Development | Tags: , , , | 1 Comment »

Google provided a few translation bots recently.
Since I do a lot of Dutch -> French translation, I quicly whipped up my own and deployed it to Google AppEngine:

For translating I used the unofficial google-api-translate-java jar file.
Here’s what you need to do:

Place the jar in war\WEB-INF\lib

war\WEB-INF\web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
	<servlet>
		<servlet-name>Translate_Bot</servlet-name>
		<servlet-class>be.bartv.translatebot.Translate_BotServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Translate_Bot</servlet-name>
		<url-pattern>/translate_bot</url-pattern>
	</servlet-mapping>
	<servlet>
		<servlet-name>xmppreceiver</servlet-name>
		<servlet-class>be.bartv.translatebot.XMPPReceiverServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>xmppreceiver</servlet-name>
		<url-pattern>/_ah/xmpp/message/chat/</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>
</web-app>

war\WEB-INF\appengine-web.xml

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
	<application>translate-bot</application>
	<version>1</version>
 
	<!-- Configure java.util.logging -->
	<system-properties>
		<property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
	</system-properties>
	<inbound-services>
    	<service>xmpp_message</service>
  	</inbound-services>
 
</appengine-web-app>

src\be.bartv.translatebot.XMPPReceiverServlet.java

package be.bartv.translatebot;
 
import java.io.IOException;
 
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.google.api.GoogleAPI;
import com.google.api.translate.Language;
import com.google.api.translate.Translate;
import com.google.appengine.api.xmpp.JID;
import com.google.appengine.api.xmpp.Message;
import com.google.appengine.api.xmpp.MessageBuilder;
import com.google.appengine.api.xmpp.XMPPService;
import com.google.appengine.api.xmpp.XMPPServiceFactory;
 
public class XMPPReceiverServlet extends HttpServlet{
	private static final long serialVersionUID = 2212159648921332999L;
	public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException
	{
		XMPPService service = XMPPServiceFactory.getXMPPService();
		Message message = service.parseMessage(req);
		JID jid = message.getFromJid();
		String content 	= message.getBody();
 
		String reply = "Hmmz. I Should return a translation now";
		try {
			GoogleAPI.setHttpReferrer("http://notes.bartv.be/");
			reply = Translate.execute(content, Language.DUTCH, Language.FRENCH);
		} catch (Exception e) {
			reply = "Error occurred: "+e.getMessage();
			e.printStackTrace();
		}
		service.sendMessage(new MessageBuilder().withBody(reply).withRecipientJids(jid).build());
	}
}

Sometimes, I do get a error saying I violate Google’s Terms and conditions. No idea why tho …