Привет всем =) Сегодня мы будем писать грабер RSS. Но им можно грабить так же html/xml при желании Писать мы будем на дотнете, а именно на VB.NET Приступим. Для написания грабера конечно можно юзать соткеты, но мы пойдем более простым путем – используем класс WebClient. Так же в проге будут регулярные выражения. -Т.е. мы ищем тег, к примеру <html> добавляем к начальной позиции его длину и едем пока не наткнемся на следующий тег (<). Приступим Создадим проект и добавим User Control. Назовоем его rss_graber и напишем такой код: Code: Imports System.Web Imports System.Net Imports System.IO Imports System.Text Imports System.Threading Public Class rss_graber Dim URL, KEY, END1, posle As String ' буферчеГи Dim rss As New WebClient 'сам граберчеГ Public WithEvents th As New System.ComponentModel.BackgroundWorker ' ' события Public Event data(ByVal data As String, ByVal key As String) ' приход данных Public Event rss_error() ' ошибочка( ' ----------------------- Public Sub get_rss(ByVal URL_ As String, ByVal key_ As String, ByVal end_s As String, ByVal posle_ As String) ' начинаем грабить rss URL = URL_ 'запоминаем URL rss'ки KEY = key_ 'запоминаем ключеГ END1 = end_s ' чем заканчивается (например <) posle = posle_ ' после чего искать (юзать чтоб обрезать заголовок) While th.IsBusy ' еси мы уже что то грабим то ждемс ;) Application.DoEvents() End While th.RunWorkerAsync() 'включаем другой поточеГ End Sub Public Sub about() MessageBox.Show(Encoding.Default.GetString(Convert.FromBase64String("UlNTIEdSQUJFUiBieSBEYXJrX0xvcmQ=")), Encoding.Default.GetString(Convert.FromBase64String("z+vg7eXy8yAtIPXg6uXw4Ow=")), MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub Private Sub th_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles th.DoWork Dim rss_code As String = rss.DownloadString(URL) 'загружаем код и запоминаем If posle <> "" Then rss_code = Mid(rss_code, InStr(rss_code, posle) + Len(posle)) ' еси мы ищем не с начала то удаляем лишнее If rss2str(rss_code, KEY, END1) <> "False" Then ' еси все гуд RaiseEvent data(rss2str(rss_code, KEY, END1), KEY) ' выводим данные Else 'еси чет не гуд RaiseEvent rss_error() ' выдаем ошибочку End If End Sub Private Function rss2str(ByVal rss_code As String, ByVal par As String, ByVal end_s As String) As String 'доп функция Dim p As Integer = InStr(rss_code, par) + Len(par) ' находим нужный нам ключ Dim value As String ' буферчеГ If p = 0 Then Return "False" ' еси не нашли то возвращаем false While Mid(rss_code, p, 1) <> end_s ' еси нашли то берем один символ и смотрим, еси он не равен < то идем далее value &= Mid(rss_code, p, 1) ' добавляем наш символ в буффер p = p + 1 ' добавляем одЫн End While ' едем по циклу Return value ' выдаем значение End Function End Class Ну думаю комментарии понятны. Юзать его так: Code: Imports System.Text Public Class Form1 Dim WithEvents rss_graber As New rss_graber Dim data1 As String Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load rss_graber.get_rss("http://rian.ru/export/rss2/politics/index.xml", "<description>", "<", "<item>") ' начинаем грабить End Sub Private Sub rss_graber_data(ByVal data As String, ByVal key As String) Handles rss_graber.data key = Replace(key, "<", "") ' удаляем теги key = Replace(key, ">", "") ' .... data1 = key & " : " & data & vbCrLf ' добавляем в буффер End Sub Private Sub rss_graber_rss_error() Handles rss_graber.rss_error data1 = "Ошибка при получении данных" & vbCrLf ' еси ошибкО End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If data1 <> "" Then ' еси данные есть то data1 = Encoding.UTF8.GetString(Encoding.Default.GetBytes(data1)) ' меняем кодировку на нужную нам TextBox1.Text &= data1 ' добавляем данные data1 = "" ' чистем буферчеГ End If End Sub End Class Далее можно писать ботов но это уже как говорится для самостоятельного изучения :derisive: P.S. Сорцы в приложении. (c) Dark_Lord. Специально для planety-hackeram.ru http://slil.ru/27856496 Вопросы можете оставлять тут
эм почему граббер тока мне интересно. он че хитит rss ленты? ) хех помоему он просто их читает поэтому это скорее rss reader.