Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: LeandroA en 8 Junio 2011, 21:07 pm



Título: Problemas para leer un RSS (Microsoft.XMLDOM)
Publicado por: LeandroA en 8 Junio 2011, 21:07 pm
Hola tengo problemas para leer un rss, estoy usando Microsoft.XMLDOM, el problema es cuando trato de leer el documento ("Load"), lo que es extraño para mí es que con Firefox o Internet Explorer se muestra correctamente.

el problema es con este rss http://www.taringa.net/rss/home/ultimos-posts/

al parecer es por la primera linea
Código:
<?xml version="1.0" encoding="UTF-8"?>

si yo descargo el documento en disco y pongo
Código:
<?xml version="1.0" encoding="ISO-8859-1"?>
lee el documento correctamente.

Código:
Option Explicit
'Private Doc As DOMDocument
Private Doc As Object

Private Sub Form_Load()
    Dim sURL As String
    
    'This fail
    sURL = "http://www.taringa.net/rss/home/ultimos-posts/"
    
    'This ok if Doc.validateOnParse = False
    'sURL = "http://ezrss.it/feed/"
    
    
    'This ok
    'sURL = "http://d.yimg.com/ar.rss.news.yahoo.com/rss/insolitas"
    
    'Set Doc = New DOMDocument
    Set Doc = CreateObject("Msxml2.DOMDocument.3.0") 'or "Microsoft.XMLDOM"
    
    Doc.resolveExternals = False
    Doc.async = False
    Doc.validateOnParse = False

 
    If Doc.Load(sURL) Then
        Debug.Print Doc.xml
    Else
        Debug.Print Doc.parseError
    End If
End Sub


Título: Re: Problemas para leer un RSS (Microsoft.XMLDOM)
Publicado por: raul338 en 8 Junio 2011, 22:41 pm
Parece que tendrás que descargarlo y leerlo con LoadXML, aunque si tiene caracteres "raros" los tomará como "?"

Código
  1. Option Explicit
  2. 'Private Doc As DOMDocument
  3. Private Doc As Object
  4.  
  5. Private Sub Form_Load()
  6.    'Set Doc = New DOMDocument
  7.    Set Doc = CreateObject("Msxml2.DOMDocument.3.0") 'or "Microsoft.XMLDOM"
  8.  
  9.    Doc.resolveExternals = False
  10.    Doc.async = False
  11.    Doc.validateOnParse = False
  12.  
  13.    ' ChrW$(8364) = Simbolo del euro €
  14.    ' ChrW$(&H8FCE) = Simbolo de Asia del este
  15.  
  16.    If Doc.LoadXML("<?xml version=""1.0"" encoding=""UTF-8""?><symbol>" & ChrW$(8364) & ChrW$(&H8FCE) & "</symbol>") Then
  17.        Debug.Print Doc.xml
  18.    Else
  19.        Debug.Print Doc.parseError
  20.    End If
  21. End Sub
  22.  

Resultado
Código
  1. <?xml version="1.0"?>
  2. <symbol>€?</symbol>


Título: Re: Problemas para leer un RSS (Microsoft.XMLDOM)
Publicado por: LeandroA en 9 Junio 2011, 03:37 am
Buenisimo raul, parece que funciona bien, por lo de los signos raros no importa lo ago la combercion de UTF-8 a unicode.

Saludos y muchas gracias


Título: Re: Problemas para leer un RSS (Microsoft.XMLDOM)
Publicado por: seba123neo en 9 Junio 2011, 04:28 am
Hola, leandro con ese link del rss de taringa no funciona efectivamente, pero probe con otro que es lo mismo y funciona bien.

en vez de http://www.taringa.net/rss/home/ultimos-posts/


usar esta http://rss.taringa.net/taringa/ultimos-post

Código
  1. Option Explicit
  2.  
  3. Dim Doc As DOMDocument
  4.  
  5. Private Sub Form_Load()
  6.  
  7.    Set Doc = New DOMDocument
  8.    Doc.resolveExternals = True
  9.    Doc.async = False
  10.  
  11.    If Doc.Load("http://rss.taringa.net/taringa/ultimos-post") Then
  12.        MsgBox Doc.selectNodes("/rss/channel/item").length
  13.        MsgBox GetElement("rss/channel/item/title", 0)
  14.        MsgBox GetElement("rss/channel/item/link", 0)
  15.    Else
  16.        Debug.Print Doc.parseError
  17.    End If
  18.  
  19.    Set Doc = Nothing
  20. End Sub
  21.  
  22. Private Function GetElement(NodeKey As String, Indice As Integer)
  23.    GetElement = Doc.getElementsByTagName(NodeKey).Item(Indice).Text
  24. End Function

saludos.


Título: Re: Problemas para leer un RSS (Microsoft.XMLDOM)
Publicado por: LeandroA en 9 Junio 2011, 23:36 pm
Buena data seba, de todas formas la forma el de raul es una alternativa por si falla la primera, no es solo un rss de taringa sino es para cualquier rss de cualquier pagina.

SAludos.