Bueno pues mi Opml de FeedDemon murió… y como no la tenía sincronizada con el Newsgator Online (por codo y no pagar) pues perdí todo…
Pero bueno como les había comentado, encontré en el directorio una serie de archivos con extension RSS, que revisando cada uno de ellos me encontré que eran los canales que tenía previamente guardados dentro del FeedDemon. Así que me dí a la tarea para recuperarlos y esto fué el resultado: Rikaba (recover en el lenguaje japonés ).
Una aplicación de consola que barre todos los archivos de ese directorio, los abre y mediante una expresion de XPath busca ciertos elementos y reconstruye tu Opml …. solo que sin directorios pero bueno… de lo perdido, lo encontrado.
Para la aplicación hice dos funcioncitas, una que se encarga de «encontrar» todos los archivos en un directorio mediante los objetos DirectoryInfo y FileInfo.
static void IterateDirectory(string directory)
{
DirectoryInfo di = new DirectoryInfo(directory);
FileInfo[] fi = di.GetFiles(«*.rss»);
foreach (FileInfo file in fi)
{
Console.WriteLine(ParseFile(file.FullName, @»c:pruebastest.opml»));
Console.WriteLine(String.Format(«Procesando {0}…», file.Name));
}
Console.ReadKey();
}
Ahi se manda a llamar a otra funcioncita que se llama ParseFile que lo que hace, es abrir el archivo, buscar un par de tags e insertar tags dentro del archivo Opml de salida, definido por el segundo argumento.
static string ParseFile(string filename, string outfilename)
{
FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(fs);
XPathNavigator nav = xmldoc.CreateNavigator();
XmlNamespaceManager man = new XmlNamespaceManager(xmldoc.NameTable);
man.AddNamespace(«fd», «http://www.bradsoft.com/feeddemon/xmlns/1.0/»);
string value = nav.SelectSingleNode(«rss/channel/fd:xmlUrl», man).Value;
XmlTextWriter xmlwriter = new XmlTextWriter(outfilename, System.Text.Encoding.UTF8);
xmlwriter.Formatting = Formatting.Indented;
xmlwriter.WriteProcessingInstruction(«opml», «version=»1.1″»);
xmlwriter.WriteStartElement(«head»);
xmlwriter.WriteEndElement();
xmlwriter.Close();
fs.Close();
return value;
}
Y eso fué todo.
Cheers!
PD. Revisando el código, me dí cuenta que no es la última versión pero ya me dió flojera echarlo a andar… el chiste es que esa es la teoría sobre lo que tienen que trabajar para recuperarlo … está muy sencillo.
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.