/*
* 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.SocialNetworkDriver;
import java.util.ArrayList;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import eu.smartfp7.SocialNetworkManager.SocialNetworkInterface;
import eu.smartfp7.SocialNetworkManager.SocialNetworkPostListInterface;
import eu.smartfp7.SocialNetworkSearchResults.FacebookPostData;
import eu.smartfp7.SocialNetworkSearchResults.TwitterPostData;
import twitter4j.GeoLocation;
import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Tweet;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.internal.logging.Logger;
@XmlRootElement(name = "TwitterSearch")
public class TwitterDriver extends SocialNetworkInterface {
private Twitter twitter = new TwitterFactory().getInstance();
private String queryPar;
private int pageSize = 25;
@XmlElement(name = "TwitterPost")
public ArrayList<TwitterPostData> results = new ArrayList<TwitterPostData>();
private int pageIndex = 1;
@Override
public void SearchForTermUsingGeolocation(String queryPar, int PageSize,
double latitude, double longitude, double radius) {
try {
results = new ArrayList<TwitterPostData>();
if (queryPar != null) {
this.pageSize = PageSize;
this.queryPar = queryPar;
Query query = new Query(queryPar);
query.setPage(pageIndex);
query.setRpp(PageSize);
query.setResultType(Query.RECENT);
query.setGeoCode(new GeoLocation(latitude, longitude), radius,
"km");
QueryResult result = twitter.search(query);
ArrayList tweets = (ArrayList) result.getTweets();
for (int i = 0; i < tweets.size(); i++) {
results.add(new TwitterPostData((Tweet) tweets.get(i)));
}
}
} catch (TwitterException ex) {
System.err.println("Twitter Error");
// Logger.getLogger(TwitterSearch.class.getName()).log(Level.SEVERE,
// null, ex);
}
}
@Override
public void setNextPage() {
results = new ArrayList<TwitterPostData>();
pageIndex++;
Query query = new Query(queryPar);
query.setRpp(pageSize);
query.setResultType(Query.RECENT);
query.setPage(pageIndex);
QueryResult result;
try {
result = twitter.search(query);
ArrayList tweets = (ArrayList) result.getTweets();
for (int i = 0; i < tweets.size(); i++) {
results.add(new TwitterPostData((Tweet) tweets.get(i)));
}
} catch (TwitterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void setPreviousPage() {
results = new ArrayList<TwitterPostData>();
pageIndex--;
Query query = new Query(queryPar);
query.setRpp(pageSize);
query.setResultType(Query.RECENT);
query.setPage(pageIndex);
QueryResult result;
try {
result = twitter.search(query);
ArrayList tweets = (ArrayList) result.getTweets();
for (int i = 0; i < tweets.size(); i++) {
results.add(new TwitterPostData((Tweet) tweets.get(i)));
}
} catch (TwitterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public ArrayList<SocialNetworkPostListInterface> getCurrentPageResults() {
ArrayList<SocialNetworkPostListInterface> convertedResults = new ArrayList();
for (int i = 0; i < results.size(); i++) {
convertedResults.add(results.get(i));
}
return convertedResults;
}
@Override
public void SearchForTerm(String queryPar, Integer PageSize) {
Query query=null;
try {
results = new ArrayList<TwitterPostData>();
this.pageSize = PageSize;
if (queryPar != null) {
this.queryPar = queryPar.replace("%24","#");
System.out.println(this.queryPar);
query = new Query(this.queryPar);
query.setPage(pageIndex);
query.setRpp(PageSize);
query.setResultType(Query.RECENT);
QueryResult result = twitter.search(query);
ArrayList tweets = (ArrayList) result.getTweets();
for (int i = 0; i < tweets.size(); i++) {
results.add(new TwitterPostData((Tweet) tweets.get(i)));
}
}
} catch (TwitterException ex) {
System.err.println(ex);
System.err.println(query);
// Logger.getLogger(TwitterSearch.class.getName()).log(Level.SEVERE,
// null, ex);
}
}
}