Last active
October 18, 2020 16:13
-
-
Save theawesomenayak/ad384538704b43013ce2acaa74716dcf to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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