]> git.somenet.org - pub/jan/aic18.git/blob - service-twitter/src/main/java/at/aic18/g6t4/servicetwitter/service/TwitterService.java
Filter retweets from output, as they are redundant.
[pub/jan/aic18.git] / service-twitter / src / main / java / at / aic18 / g6t4 / servicetwitter / service / TwitterService.java
1 package at.aic18.g6t4.servicetwitter.service;
2
3 import at.aic18.g6t4.servicetwitter.model.Tweet;
4 import at.aic18.g6t4.servicetwitter.model.User;
5 import org.springframework.stereotype.Service;
6 import twitter4j.*;
7
8 import java.util.List;
9 import java.util.stream.Collectors;
10
11 import static java.util.function.Predicate.not;
12
13 @Service
14 public class TwitterService {
15
16     private final Twitter twitter;
17
18     public TwitterService(Twitter twitter) {
19         this.twitter = twitter;
20     }
21
22     public List<Tweet> searchTweets(String queryString) throws TwitterException {
23         Query query = new Query(queryString);
24         query.count(10);
25         QueryResult queryResult = twitter.search(query);
26         List<Status> statusList = queryResult.getTweets();
27         return parseTweets(statusList);
28     }
29
30     private List<Tweet> parseTweets(List<Status> statusList) {
31         return statusList.stream()
32                 .filter(not(Status::isRetweet))
33                 .map(this::parseTweet)
34                 .collect(Collectors.toList());
35     }
36
37     private Tweet parseTweet(Status status) {
38         return Tweet.builder()
39                 .id(status.getId())
40                 .createdAt(status.getCreatedAt())
41                 .text(status.getText())
42                 .user(parseUser(status.getUser()))
43                 .build();
44     }
45
46     private User parseUser(twitter4j.User twitterUser) {
47         return User.builder()
48                 .id(twitterUser.getId())
49                 .name(twitterUser.getName())
50                 .build();
51     }
52
53 }