¿Cómo obtener rss feeds android?

Tengo esta url aquí: http://www.webpronews.com/feeds

Ahora necesito conseguir los alimentadores y exhibirlo en androide. ¿Cualquier pista?

Utilizo la lib xmlpull_1_1_3_4c.jar y por ejemplo lea los feeds de twitter (rss) como a continuación.

XML Pull es de código abierto. Sólo tiene que ajustar las etiquetas de acuerdo con su feed. Si no puede encontrar el frasco en línea, puedo enviarlo por correo electrónico a usted. No recuerdo de dónde lo conseguí, solía estar en xmlpull.org, pero no estoy seguro de dónde está ahora. Lo tengo en algún lugar vinculado desde http://www.ibm.com/developerworks/opensource/library/x-android/

import org.developerworks.android.FeedParser; import org.developerworks.android.FeedParserFactory; import org.developerworks.android.Message; import org.developerworks.android.ParserType; import org.xmlpull.v1.XmlSerializer; .... loadFeed(ParserType.ANDROID_SAX); .... private void loadFeed(ParserType type){ try{ Log.i("AndroidNews", "ParserType="+type.name()); FeedParser parser = FeedParserFactory.getParser(type); long start = System.currentTimeMillis(); messages = parser.parse(); long duration = System.currentTimeMillis() - start; String xml = writeXml(); titles = new ArrayList<String>(messages.size()); for (Message msg : messages){ titles.add(msg.getTitle()); } } catch (Throwable t){ Log.e("AndroidNews",t.getMessage(),t); } } private String writeXml() { XmlSerializer serializer = Xml.newSerializer(); StringWriter writer = new StringWriter(); try { serializer.setOutput(writer); serializer.startDocument("UTF-8", true); serializer.startTag("", "messages"); serializer.attribute("", "number", String.valueOf(messages.size())); for (Message msg: messages){ serializer.startTag("", "message"); serializer.attribute("", "date", msg.getDate()); serializer.startTag("", "title"); serializer.text(msg.getTitle()); serializer.endTag("", "title"); serializer.startTag("", "url"); serializer.text(msg.getLink().toExternalForm()); serializer.endTag("", "url"); serializer.startTag("", "body"); serializer.text(msg.getDescription()); serializer.endTag("", "body"); serializer.endTag("", "message"); } serializer.endTag("", "messages"); serializer.endDocument(); return writer.toString(); } catch (Exception e) { throw new RuntimeException(e); } } 

Editar:

