elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [Ayuda] Leer texto web
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] Leer texto web  (Leído 2,810 veces)
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
[Ayuda] Leer texto web
« en: 29 Mayo 2010, 16:33 pm »

Hola a todos, a ver os cuento un poco lo que me pasa...
Estoy haciendo un bot utilizando wininet, Lo que necesito es ver el contenido de un label de la web en un label en mi Form, actualmente hago esto:
Código
  1. Option Explicit
  2.  
  3. Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
  4. Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
  5. Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
  6. Declare Function InternetCloseHandle Lib "wininet" (ByVal hInet As Long) As Integer
  7.  
  8. Public Function GET_(hURL As String) As String
  9.    Dim hBuffer As String * 1000
  10.    Dim hInternet As Long
  11.    Dim hFile     As Long
  12.    Dim hRead     As Long
  13.    hInternet = InternetOpen(0, 1, vbNullString, vbNullString, 0): DoEvents
  14.    If hInternet <> 0 Then
  15.        hFile = InternetOpenUrl(hInternet, hURL, vbNullString, ByVal 0&, &H80000000, ByVal 0&): DoEvents
  16.        If hFile <> 0 Then
  17.            Do
  18.                Call InternetReadFile(hFile, hBuffer, 1000, hRead): DoEvents
  19.                GET_ = GET_ & Left$(hBuffer, hRead)
  20.                If hRead = 0 Then Exit Do: DoEvents
  21.            Loop
  22.        End If
  23.    End If
  24.    If hInternet <> 0 Then Call InternetCloseHandle(hInternet)
  25.    If hFile <> 0 Then Call InternetCloseHandle(hFile)
  26. End Function
  27.  
  28. Public Function GetUserName(Optional ID As Long) As String
  29.    Dim Buffer   As String
  30.    Dim UserName As String
  31.    If ID > 0 Then
  32.        MyProfileData = GET_(urlotroperfildemipagina & Str(ID))
  33.    Else
  34.        MyProfileData = GET_(urlmiperfil)
  35.    End If
  36.    'Buscamos "Ver perfil de "
  37.    For x = 1 To Len(MyProfileData)
  38.        Buffer = Mid(MyProfileData, x, 14)
  39.        If Buffer = "Ver perfil de " Then Exit For
  40.    Next
  41.    'Buscamos el nombre
  42.    For x = x + 14 To Len(MyProfileData)
  43.        Buffer = Mid(MyProfileData, x, 1)
  44.        If Buffer <> Chr(34) Then UserName = UserName & Buffer Else Exit For
  45.    Next
  46.    GetUserName = UserName
  47. End Function

No estoy seguro de que sea una buena forma de hacerlo, por ello os pido consejo, asi como si en vez de wininet me recomendais otro metodo... :silbar:

Gracias!


En línea

seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: [Ayuda] Leer texto web
« Respuesta #1 en: 29 Mayo 2010, 16:34 pm »

si decis que web es y que parte de la pagina queres leer.


En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [Ayuda] Leer texto web
« Respuesta #2 en: 29 Mayo 2010, 16:37 pm »

Es un foro de este tipo hecho con SMF, quiero que me salga en un label los usuarios conectados, y cosas asi... :)

Salu2! ;)
En línea

seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: [Ayuda] Leer texto web
« Respuesta #3 en: 29 Mayo 2010, 17:17 pm »

mira si se puede, el tema que por ejemplo esta pagina lo tiene bloqueado, por lo menos yo no he podido sacar el codigo fuente de esta web en la pagina de estadisticas, ni en la pagina principal que es donde estan los conectados (pero en reliadad si encontre donde se puede, pero no lo digo  :xD).

pero supongamos que esta habilitado como el foro SMF de simplemachines, fijate este link:

Simple Machines Community Forum - Statistics Center

ese es el centro de estadisticas y suponete que yo quiero sacar los que mas postearon, yo habia hecho algo asi, ni idea si es la mejor forma o no, pero puede funcionar bien.

en un formulario pone un textbox multilinea, en realidad podes omitirlo, pero para que veas como funciona.

