ROME API для разбора RSS / Atom - PullRequest
1 голос
/ 31 июля 2009

Я пытаюсь разобрать каналы RSS / Atom с помощью библиотеки ROME. Я новичок в Java, поэтому не разбираюсь во многих его тонкостях.


  1. Использует ли ROME автоматически свои модули для обработки различных каналов, когда они встречаются с ними, или я должен попросить его использовать их? Если это так, любое направление на это.
  2. Как мне добраться до правильного «источника»? Я пытался использовать item.getSource(), но это дает мне приступы. Я предполагаю, что я использую неправильный интерфейс. Некоторое направление будет высоко ценится.

Вот суть того, что у меня есть для сбора моих данных. Я отметил две области, где у меня возникли проблемы, обе вращались вокруг получения исходной информации канала. И по источнику, я хочу CNN, или FoxNews, или кого угодно, а не Автор. Судя по моему прочтению, .getSource() является правильным методом.

List<String> feedList = theFeeds.getFeeds();
List<FeedData> feedOutput = new ArrayList<FeedData>();
for (String sites : feedList ) {
  URL feedUrl = new URL(sites);
  SyndFeedInput input = new SyndFeedInput();
  SyndFeed feed = input.build(new XmlReader(feedUrl));
  List<SyndEntry> entries = feed.getEntries();
  for (SyndEntry item : entries){
    String title = item.getTitle();                 
    String link = item.getUri();
    Date date = item.getPublishedDate();
Problem here -->         **     SyndEntry source = item.getSource();
    String description;
    if (item.getDescription()== null){
      description = "";
    } else {
      description = item.getDescription().getValue();
    }
    String cleanDescription = description.replaceAll("\\<.*?>","").replaceAll("\\s+", " ");
    FeedData feedData = new FeedData(); 
    feedData.setTitle(title);
    feedData.setLink(link);
And Here -->        **      feedData.setSource(link);
    feedData.setDate(date);
    feedData.setDescription(cleanDescription);
    String preview =createPreview(cleanDescription);
    feedData.setPreview(preview);
    feedOutput.add(feedData);
    // lets print out my pieces.
    System.out.println("Title: " + title);
    System.out.println("Date: " + date);
    System.out.println("Text: " + cleanDescription);
    System.out.println("Preview: " + preview);
    System.out.println("*****");
  }
}

Ответы [ 2 ]

1 голос
/ 31 июля 2009

getSource() определенно неверно - возвращает обратно SyndFeed, к которому принадлежит рассматриваемая запись. Возможно, то, что вы хотите, это getContributors()?

Что касается модулей, они должны выбираться автоматически. Вы даже можете написать свой собственный и подключить его, как описано здесь

0 голосов
/ 12 ноября 2009

А как насчет попытки перераспределить источник из URL без использования API?

Это была моя первая мысль, так или иначе, я проверил сам по себе стандартизированный формат RSS, чтобы понять, действительно ли эта опция доступна на этом уровне, а затем попытаться проследить ее реализацию вверх ...

В RSS 2.0 я нашел исходный элемент, однако, похоже, его нет в предыдущих версиях спецификации - не очень хорошая новость для нас!

[является необязательным подэлементом 1

Его значением является название канала RSS, с которого поступил элемент, полученный из его. У него есть один обязательный атрибут, url, который ссылается на XML-код источника.

...