2013-04-04 8 views
2

J'essaie d'analyser les données rss de ce flux: http://fulltextrssfeed.com/feeds.bbci.co.uk/news/rss.xml, qui a été généré en utilisant le site FullTextRssFeed. Le seul problème est que quand j'essaie d'obtenir la description, je reçois '<', tout le reste est normal! J'ai essayé pour utiliser JSoup avec cela, mais je ne suis pas sûr de savoir comment. Pourriez-vous suggérer comment? Le code que j'ai utilisé est le même que celui utilisé dans this tutorial, mais j'ai substitué l'URL RSS utilisée. Merci encore! *Here is my RSS reader in action*Flux RSS description renvoie «<'

+1

"Le code que j'ai utilisé est le même que celui de ce tutoriel". Ceci est mentionné dans la dernière partie de ma question. – AndroidDev

+0

Mon erreur, je pensais que vous avez dit que vous * utilisiez jsoup, plutôt que vous * essayé * en utilisant jsoup. En tout cas, cela fonctionne-t-il correctement si vous pointez l'url sur leur flux rss au lieu du vôtre? – FoamyGuy

+0

essayez ceci [link] (http://www.ibm.com/developerworks/opensource/library/x-android/) J'ai utilisé cet exemple pour obtenir des flux RSS, et ils fonctionnent bien. –

Répondre

1

Alors que la recherche sur le web pour des idées sur la façon de le faire, je trouve que ce faisant est en fait illegal comme cette méthode d'obtenir le contenu ne respecte pas les conditions d'utilisation de la plupart des sources web j'espérais utiliser . Pour l'instant, vous devrez rester avec des flux RSS courts.

3

Votre problème est dû au fait que la description de votre flux RSS contient du code HTML plutôt que du texte brut. Voici le contenu de la description:

<div><span class="story-date"><span class="date">3 April 2013</span> <span class="time-text">Last updated at</span> <span class="time">23:25 ET</span></span> <p><img src="http://news.bbcimg.co.uk/media/images/66739000/jpg/_66739180_philpotts.jpg" width="464" height="261" alt="Mick and Mairead Philpott, Paul Mosley"/><span class="c2">Mick and Mairead Philpott, and Paul Mosley, will be sentenced on Thursday</span></p> <p class="introduction" id="story_continues_1">A couple convicted of killing six of their children in a house fire in Derby are due to be sentenced later.</p> <p>Mick and Mairead Philpott will reappear at Nottingham Crown Court where they were found guilty of six counts of manslaughter, along with their friend Paul Mosley, on Tuesday.</p> <p>The maximum sentence for the crime is life imprisonment.</p> <p>Mrs Justice Thirlwall was due to pass sentence on Wednesday but needed more time to consider mitigation.</p> <p>The court was told that Philpott, 56, was jailed for seven years in 1978 for attempting to murder a previous girlfriend and given a concurrent five-year sentence for stabbing the woman's mother.</p> <p>In 1991 he received a conditional discharge for assault after he head-butted a colleague</p> <p>And in 2010 he was given a police caution after slapping Mairead and dragging her outside by her hair.</p> <p>When Philpott set fire to his house in Victory Road, Derby, he was also facing trial over a road rage incident in which he punched a motorist in the face.</p> <p>He had admitted common assault in relation to the incident but denied dangerous driving.</p> <span class="cross-head">Rape allegation</span> <p>Police have also confirmed that they intend to "thoroughly" investigate an allegation that Philpott raped a woman several years ago.</p> <p>She made the allegation after the death of Philpott's children, but police decided to wait until the end of the manslaughter trial before investigating the complaint further.</p> <p>On Tuesday the jury returned unanimous manslaughter verdicts on Philpott and Mosley, 46, while Mairead Philpott, 32, was convicted by a majority.</p> <p>Jade Philpott, 10, John, nine, Jack, eight, Jesse, six, and Jayden, five, died on the morning of the fire on 11 May 2012.</p> <p>Mairead Philpott's son from a previous relationship, 13-year-old Duwayne, died later in hospital.</p> </div><img src="http://pixel.quantserve.com/pixel/p-89EKCgBk8MZdE.gif" border="0" height="1" width="1" /> 

Vous aurez besoin de modifier l'analyseur d'une certaine façon qu'il peut ignorer qui sont dans le contenu HTML à l'intérieur de la description. Une fois que vous avez extrait l'extrait html complet, vous pouvez le rendre dans un WebView. Je pense que généralement CDATA est utilisé quand il y a un autre type de contenu XML (dans ce cas HTML) qui se trouve dans un élément de données XML tel qu'un flux RSS. Honnêtement, bien que je ne sois pas familier avec les tenants et les aboutissants, je pourrais être incorrect.

+0

Vous avez raison sur la section [CDATA] (http://www.w3schools.com/xml/xml_cdata.asp). –

2

Le code HTML que vous obtenez de myRssFeed.getDescription() ressemble à quelque chose comme ceci:

<div><span class="story-date"><span class="date">6 April 2013</span> <span class="time-text">Last updated at</span> <span class="time">08:57 ET</span></span> <p><img src="http://news.bbcimg.co.uk/media/images/51606000/jpg/_51606573_fa1d16c0-9c6c-4f82-b0b8-ab66ddd94f78.jpg" width="304" height="171" alt="Breaking news"/></p> <p class="introduction">Nelson Mandela has been discharged from hospital after treatment for pneumonia, South Africa's government has said.</p> <p>It said there had been "a sustained and gradual improvement in his condition".</p> <p>The 94-year-old was admitted on 27 March for a recurring lung infection and had fluid drained at the undisclosed hospital.</p> <p>Mr Mandela served as South Africa's first black president from 1994 to 1999 and is regarded by many as the father of the nation.</p> <p>The <a href="http://redirect.viglink.com?key=11fe087258b6fc0532a5ccfc924805c0&u=http%3A%2F%2Fwww.thepresidency.gov.za%2Fpebble.asp%3Frelid%3D15178">presidency statement read</a>: "Former President Nelson Mandela has been discharged from hospital today, 6 April, following a sustained and gradual improvement in his general condition.</p> <p>"The former president will now receive home-based high care. President [Jacob] Zuma thanks the hard working medical team and hospital staff for looking after Madiba so efficiently."</p> <p>Madiba is Mr Mandela's clan name.</p> <p>The statement continued: "[Mr Zuma] also extended his gratitude to all South Africans and friends of the Republic in Africa and around the world for support."</p> </div><img src="http://pixel.quantserve.com/pixel/p-89EKCgBk8MZdE.gif" border="0" height="1" width="1" /> 

En utilisant Jsoup vous pouvez essayer (non testé):

Au lieu de

feedDescribtion.setText(myRssFeed.getDescription()); 

utiliser ceci:

feedDescribtion.setText(extractDescriptionText(myRssFeed.getDescription()); 

avec la méthode suivante:

private String extractDescriptionText(String description) { 
    StringBuffer b = new StringBuffer(); 
    Document dom = Jsoup.parse(description); 
    Elements paragraphs = dom.getElementsByTag("p"); 
    for (int i=1; i<paragraphs.size(); i++) { // start with 1 to skip the 'breaking news' paragraph 
     Element p = paragraphs.get(i); 
     b.append(p.text()); 
     b.append("\n"); // line-break after each paragraph 
    } 
    return b.toString(); 
} 

Cela devrait fonctionner. Peut-être que quelques ajustements sont nécessaires mais cela peut être réalisé assez facilement avec l'aide de Jsoup.

EDIT:

C'est ce que extractDescriptionText() donne pour l'exemple ci-dessus:

Nelson Mandela a quitté l'hôpital après le traitement de la pneumonie , le gouvernement de l'Afrique du Sud a dit. Il a déclaré qu'il y avait eu "une amélioration soutenue et progressive de son état". Le âgé de 94 ans a été admis le 27 mars pour une infection pulmonaire récurrente et a eu des liquides drainés à l'hôpital non divulgués. M. Mandela a servi comme en tant que premier président noir de l'Afrique du Sud de 1994 à 1999 et est considéré par beaucoup comme le père de la nation. La déclaration de la présidence lire: "Ancien président Nelson Mandela a été libéré de hôpital aujourd'hui 6 avril, suite à une amélioration soutenue et progressive dans son état général." L'ancien président recevra maintenant haute soins à domicile. Le président [Jacob] Zuma remercie l'équipe médicale et le personnel hospitalier pour avoir soigné Madiba de manière efficace. "Madiba est le nom du clan de M. Mandela.La déclaration a continué: "[M. Zuma] a également exprimé sa gratitude à tous les Africains et amis de la République d'Afrique et du monde entier pour leur soutien."

+0

Avez-vous essayé ceci? Je suis loin de ma machine pendant que je suis en vacances, donc je ne peux pas essayer par moi-même. – AndroidDev

+0

Non, ce n'est pas testé, mais j'ai déjà travaillé avec Jsoup et je suis sûr que ça marchera. Comme mentionné, il sera peut-être nécessaire de faire quelques ajustements, par ex. il y a un lien incorporé dans l'exemple ci-dessus et je ne suis pas sûr de savoir comment la méthode Element # text() gère cela. – Ridcully

+0

D'accord, il faudra environ 6/5 jours avant de pouvoir tester ce code, et j'espère pouvoir accepter et récompenser la prime pour cette réponse, merci! – AndroidDev

1

Je voudrais commenter mais je n'ai pas assez de points.

Je recommanderais d'utiliser des tuyaux Yahoo pour rediriger vos flux rss. Vous pouvez même le choisir pour être redirigé en json plutôt qu'en xml.

http://pipes.yahoo.com/pipes/

Si votre analyseur fonctionne correctement, sur la plupart des sites Web que vous visité ce serait la meilleure façon de résoudre votre problème.