Código
  1. Option Explicit
  2.  
  3. Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
  4. Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal sURL As String, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
  5. Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
  6. Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
  7.  
  8. Private Const IF_FROM_CACHE = &H1000000
  9. Private Const IF_MAKE_PERSISTENT = &H2000000
  10. Private Const IF_NO_CACHE_WRITE = &H4000000
  11. Private Const BUFFER_LEN = 256
  12.  
  13. Private Function ExtraerLinks(ByVal pTexto As String) As Object
  14.  
  15.    Dim vExpresion As Object
  16.    Set vExpresion = CreateObject("VBScript.RegExp")
  17.  
  18.    vExpresion.Pattern = "<a href=\s*([^\s]*)\s*>"
  19.    vExpresion.IgnoreCase = True
  20.    vExpresion.Global = True
  21.  
  22.   Set ExtraerLinks = vExpresion.Execute(pTexto)
  23. End Function
  24.  
  25. Public Function CodigoFuenteWeb(Pagina As String) As String
  26.    Dim sBuffer As String * BUFFER_LEN, iResult As Integer, sData As String
  27.    Dim hInternet As Long, hSession As Long, lReturn As Long
  28.    hSession = InternetOpen("vb wininet", 1, vbNullString, vbNullString, 0)
  29.    If hSession Then hInternet = InternetOpenUrl(hSession, Pagina, vbNullString, 0, IF_NO_CACHE_WRITE, 0)
  30.    If hInternet Then
  31.        iResult = InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
  32.        sData = sBuffer
  33.        Do While lReturn <> 0
  34.            iResult = InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
  35.            sData = sData + Mid(sBuffer, 1, lReturn)
  36.        Loop
  37.    End If
  38.    iResult = InternetCloseHandle(hInternet)
  39.    CodigoFuenteWeb = sData
  40. End Function
  41.  
  42. Private Sub Form_Load()
  43.    Text1.Text = Replace(CodigoFuenteWeb("http://www.simplemachines.org/community/index.php?action=stats"), Chr(10), vbNewLine)
  44.    Text1.Text = TextoEntreMedio(Text1.Text, "Top 10 Posters", "<div id=""top_boards"">")
  45.  
  46.    Dim vLinks As Object
  47.    Dim i As Long
  48.  
  49.    Set vLinks = ExtraerLinks(Text1.Text)
  50.  
  51.    For i = 0 To vLinks.Count - 1
  52.        MsgBox vLinks(i)
  53.    Next
  54. End Sub
  55.  
  56. Private Function TextoEntreMedio(Texto As String, Palabra1 As String, Palabra2 As String)
  57.    TextoEntreMedio = Left$(Mid$(Texto, InStr(Texto, Palabra1) + Len(Palabra1)), InStr(Mid$(Texto, InStr(Texto, Palabra1) + Len(Palabra1)), Palabra2) - 1)
  58. End Function

lo que hago simplemente es traerme todo el codigo fuente de la pagina web, y deppues comienzo por asi decirlo a parsearlo, se que no es parseo 100% pero bueno..es como empezar a sacar las cosas que no sirven y dejar las que si.

1 - primero me traigo el codgo fuente entero.

2 - despues con una simple funcion saco solo el texto que esta entre las cadenas "Top 10 Posters" y <div id=""top_boards"">" que es digamos cuando termina los 10 mas posteadores...el tema que por ejemplo si te cambian el texto esto no funciona mas, pero podes buscar dentro del fuente algo que sea fijo y no cambie, esto es solo un ejemplo.

3 - una vez que me quedo la sección de los 10 mas posteadores, lo que hago es con expresiones regulares (esto es un ejemplo de Leandro, simplemente que este es para links y no para mails) saco los links de los usuarios posteadores y el nombre.

una vez que tenes el link del perfil y el nombre, ya veras vos que hacer, pero ahi te queda bien y te trae los 10.

saludos.
En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [Ayuda] Leer texto web
« Respuesta #4 en: 29 Mayo 2010, 17:25 pm »

 :o
Muchisimas gracias seba123neo! ;-)
Te has molestado en explicarmelo y te he entiendido a la perfeccion! ;)
Voy a probar, en unos dias subire el source del bot! ;)
Salu2! :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con Webbrowser D: (Leer cadena de texto)
ASM
AdictoxD 4 7,107 Último mensaje 13 Mayo 2011, 09:02 am
por Eternal Idol
Leer texto
.NET (C#, VB.NET, ASP)
BrokerJoker 5 3,671 Último mensaje 2 Febrero 2012, 15:58 pm
por BrokerJoker
Bat leer palabras texto
Scripting
fabianjanu 1 2,800 Último mensaje 11 Septiembre 2012, 16:59 pm
por Eleкtro
[AYUDA EN C] Leer texto del teclado y guardar en una variable llamada char *str
Programación C/C++
soundevice 3 2,668 Último mensaje 29 Septiembre 2016, 02:45 am
por soundevice
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines