ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

VB.NET пишем грабер rss.
  #1  
Старый 24.07.2009, 12:15
Аватар для icqxaker
icqxaker
Новичок
Регистрация: 04.06.2007
Сообщений: 8
Провел на форуме:
42911

Репутация: 4
По умолчанию VB.NET пишем грабер rss.

Привет всем =)
Сегодня мы будем писать грабер RSS. Но им можно грабить так же html/xml при желании
Писать мы будем на дотнете, а именно на VB.NET
Приступим.

Для написания грабера конечно можно юзать соткеты, но мы пойдем более простым путем – используем класс WebClient. Так же в проге будут регулярные выражения. -Т.е. мы ищем тег, к примеру <html> добавляем к начальной позиции его длину и едем пока не наткнемся на следующий тег (<). Приступим

Создадим проект и добавим User Control. Назовоем его rss_graber и напишем такой код:
Код:
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

Ну думаю комментарии понятны.

Юзать его так:

Код:
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

Вопросы можете оставлять тут

Последний раз редактировалось icqxaker; 24.07.2009 в 12:18..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RSS грабер для WordPress C1RCA PHP, PERL, MySQL, JavaScript 3 04.05.2009 19:20
dle rss грабер icqxaker Болталка 2 24.02.2009 17:11
dle грабер rss icqxaker Сценарии/CMF/СMS 0 24.02.2009 15:35
Rss Grabber v. 3.0.2 for DLE Dj_shket PHP, PERL, MySQL, JavaScript 5 02.02.2009 08:16
(Статья) Пишем флуд для чата http://chat.scn.ru/ Paranoik Чаты 14 04.07.2006 17:32



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