/* * SMART FP7 - Search engine for MultimediA enviRonment generated contenT * Webpage: http://smartfp7.eu * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * The Original Code is Copyright (c) 2012-2013 of Telesto Technologies * All Rights Reserved * * Contributor(s): * Xristos Smailis <smailisxristos@yahoo.com> * Thanos Alexiou <thanos@telesto.gr> */ package eu.smartfp7.SocialNetworkFilters; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringWriter; import java.net.HttpURLConnection; import java.net.URL; import java.text.DateFormat; import java.text.DateFormatSymbols; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; import java.net.URI; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.UriBuilder; import eu.smartfp7.FilterDataTypes.TwitterResult; import eu.smartfp7.SocialNetworkManager.SocialNetworkFilter; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.rdf.model.Property; import com.hp.hpl.jena.rdf.model.Resource; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.config.ClientConfig; import com.sun.jersey.api.client.config.DefaultClientConfig; public class TwitterDateTimeExtractor implements SocialNetworkFilter { static TwitterResult getData(URL address) throws Exception { URL page = address; StringBuffer text = new StringBuffer(); HttpURLConnection conn = (HttpURLConnection) page.openConnection(); conn.connect(); InputStreamReader in = new InputStreamReader( (InputStream) conn.getContent()); BufferedReader buff = new BufferedReader(in); /* * String line = buff.readLine(); while (line != null) { * text.append(line + "\n"); line = buff.readLine(); } * * * System.out.println(text.toString()); */ JAXBContext jaxbContext = JAXBContext.newInstance(TwitterResult.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); TwitterResult result = (TwitterResult) jaxbUnmarshaller.unmarshal(in); return result; } public String filter(String queryPar, String ContextURL) { TwitterResult TwitterData = null; try { System.out.println(new URL("http://localhost:" + ContextURL.split(":")[2] + "General/TwitterDriver/Posts/?term=" + queryPar + "&pagesize=100")); TwitterData = getData(new URL("http://localhost:" + ContextURL.split(":")[2] + "General/TwitterDriver/Posts/?term=" + queryPar + "&pagesize=100")); if (TwitterData == null) return null; } catch (Exception e2) { // TODO Auto-generated catch block e2.printStackTrace(); } System.out.println(TwitterData.results.size()); ArrayList<String> Dates = extractEventDate(TwitterData, "#SMART_demo"); ArrayList<String> SessionTimes = extractEventSessionTimes(TwitterData, "#SMART_demo"); System.out.println("length=" + SessionTimes.size()); String ActivityURI = "http://SocialNetworkManager/activity"; String hasDateStr = "http://SocialNetworkManager/Event/hasDate"; String hasTemporalHintStr = "http://SocialNetworkManager/Event/hasTemporalHint"; String isActiveStr = "http://SocialNetworkManager/Event/isActive"; String hasNameStr = "http://SocialNetworkManager/Event/hasName"; // create an empty Model Model model = ModelFactory.createDefaultModel(); // create the resource Resource activity = model.createResource(ActivityURI); Property hasDate = model.createProperty(hasDateStr); Property hasTemporalHint = model.createProperty(hasTemporalHintStr); Property isActive = model.createProperty(isActiveStr); Property hasName = model.createProperty(hasNameStr); for (int i = 0; i < SessionTimes.size(); i++) { activity.addProperty(hasTemporalHint, SessionTimes.get(i)); } if (!Dates.isEmpty()) { for (int i = 0; i < SessionTimes.size(); i++) { activity.addProperty(hasTemporalHint, SessionTimes.get(i)); } boolean isActiveVal = false; for (int i = 0; i < Dates.size(); i++) { activity.addProperty(hasDate, Dates.get(i)); DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); Calendar cal = Calendar.getInstance(); try { if (cal.getTime().compareTo(dateFormat.parse(Dates.get(i))) == 0) { isActiveVal = true; } } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } activity.addProperty(isActive, isActiveVal + ""); activity.addProperty(hasName, queryPar); StringWriter RDFoutput = new StringWriter(); model.write(RDFoutput, "RDF/XML-ABBREV"); return RDFoutput.toString(); } else activity.addProperty(hasName, queryPar); StringWriter RDFoutput = new StringWriter(); model.write(RDFoutput, "RDF/XML-ABBREV"); return RDFoutput.toString(); } static boolean existsInList(ArrayList<String> List, String Pattern) { for (int i = 0; i < List.size(); i++) { if (List.get(i).contentEquals(Pattern)) { return true; } } return false; } public static ArrayList<String> extractEventSessionTimes( TwitterResult TwitterData, String EventHashTag) { ArrayList<String> result = new ArrayList(); for (int i = 0; i < TwitterData.results.size(); i++) { // System.out.println(TwitterData.results.get(i).Message); // if (TwitterData.results.get(i).Message.contains(EventHashTag)) { String[] messageSplit = TwitterData.results.get(i).Message .toLowerCase().split(" "); for (int j = 0; j < messageSplit.length; j++) { if (messageSplit[j].contains(":")) { String[] timeSplit = messageSplit[j].split(":"); if (timeSplit.length == 2) { try { String minutes = (String) timeSplit[1].subSequence( 0, 2); Integer.parseInt(minutes); // System.out.println(minutes); String hour = timeSplit[0]; Integer.parseInt(hour); // System.out.println(hour); String newTime = hour + ":" + minutes; System.out.println(newTime); result.add(newTime); /* * if (existsInList(result, newTime) == false) { * * * } */ } catch (Exception e) { // System.out.println("false"); } /* * String minutes = (String) timeSplit[1].subSequence( * 0, 2); */ /* * String hour = timeSplit[0]; * System.out.println("Session at: " + hour + ":" + * minutes); System.out * .println(TwitterData.results.get(i).Message); String * newTime = hour + ":" + minutes; if * (existsInList(result, newTime) == false) { * result.add(newTime); } */ } } } // } } return result; } public static ArrayList<String> extractEventDate(TwitterResult TwitterData, String EventHashTag) { ArrayList<String> result = new ArrayList(); for (int i = 0; i < TwitterData.results.size(); i++) { // System.out.println(TwitterData.results.get(i).Message); // if (TwitterData.results.get(i).Message.contains(EventHashTag)) { Date date = null; if (TwitterData.results.get(i).Message.contains("Now")) { date = new Date(); System.out.println(TwitterData.results.get(i).Message); DateFormat dateFormat2 = new SimpleDateFormat("dd-MM-yyyy"); System.out.println(dateFormat2.format(date)); if (existsInList(result, dateFormat2.format(date)) == false) { result.add(dateFormat2.format(date)); } } String[] messageSplit = TwitterData.results.get(i).Message .toLowerCase().split(" "); for (int j = 0; j < messageSplit.length - 1; j++) { DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); try { if (messageSplit[j].lastIndexOf("/") == 4) { if (messageSplit[j].contains(",") || messageSplit[j].contains(".") || messageSplit[j].contains(":")) { messageSplit[j] = messageSplit[j].replace(',', ' '); messageSplit[j].replace(".", ""); messageSplit[j].replace(":", ""); } date = dateFormat.parse(messageSplit[j]); System.out.println(TwitterData.results.get(i).Message); DateFormat dateFormat2 = new SimpleDateFormat( "dd-MM-yyyy"); System.out.println(dateFormat2.format(date)); if (existsInList(result, dateFormat2.format(date)) == false) { result.add(dateFormat2.format(date)); } // } } } catch (ParseException e1) { String[] monthsFull = new DateFormatSymbols().getMonths(); String[] monthsShort = new DateFormatSymbols() .getShortMonths(); for (int m = 0; m < monthsFull.length; m++) { // System.out.println(months[l] + "------"); int l = m + 1; String dateStr; if ((messageSplit[j].equalsIgnoreCase(monthsFull[m]) | messageSplit[j] .equalsIgnoreCase(monthsShort[m])) & !messageSplit[j].isEmpty()) { dateStr = j + ""; if (j - 2 >= 0 && messageSplit[j - 2].contains("th")) { dateStr = messageSplit[j - 2].split("th")[0] + '-' + l; } if (isInteger(messageSplit[j + 1]) | (messageSplit[j + 1].contains(",") && isInteger(messageSplit[j + 1] .split(",")[0]))) { if (new Integer( messageSplit[j + 1].split(",")[0]) <= 31) dateStr = messageSplit[j + 1].split(",")[0] + '-' + l; } if (j - 1 >= 0 && isInteger(messageSplit[j - 1]) | (messageSplit[j - 1].contains(",") && isInteger(messageSplit[j - 1] .split(",")[0]))) { dateStr = messageSplit[j - 1].split(",")[0] + '-' + l; } if (isInteger(messageSplit[j + 1]) | (messageSplit[j - 1].contains(",") && isInteger(messageSplit[j + 1] .split(",")[0]))) { dateStr = messageSplit[j + 1].split(",")[0] + '-' + l; } if (isInteger(messageSplit[j + 1]) | (messageSplit[j + 1].contains(",") && isInteger(messageSplit[j + 1] .split(",")[0]))) { if (new Integer( messageSplit[j + 1].split(",")[0]) <= 31) dateStr = messageSplit[j + 1].split(",")[0] + '-' + l; } if (j - 1 >= 0 && isInteger(messageSplit[j - 1]) | (messageSplit[j - 1].contains(". ") && isInteger(messageSplit[j - 1] .split(". ")[0]))) { dateStr = messageSplit[j - 1].split(". ")[0] + '-' + l; } if (isInteger(messageSplit[j + 1]) | (messageSplit[j + 1].contains(". ") && isInteger(messageSplit[j + 1] .split(". ")[0]))) { if (new Integer( messageSplit[j + 1].split(". ")[0]) <= 31) dateStr = messageSplit[j + 1].split(". ")[0] + '-' + l; } if (isInteger(messageSplit[j + 1])) { dateStr = messageSplit[j + 1] + '-' + l; } if (isInteger(messageSplit[j + 1]) | (messageSplit[j + 1].contains(": ") && isInteger(messageSplit[j - 1] .split(": ")[0]))) { dateStr = messageSplit[j + 1].split(": ")[0] + '-' + l; } if (isInteger(messageSplit[j + 1]) | (messageSplit[j + 1].contains(":") && isInteger(messageSplit[j - 1] .split(": ")[0]))) { dateStr = messageSplit[j + 1].split(":")[0] + '-' + l; } if (j - 1 >= 0 && (messageSplit[j - 1].contains("-") && messageSplit[j - 1].split("-").length > 0 && isInteger(messageSplit[j - 1] .split("-")[0]))) { dateStr = messageSplit[j - 1].split("-")[0] + '-' + l; } if (isInteger(messageSplit[j + 1]) | (messageSplit[j + 1].contains("-") && messageSplit[j + 1].split("-").length > 0 && isInteger(messageSplit[j + 1] .split("-")[0]))) { dateStr = messageSplit[j + 1].split("-")[0] + '-' + l; } if (isInteger(messageSplit[j + 1]) | (messageSplit[j + 1].contains("-") && messageSplit[j + 1].split("-").length > 0 && isInteger(messageSplit[j + 1] .split("-")[0]))) { try { if (new Integer( messageSplit[j + 1].split(",")[0]) <= 31) dateStr = messageSplit[j + 1] .split("-")[0] + '-' + l; } catch (Exception e) { } } if (isInteger(messageSplit[j + 1]) | (messageSplit[j + 1].contains("-") && messageSplit[j + 1].split("-").length > 0 && isInteger(messageSplit[j + 1] .split("-")[0]))) { try { if (new Integer( messageSplit[j + 1].split(".")[0]) <= 31) dateStr = messageSplit[j + 1] .split("-")[0] + '-' + l; } catch (Exception e) { } } if (j - 1 >= 0 && messageSplit[j - 1].contains("th")) { if (messageSplit[j - 1].split("th").length > 0) dateStr = messageSplit[j - 1].split("th")[0] + '-' + l; } if (messageSplit[j + 1].contains("th")) { if (messageSplit[j + 1].split("th").length > 0) dateStr = messageSplit[j + 1].split("th")[0] + '-' + l; } if (j - 1 >= 0 && messageSplit[j - 1].contains("th ")) { if (messageSplit[j - 1].split("th ").length > 0) dateStr = messageSplit[j - 1].split("th ")[0] + '-' + l; } if (messageSplit[j + 1].contains("th ")) { if (messageSplit[j + 1].split("th ").length > 0) dateStr = messageSplit[j + 1].split("th ")[0] + '-' + l; } if (j - 1 >= 0 && messageSplit[j - 1].contains("nd") && !messageSplit[j - 1].contains("Sunday")) { if (messageSplit[j - 1].split("nd").length > 0) dateStr = messageSplit[j - 1].split("nd")[0] + '-' + l; } if (messageSplit[j + 1].contains("nd") && !messageSplit[j + 1].contains("Sunday")) { if (messageSplit[j + 1].split("nd").length > 0) dateStr = messageSplit[j + 1].split("nd")[0] + '-' + l; } if (j - 1 >= 0 && messageSplit[j - 1].contains("st")) { if (messageSplit[j - 1].split("st").length > 0) dateStr = messageSplit[j - 1].split("st")[0] + '-' + l; } if (messageSplit[j + 1].contains("st")) { if (messageSplit[j + 1].split("st").length > 0) dateStr = messageSplit[j + 1].split("st")[0] + '-' + l; } if (j - 1 >= 0 && messageSplit[j - 1].contains("rd")) { if (messageSplit[j - 1].split("rd").length > 0) dateStr = messageSplit[j - 1].split("rd")[0] + '-' + l; } if (messageSplit[j + 1].contains("rd")) { if (messageSplit[j + 1].split("rd").length > 0) dateStr = messageSplit[j + 1].split("rd")[0] + '-' + l; } if (dateStr.lastIndexOf("-") <= 2) { SimpleDateFormat year = new SimpleDateFormat( "yyyy"); dateStr += "-" + year.format(TwitterData.results .get(i).CreationDate); } try { DateFormat dateFormat2 = new SimpleDateFormat( "dd-MM-yyyy"); Date date2 = dateFormat2.parse(dateStr); System.out .println(TwitterData.results.get(i).Message); System.out.println(dateFormat.format(date2)); if (existsInList(result, dateFormat.format(date2)) == false) { result.add(dateFormat.format(date2)); } } catch (Exception e) { System.out .println(TwitterData.results.get(i).Message); System.out.println("Error:" + dateStr); } System.out.println(); } } // } // Time extraction*****************************8 } } } return result; } public static boolean isInteger(String input) { try { Integer.parseInt(input); return true; } catch (Exception e) { return false; } } public static boolean findSubEvent(String input) { try { Integer.parseInt(input); return true; } catch (Exception e) { return false; } } }