ITI0011RUS:task12
Срок сдачи упражнения 19-е занятие (8 апреля).
Общая информация об упражнениях: ITI0011RUS_Practice.
Обратно на страницу предмета.
Описание
Реализовать запрос твитов. В качестве входного параметра передается местоположение (город). Как результат работы программа распечатывает твиты, соответствующие данному месту (городу).
Перед распечаткой твиты необходимо сохранить в лист типа Tweet
(интерфейс из 2й домашней работы). Создайте новый класс, который реализует данный интерфейс. В созданном классе необходимо переопределить метод toString()
.
Примечание. Tweet.getUser()
в случае, если вы используете библиотеку twitter4j
должен возвращать status.getUser().getScreenName()
, где status
является одной из записей в результатах поиска (один объект Tweet).
Шаблон
Ниже даны интерфейсы из 2й домашней работы. Вы должны создать классы, реализующиe их. Например, public class SomeVeryReadableAndCoolNameTwitterSearch implements TwitterSearch { ... }
. Все методы, которые есть в интерфейсе, необходимо реализовать.
TwitterQuery.java:
Тип данных, который хранит данные, необходимые для запроса в Твиттер. Содержит геттеры и сеттеры. Объект этого типа будет передаваться в запрос Твиттера (запрос будет использовать данные из этого объекта).
<source lang="java">
/**
* Data object for twitter query parameters. * It holds all the necessary values to make the * twitter search. The location is stored for caching. * When the data is read from the cache, the * main location should also be stored here. * If the geographical data is missing, the main location * (or the getLocation() value) is used to make the * query from twitter API. * @author Ago * */
public interface TwitterQuery { public void setLatitude(double latitude); public void setLongitude(double longitude); public void setRadius(double radius); public void setLocation(String location); /** * The count of tweets to query. * @param count Count of tweets to query */ public void setCount(int count);
public double getLatitude(); public double getLongitude(); public double getRadius(); public String getLocation(); public int getCount();
/** * Checks whether the given instance has necessary * parameters set. This is used in case of caching - * if location exist but all the parameters do * not exist, the cache needs to be updated. * @return Whether latitude, longitude and radius are set */ public boolean isGeoSet(); }
</source>
TwitterSearch.java:
Основная функциональность будет в этом классе: читаете данные, используя библиотеку twitter4j, и возвращаете список твитов.
<source lang="java">
import java.util.List;
/**
* Twitter search functionality. The implementation * of this interface should be able to search tweets * from Twitter API. * @author Ago * */
public interface TwitterSearch { /** * Given an object with query parameters send a * query to Twitter API, reads out tweet information * and returns a list of Tweet objects. * @param query Query parameters to be used for search * @return A list of Tweet objects */ public List<Tweet> getTweets(TwitterQuery query);
}
</source>
Tweet.java:
Тип данных для твита. Содержит геттеры и сеттеры.
<source lang="java">
import java.util.Date;
/**
* Data object for a tweet. Holds the text, * the author and the timestamp. * The methods are regular getters/setters. * @author Ago * */
public interface Tweet { public String getText(); public void setText(String text);
public String getUser(); public void setUser(String user);
public Date getTimestamp(); public void setTimestamp(Date timestamp); }
</source>
Ваш основной файл, который запускает программу, может быть таким: Не изменяйте имена переменных и их типы — они используются для тестирования. Имена классов, создаваемых вами, могут быть любыми. Интерфейсы изменять нельзя.
<source lang="java"> import java.util.List;
public class Main {
public static TwitterSearch twitterSearch; public static List<Tweet> tweets;
public static void main(String[] args) { init(); // tallinn printTweets(59.4372155, 24.7453688, 5, 10); }
/** * Initialize twitter search object. It's similar * to HW2 constructor, where we have to instantiate the service. */ public static void init() { twitterSearch = new BestTwitterSearch();
}
/** * Given parameters, it prints out the tweets. * It uses the service provided in init() * (or test system can manually set its own service). * Tweets have to be stored in tweets variable (for test system) * @param latitude * @param longitude * @param radius * @param count */ public static void printTweets(double latitude, double longitude, double radius, int count) { TwitterQuery twitterQuery = new BestTwitterQuery(); twitterQuery.setCount(count); twitterQuery.setLatitude(latitude); twitterQuery.setLongitude(longitude); twitterQuery.setRadius(radius); // location is not needed tweets = twitterSearch.getTweets(twitterQuery); // print out for (Tweet t : tweets) { System.out.println(t); }
// the test system will check for tweets }
}
</source>