Esta es la clase entera que rellena los feeds a una vista de lista, usando un ArrayAdapter, no hay ningún cursor en ninguna base de datos sin embargo, ya que no almaceno los feeds localmente:

 import android.app.ProgressDialog; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.text.Html; import android.util.Log; import android.util.Xml; import android.view.Gravity; import android.view.View; import android.widget.*; import org.developerworks.android.FeedParser; import org.developerworks.android.FeedParserFactory; import org.developerworks.android.Message; import org.developerworks.android.ParserType; import org.xmlpull.v1.XmlSerializer; import java.io.StringWriter; import java.util.ArrayList; import java.util.List; public class Twitter extends BaseActivity implements AdapterView.OnItemClickListener { private List<Message> messages; private List<String> titles; //TweetsAdapter ta = new TweetsAdapter(this); public ListView lstTweets = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.twitter); // set header title ((TextView)findViewById(R.id.txtHeaderTitle)).setText( Html.fromHtml("<b>" + getResources().getString(R.string.activity_title_twitter) +"</b>")); // highlight icon ImageButton btn = (ImageButton)findViewById(R.id.btnTwitter); btn.setBackgroundResource(R.drawable.menu_icon_twitter_active); // load list of tweets lstTweets = (ListView)findViewById(R.id.lstTweets); lstTweets.setOnItemClickListener(this); new AsyncTask<Void, Void, Void>() { ProgressDialog p; boolean success = false; @Override protected void onPostExecute(Void aVoid) { p.dismiss(); if (!success) { Twitter.this.runOnUiThread(new Runnable() { public void run() { Toast toast = Toast.makeText(Twitter.this, "Sorry, could not connect to Twitter.", Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0); toast.show(); } }); } else { ArrayAdapter<String> adapter = new ArrayAdapter<String>(Twitter.this, R.layout.twitter_list_row,titles); lstTweets.setAdapter(adapter); } } @Override protected void onPreExecute() { p = ProgressDialog.show(Twitter.this,"Loading...","...please wait a moment."); } @Override protected Void doInBackground(Void... params) { try { loadFeed(ParserType.ANDROID_SAX); if (messages!=null&&messages.size()>0) success = true; } catch (RuntimeException e) {} catch (Exception e) {} return null; } }.execute(); } public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { Intent viewMessage = new Intent(Intent.ACTION_VIEW, Uri.parse(messages.get(position).getLink().toExternalForm())); this.startActivity(viewMessage); } private void loadFeed(ParserType type){ try{ Log.i("AndroidNews", "ParserType="+type.name()); FeedParser parser = FeedParserFactory.getParser(type); long start = System.currentTimeMillis(); messages = parser.parse(); long duration = System.currentTimeMillis() - start; String xml = writeXml(); titles = new ArrayList<String>(messages.size()); for (Message msg : messages){ titles.add(msg.getTitle()); } } catch (Throwable t){ Log.e("AndroidNews",t.getMessage(),t); } } private String writeXml(){ XmlSerializer serializer = Xml.newSerializer(); StringWriter writer = new StringWriter(); try { serializer.setOutput(writer); serializer.startDocument("UTF-8", true); serializer.startTag("", "messages"); serializer.attribute("", "number", String.valueOf(messages.size())); for (Message msg: messages){ serializer.startTag("", "message"); serializer.attribute("", "date", msg.getDate()); serializer.startTag("", "title"); serializer.text(msg.getTitle()); serializer.endTag("", "title"); serializer.startTag("", "url"); serializer.text(msg.getLink().toExternalForm()); serializer.endTag("", "url"); serializer.startTag("", "body"); serializer.text(msg.getDescription()); serializer.endTag("", "body"); serializer.endTag("", "message"); } serializer.endTag("", "messages"); serializer.endDocument(); return writer.toString(); } catch (Exception e) { throw new RuntimeException(e); } } } 

Eso no es simple de implementar.

Un archivo RSS es un archivo XML cuya estructura cumple con un estándar (nombres de etiquetas fijas).

En su solicitud, usted necesitaría:

  • Descargue el feed RSS: use HttpClient, servicios …
  • Extraer los datos de XML: utilizar un analizador de XML, algunos se proporcionan
  • Almacene los datos: la mejor solución es una base de datos SQLite
  • Mostrar los datos: ListView con CursorAdapter apuntando a la base de datos

DavLink, tiene razón. El análisis de RSS no es trivial.

Es bastante fácil de configurar una implementación de un analizador SAX, pero la parte difícil es poder analizar todos y cada uno de los alimentos bajo el sol.

Usted necesita para atender a todos los formatos RSS 1, RSS 2, Atom, etc Incluso entonces usted tendrá que lidiar con los mal formateados feeds.

Yo había enfrentado problemas similares en el pasado por lo que decidí hacer mi análisis de alimentación en un servidor y acaba de obtener el contenido analizado. Esto me permite ejecutar bibliotecas y analizadores más complejos que puedo modificar sin presionar las actualizaciones de mi aplicación.

Tengo el siguiente servicio que se ejecuta en AppEngine, que permite un análisis mucho más simple XML / JSON en su final. Hay una estructura fija y simple a la respuesta. Puede utilizar esto para el análisis sintáctico

http://evecal.appspot.com/feedParser

Puede enviar solicitudes POST y GET con los siguientes parámetros.

FeedLink: La URL de la respuesta de feed RSS: JSON o XML como formato de respuesta

Ejemplos:

Para una solicitud POST

Curl –data-urlencode "feedLink = http: //feeds.bbci.co.uk/news/world/rss.xml" –data-urlencode "response = json" http://evecal.appspot.com/feedParser

Para la solicitud GET

Evecal.appspot.com/feedParser?feedLink=http://feeds.nytimes.com/nyt/rss/HomePage&response=xml

Mi aplicación para Android "NewsSpeak" también utiliza esto.

Después de obtener su información, puede utilizar un listview simple con un arrayadapter que tiene su matriz de elementos.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.