Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Region "Uses"
- Imports System.IO
- Imports System.Net
- Imports System.Text.RegularExpressions
- #End Region
- Public Class Form1
- #Region "Variables"
- ReadOnly Last_User_A As String = "El último usuario registrado es <strong><a href=""/u\d+"
- ReadOnly Last_User_B As String = "\d+" 'Regex.Replace(Last_User_A, "El último usuario registrado es <strong><a href=""/u", "")
- ReadOnly User_Title_A As String = "\>Perfil - \w+"
- 'ReadOnly User_Title_B As String = "^(?:\S+\s){2}(\S+)" 'Regex.Replace(User_Title_A, "\>Perfil - ", "")
- ReadOnly File_Users As String = ".\Users-" & DateTime_To_Unix(Date.Now) & ".txt"
- ReadOnly Users_Pattern As String = "ID: {0} - Nick: {1}"
- Private Foroactivo_Users As New List(Of Tuple(Of Integer, String))
- Private IndexPattern As Integer = 0
- Dim url As String
- #End Region
- #Region "Funciones"
- Private Function Get_URL_SourceCode(ByVal url As String) As String
- Try
- Return New StreamReader(Net.HttpWebRequest.Create(url).GetResponse().GetResponseStream()).ReadToEnd()
- Catch ex As Exception
- Throw New Exception(ex.Message)
- Return Nothing
- End Try
- End Function
- Private Function Last_User(ByVal url As String) As Long
- Dim Source As String = Get_URL_SourceCode(url)
- Return CLng(Convert.ToString(Regex.Match( _
- Convert.ToString(Regex.Match( _
- Source, Last_User_A).Groups(0)), _
- Last_User_B).Groups(0) _
- ))
- End Function
- Private Function Get_User_Nick(ByVal Id As Integer, ByVal url As String) As String
- Dim Foroactivo_Query As String = url.Replace(url.Substring(url.LastIndexOf("/") + 1), "")
- Dim SearchPattern As String = "u" & Id + 1
- Dim Source As String = Get_URL_SourceCode(String.Format("{0}{1}", Foroactivo_Query, SearchPattern))
- Return Convert.ToString(Regex.Match(Source, User_Title_A)).Replace(">Perfil - ", "")
- 'Return Convert.ToString(Regex.Match(Source, User_Title_B).Groups(0))
- End Function
- Private Function DateTime_To_Unix(ByVal DateTime As DateTime) As Long
- Return DateDiff(DateInterval.Second, #1/1/1970#, DateTime)
- End Function
- Private Function Determine_Is_ForoActivo(ByVal url As String) As Boolean
- Dim Source As String = Get_URL_SourceCode(url)
- If Source.Contains("-ltr.css") Then
- Return True
- Else
- Return False
- End If
- End Function
- Public Function Count_Character(ByVal str As String, ByVal character As Char, _
- Optional ByVal IgnoreCase As Boolean = False) As Integer
- Return IIf(IgnoreCase, _
- str.ToLower.Count(Function(c As Char) c = Convert.ToChar(character.ToString.ToLower)), _
- str.Count(Function(c As Char) c = character))
- End Function
- Public Function Validate_URL(ByVal URL As String) As Boolean
- Try
- Dim Response As Net.WebResponse = Nothing
- Dim WebReq As Net.HttpWebRequest = Net.HttpWebRequest.Create(URL)
- Response = WebReq.GetResponse
- Response.Close()
- Return True
- Catch ex As Exception
- Return False
- End Try
- End Function
- #End Region
- Private ReadOnly Property MyUrl
- Get
- Return TextBox1.Text
- End Get
- End Property
- #Region "Subs"
- Private Sub Update_ToolStrip_Progress()
- Threading.Interlocked.Increment(IndexPattern)
- Threading.Interlocked.Increment(ProgressBar1.Value)
- Label2.Text = _
- String.Format("Procesando {0} de {1} usuario(s)...", _
- IndexPattern.ToString, Last_User(TextBox1.Text))
- End Sub
- Private Sub Calcular_Users(ByVal url As String)
- Try
- ProgressBar1.Maximum = Last_User(url)
- For i As Integer = 0 To Last_User(url) - 1
- Dim User_Id = i + 1
- Dim User_Nick = Get_User_Nick(i, TextBox1.Text)
- File.AppendAllText(File_Users, String.Format(Users_Pattern, User_Id, User_Nick) & Environment.NewLine)
- Update_ToolStrip_Progress()
- Next i
- 'MsgBox("¡Proceso acabado!", MsgBoxStyle.Information, "Información")
- Process.Start(File_Users)
- Catch ex As Exception When TextBox1.Text = String.Empty
- MsgBox("Debes poner algo", MsgBoxStyle.Critical, "Error")
- End Try
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- ProgressBar1.Visible = True
- Calcular_Users(TextBox1.Text)
- IndexPattern = 0
- ProgressBar1.Value = 0
- Label2.Text = "Acabado..."
- ProgressBar1.Visible = False
- End Sub
- Private Sub Label2_Click(sender As Object, e As EventArgs) Handles Label2.TextChanged
- Me.Refresh()
- End Sub
- Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
- If Count_Character(TextBox1.Text, "/") = 3 AndAlso Not MyUrl = url AndAlso Validate_URL(TextBox1.Text) = True AndAlso Determine_Is_ForoActivo(TextBox1.Text) = True Then
- Label2.Text = String.Format("Listo para obtener el nick de {0} usuarios...", Last_User(TextBox1.Text) - 1)
- url = MyUrl
- End If
- End Sub
- #End Region
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement