Skip to content

Instantly share code, notes, and snippets.

@theawesomenayak
Last active October 18, 2020 16:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save theawesomenayak/ad384538704b43013ce2acaa74716dcf to your computer and use it in GitHub Desktop.
Save theawesomenayak/ad384538704b43013ce2acaa74716dcf to your computer and use it in GitHub Desktop.
private static final String NEWS_URL = "https://news.google.com/news/rss";
private static final HttpClient HTTP_CLIENT = HttpClient.newBuilder()
.version(Version.HTTP_2)
.followRedirects(HttpClient.Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(10))
.build();
private String getNewsFromGoogle()
throws IOException, InterruptedException, XMLStreamException {
final HttpRequest request = HttpRequest.newBuilder()
.GET()
.uri(URI.create(NEWS_URL))
.setHeader("User-Agent", "Daily News Lambda")
.build();
final HttpResponse<String> response = HTTP_CLIENT
.send(request, HttpResponse.BodyHandlers.ofString());
return rssToNewsItems(response.body()).toString();
}
private List<NewsItem> rssToNewsItems(final String rssFeed)
throws XMLStreamException {
final List<NewsItem> newsItems = new ArrayList<>();
final XMLInputFactory inputFactory = XMLInputFactory.newInstance();
final InputStream inputStream = new ByteArrayInputStream(rssFeed.getBytes());
final XMLEventReader reader = inputFactory.createXMLEventReader(inputStream);
NewsItem newsItem = null;
while (reader.hasNext()) {
XMLEvent nextEvent = reader.nextEvent();
if (nextEvent.isStartElement()) {
final StartElement startElement = nextEvent.asStartElement();
switch (startElement.getName().getLocalPart()) {
case "item":
newsItem = new NewsItem();
break;
case "title":
nextEvent = reader.nextEvent();
setTitle(nextEvent, newsItem);
break;
case "pubDate":
nextEvent = reader.nextEvent();
setPubDate(nextEvent, newsItem);
break;
default:
break;
}
} else if (nextEvent.isEndElement()) {
final EndElement endElement = nextEvent.asEndElement();
if (endElement.getName().getLocalPart().equals("item")) {
newsItems.add(newsItem);
}
}
}
return newsItems;
}
private void setTitle(final XMLEvent xmlEvent, final NewsItem newsItem) {
if (null != newsItem) {
newsItem.setTitle(xmlEvent.asCharacters().getData());
}
}
private void setPubDate(final XMLEvent xmlEvent, final NewsItem newsItem) {
if (null != newsItem) {
newsItem.setPubDate(xmlEvent.asCharacters().getData());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment