public List<ItvProgramme> get(String uri) throws Exception { Reader in = new StringReader(httpClient.getContentsOf(uri)); Unmarshaller u = context.createUnmarshaller(); u.setSchema(null); ItvProgrammes itvProgrammes = (ItvProgrammes) u.unmarshal(in); for (ItvProgramme program : itvProgrammes.programmeList()) { log.info("fetching details for: " + program.url()); fetchEpisodeDetails(program); } return itvProgrammes.programmeList(); }
private void addEpisodesTo( ItvProgramme program, HtmlNavigator htmlNavigator, List<Element> content) { for (Element element : content) { Element link = htmlNavigator.firstElementOrNull("./h3/a", element); String episodePage = link.getAttributeValue("href"); Element description = htmlNavigator.firstElementOrNull("./p[@class='progDesc']", element); Element date = htmlNavigator.firstElementOrNull("./p[@class='date']", element); program.addEpisode(new ItvEpisode(date.getText(), description.getText(), episodePage)); } }
private void fetchEpisodeDetails(ItvProgramme program) { int programmeId = program.programmeId(); try { String data = httpClient.getContentsOf( "http://www.itv.com/_app/Dynamic/CatchUpData.ashx?ViewType=1&Filter=" + programmeId + "&moduleID=262033&columnWidth=2"); HtmlNavigator htmlNavigator = new HtmlNavigator(data); List<Element> content = htmlNavigator.allElementsMatching("//div[@class='content']"); addEpisodesTo(program, htmlNavigator, content); } catch (Exception e) { throw new FetchException("Error fetching ITV programme with id: " + programmeId, e); } }