Advertisement
Ikillnukes

Untitled

Aug 23rd, 2013
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 5.44 KB | None | 0 0
  1. #Region "Uses"
  2. Imports System.IO
  3. Imports System.Net
  4. Imports System.Text.RegularExpressions
  5. #End Region
  6.  
  7. Public Class Form1
  8.  
  9. #Region "Variables"
  10.  
  11.     ReadOnly Last_User_A As String = "El último usuario registrado es <strong><a href=""/u\d+"
  12.     ReadOnly Last_User_B As String = "\d+" 'Regex.Replace(Last_User_A, "El último usuario registrado es <strong><a href=""/u", "")
  13.     ReadOnly User_Title_A As String = "\>Perfil - \w+"
  14.     'ReadOnly User_Title_B As String = "^(?:\S+\s){2}(\S+)" 'Regex.Replace(User_Title_A, "\>Perfil - ", "")
  15.     ReadOnly File_Users As String = ".\Users-" & DateTime_To_Unix(Date.Now) & ".txt"
  16.     ReadOnly Users_Pattern As String = "ID: {0} - Nick: {1}"
  17.     Private Foroactivo_Users As New List(Of Tuple(Of Integer, String))
  18.     Private IndexPattern As Integer = 0
  19.     Dim url As String
  20.  
  21. #End Region
  22.  
  23. #Region "Funciones"
  24.  
  25.     Private Function Get_URL_SourceCode(ByVal url As String) As String
  26.  
  27.         Try
  28.             Return New StreamReader(Net.HttpWebRequest.Create(url).GetResponse().GetResponseStream()).ReadToEnd()
  29.         Catch ex As Exception
  30.             Throw New Exception(ex.Message)
  31.             Return Nothing
  32.         End Try
  33.  
  34.     End Function
  35.  
  36.     Private Function Last_User(ByVal url As String) As Long
  37.  
  38.         Dim Source As String = Get_URL_SourceCode(url)
  39.  
  40.         Return CLng(Convert.ToString(Regex.Match( _
  41.                     Convert.ToString(Regex.Match( _
  42.                     Source, Last_User_A).Groups(0)), _
  43.                     Last_User_B).Groups(0) _
  44.                     ))
  45.  
  46.     End Function
  47.  
  48.     Private Function Get_User_Nick(ByVal Id As Integer, ByVal url As String) As String
  49.  
  50.         Dim Foroactivo_Query As String = url.Replace(url.Substring(url.LastIndexOf("/") + 1), "")
  51.         Dim SearchPattern As String = "u" & Id + 1
  52.  
  53.         Dim Source As String = Get_URL_SourceCode(String.Format("{0}{1}", Foroactivo_Query, SearchPattern))
  54.  
  55.         Return Convert.ToString(Regex.Match(Source, User_Title_A)).Replace(">Perfil - ", "")
  56.  
  57.         'Return Convert.ToString(Regex.Match(Source, User_Title_B).Groups(0))
  58.     End Function
  59.  
  60.     Private Function DateTime_To_Unix(ByVal DateTime As DateTime) As Long
  61.         Return DateDiff(DateInterval.Second, #1/1/1970#, DateTime)
  62.     End Function
  63.  
  64.     Private Function Determine_Is_ForoActivo(ByVal url As String) As Boolean
  65.         Dim Source As String = Get_URL_SourceCode(url)
  66.         If Source.Contains("-ltr.css") Then
  67.             Return True
  68.         Else
  69.             Return False
  70.         End If
  71.     End Function
  72.  
  73.     Public Function Count_Character(ByVal str As String, ByVal character As Char, _
  74.                                     Optional ByVal IgnoreCase As Boolean = False) As Integer
  75.  
  76.         Return IIf(IgnoreCase, _
  77.                    str.ToLower.Count(Function(c As Char) c = Convert.ToChar(character.ToString.ToLower)), _
  78.                    str.Count(Function(c As Char) c = character))
  79.  
  80.     End Function
  81.  
  82.     Public Function Validate_URL(ByVal URL As String) As Boolean
  83.         Try
  84.  
  85.             Dim Response As Net.WebResponse = Nothing
  86.             Dim WebReq As Net.HttpWebRequest = Net.HttpWebRequest.Create(URL)
  87.             Response = WebReq.GetResponse
  88.             Response.Close()
  89.             Return True
  90.         Catch ex As Exception
  91.             Return False
  92.         End Try
  93.     End Function
  94.  
  95. #End Region
  96.  
  97.     Private ReadOnly Property MyUrl
  98.         Get
  99.             Return TextBox1.Text
  100.         End Get
  101.     End Property
  102.  
  103. #Region "Subs"
  104.  
  105.     Private Sub Update_ToolStrip_Progress()
  106.  
  107.         Threading.Interlocked.Increment(IndexPattern)
  108.         Threading.Interlocked.Increment(ProgressBar1.Value)
  109.  
  110.         Label2.Text = _
  111. String.Format("Procesando {0} de {1} usuario(s)...", _
  112.               IndexPattern.ToString, Last_User(TextBox1.Text))
  113.  
  114.     End Sub
  115.  
  116.     Private Sub Calcular_Users(ByVal url As String)
  117.         Try
  118.  
  119.             ProgressBar1.Maximum = Last_User(url)
  120.  
  121.             For i As Integer = 0 To Last_User(url) - 1
  122.  
  123.                 Dim User_Id = i + 1
  124.                 Dim User_Nick = Get_User_Nick(i, TextBox1.Text)
  125.  
  126.                 File.AppendAllText(File_Users, String.Format(Users_Pattern, User_Id, User_Nick) & Environment.NewLine)
  127.  
  128.                 Update_ToolStrip_Progress()
  129.  
  130.             Next i
  131.  
  132.             'MsgBox("¡Proceso acabado!", MsgBoxStyle.Information, "Información")
  133.             Process.Start(File_Users)
  134.  
  135.         Catch ex As Exception When TextBox1.Text = String.Empty
  136.             MsgBox("Debes poner algo", MsgBoxStyle.Critical, "Error")
  137.         End Try
  138.     End Sub
  139.  
  140.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  141.         ProgressBar1.Visible = True
  142.         Calcular_Users(TextBox1.Text)
  143.         IndexPattern = 0
  144.         ProgressBar1.Value = 0
  145.         Label2.Text = "Acabado..."
  146.         ProgressBar1.Visible = False
  147.     End Sub
  148.  
  149.     Private Sub Label2_Click(sender As Object, e As EventArgs) Handles Label2.TextChanged
  150.         Me.Refresh()
  151.     End Sub
  152.  
  153.     Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
  154.         If Count_Character(TextBox1.Text, "/") = 3 AndAlso Not MyUrl = url AndAlso Validate_URL(TextBox1.Text) = True AndAlso Determine_Is_ForoActivo(TextBox1.Text) = True Then
  155.             Label2.Text = String.Format("Listo para obtener el nick de {0} usuarios...", Last_User(TextBox1.Text) - 1)
  156.             url = MyUrl
  157.         End If
  158.     End Sub
  159.  
  160. #End Region
  161.  
  162. End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement