SHOW:
|
|
- or go back to the newest paste.
| 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 urlDistinta 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 | Function Url_Is_Diferent(url As String, urldistinta As String) As Boolean | |
| 96 | ||
| 97 | If urldistinta = IIf(url.Last = "/", url.Substring(0, url.LastIndexOf("/")), url) Then
| |
| 98 | Return True | |
| 99 | Else | |
| 100 | Return False | |
| 101 | End If | |
| 102 | ||
| 103 | End Function | |
| 104 | ||
| 105 | #End Region | |
| 106 | ||
| 107 | #Region "Subs" | |
| 108 | ||
| 109 | Private Sub Update_ToolStrip_Progress() | |
| 110 | ||
| 111 | Threading.Interlocked.Increment(IndexPattern) | |
| 112 | Threading.Interlocked.Increment(ProgressBar1.Value) | |
| 113 | ||
| 114 | Label2.Text = _ | |
| 115 | String.Format("Procesando {0} de {1} usuario(s)...", _
| |
| 116 | IndexPattern.ToString, Last_User(TextBox1.Text)) | |
| 117 | ||
| 118 | End Sub | |
| 119 | ||
| 120 | Private Sub Calcular_Users(ByVal url As String) | |
| 121 | Try | |
| 122 | ||
| 123 | ProgressBar1.Maximum = Last_User(url) | |
| 124 | ||
| 125 | For i As Integer = 0 To Last_User(url) - 1 | |
| 126 | ||
| 127 | Dim User_Id = i + 1 | |
| 128 | Dim User_Nick = Get_User_Nick(i, TextBox1.Text) | |
| 129 | ||
| 130 | File.AppendAllText(File_Users, String.Format(Users_Pattern, User_Id, User_Nick) & Environment.NewLine) | |
| 131 | ||
| 132 | Update_ToolStrip_Progress() | |
| 133 | ||
| 134 | Next i | |
| 135 | ||
| 136 | 'MsgBox("¡Proceso acabado!", MsgBoxStyle.Information, "Información")
| |
| 137 | - | If Validate_URL(TextBox1.Text) = True AndAlso Determine_Is_ForoActivo(TextBox1.Text) = True Then |
| 137 | + | |
| 138 | ||
| 139 | Catch ex As Exception When TextBox1.Text = String.Empty | |
| 140 | MsgBox("Debes poner algo", MsgBoxStyle.Critical, "Error")
| |
| 141 | End Try | |
| 142 | End Sub | |
| 143 | ||
| 144 | Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click | |
| 145 | ProgressBar1.Visible = True | |
| 146 | Calcular_Users(TextBox1.Text) | |
| 147 | IndexPattern = 0 | |
| 148 | ProgressBar1.Value = 0 | |
| 149 | Label2.Text = "Acabado..." | |
| 150 | ProgressBar1.Visible = False | |
| 151 | End Sub | |
| 152 | ||
| 153 | Private Sub Label2_Click(sender As Object, e As EventArgs) Handles Label2.TextChanged | |
| 154 | Me.Refresh() | |
| 155 | End Sub | |
| 156 | ||
| 157 | Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged | |
| 158 | If Count_Character(TextBox1.Text, "/") = 3 AndAlso Url_Is_Diferent(TextBox1.Text, urlDistinta) = False AndAlso Validate_URL(TextBox1.Text) = True AndAlso Determine_Is_ForoActivo(TextBox1.Text) = True Then | |
| 159 | Label2.Text = String.Format("Listo para obtener el nick de {0} usuarios...", Last_User(TextBox1.Text) - 1)
| |
| 160 | urlDistinta = TextBox1.Text | |
| 161 | End If | |
| 162 | End Sub | |
| 163 | ||
| 164 | #End Region | |
| 165 | ||
| 166 | End Class |