package com.novoda.enews;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import java.time.LocalDateTime;
import java.util.stream.Stream;
public class Scraper {
private final SlackHistoryFetcher slackHistoryFetcher;
Scraper(SlackHistoryFetcher slackHistoryFetcher) {
this.slackHistoryFetcher = slackHistoryFetcher;
}
public Stream<ChannelHistory.Message> scrape(LocalDateTime start, LocalDateTime end) {
ChannelHistory channelHistory = slackHistoryFetcher.getChannelHistory(start, end);
System.out.println(channelHistory.getHistoryFrom() + " / " + channelHistory.getHistoryTo());
return channelHistory
.getMessages()
.parallelStream()
.map(message -> new ChannelHistory.Message(message.toString().replace("#C0YNBKANM", "#eNews")))
.filter(message -> {
String messageText = message.toString().toLowerCase();
return messageText.contains("#enews")
&&
messageText.contains("http");
});
}
public static class Factory {
public Scraper newInstance(String slackToken) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://slack.com/api/")
.addConverterFactory(GsonConverterFactory.create())
.build();
SlackWebService slackWebService = retrofit.create(SlackWebService.class);
SlackHistoryFetcher slackHistoryFetcher = SlackHistoryFetcher.from(slackWebService, slackToken);
return new Scraper(slackHistoryFetcher);
}
}
}