ITI0011RUS:task12

Allikas: Kursused
Mine navigeerimisribale Mine otsikasti

Срок сдачи упражнения 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>