2009-07-30 3 views
1

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


  1. ли РИМ автоматически использовать его модули для обработки различных каналов, как это происходит через них, или я должен попросить его, чтобы использовать их? Если да, то в этом направлении.
  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("*****"); 
    } 
} 
+0

Извините за плохой выход. Как мне получить форматирование прямо здесь? Я не могу перекомпилировать код без проблем. – ButtersB

ответ

1

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

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

+0

Итак, что мне делать, чтобы получить фактический источник rss. скажем, RSS-канал от yahoo, который даст мне YAHOO, или CNN, или ESPN, или что-то еще? Я не могу понять эту часть. – ButtersB

+0

Я не уверен, что вы имеете в виду. '' GetAuthors() '/' getContributors() 'не дает вам то, что вы хотите? Где это поле вы ищете в реальных RSS? – ChssPly76

+0

getAuthors get - автор сценария, а не источник. Скажем, CNN. Это дает мне имя журналиста или foxnews @ foxnewsonline, если они так себя приписывают. Я думаю, я мог бы перебирать родительский фид и получать его. – ButtersB

0

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

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

В RSS 2.0, я нашел исходный элемент, однако кажется, что он не существует в предыдущих версиях spec- not good news для нас!

[необязательный вложенный элемент 1

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