Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2012, 17:57   #1
vinc2000
Пользователь
 
Аватар для vinc2000
 
Регистрация: 31.01.2012
Сообщений: 47
По умолчанию Парсинг в контакте

Добрый день! Пишу граббер музыки и видео с контакта, встал вопрос выдирания нужной инфы с php-страниц. Сломал голову на регулярках и парсинге Надо выдрать только 3 знака 1 числа в середине страницы:

выдрать 999:
Код:
...
<div id="im_media_preview" class="media_preview clear_fix"></div>
<div id="im_resizer_wrap"><title>У вас 999 новых сообщений!</title></div>
<span class="fl_r add_media_lnk" id="imw_attach">Прикрепить</span>
...
Код:
For i:=400 to Length(s) do...
- не прокатывает, потому-что s - это вся страница. Искать бессмысленно - число меняется, остается только методом Pos (до) и Pos (после)?
Мне осталась одна забава - пальцы в рот, да веселый свист - прокатилась дурная слава, что похабник я, и скандалист.
vinc2000 вне форума Ответить с цитированием
Старый 31.07.2012, 20:44   #2
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

Используй лучше VK API! А то ВК что-то поменяет в штмл коде и придёться наново парсить.
Delphi_ProGer вне форума Ответить с цитированием
Старый 31.07.2012, 23:47   #3
vinc2000
Пользователь
 
Аватар для vinc2000
 
Регистрация: 31.01.2012
Сообщений: 47
По умолчанию

Метод VKApi, если я не ошибаюсь требует создания Desktop-приложения и общается только через него, а какой юзвер захочет его у себя создавать? Но и не хочется каждый раз переписывать прогу, гемора с перебором регулярок и изменением функций парсинга не оберешься
Мне осталась одна забава - пальцы в рот, да веселый свист - прокатилась дурная слава, что похабник я, и скандалист.
vinc2000 вне форума Ответить с цитированием
Старый 01.08.2012, 01:44   #4
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

Ну просто со своего опыта скажу: была у меня прога, которая парсила аудиозаписи - после 2 изменений у вк я задолбался переписовать парсинг(с регуляркой незнаком).
И не вижу я проблеми юзеру в пару кликов создать приложения у вк, а потом просто в программу или ваш класс вписывать id приложения.
Delphi_ProGer вне форума Ответить с цитированием
Старый 01.08.2012, 08:24   #5
Noor
Участник клуба
 
Аватар для Noor
 
Регистрация: 01.11.2006
Сообщений: 1,051
По умолчанию

Возвращает текст между двумя определёнными строками

Код:
Procedure Parsing( Const S: String; Tag1, Tag2: String; list:TStrings );
  Var
    pScan, pEnd, pTag1, pTag2: PChar;
    foundText: String;
    searchtext: String;
  Begin
    { Set up pointers we need for the search. HTML is not case sensitive, so
      we need to perform the search on a uppercased copy of S.}
    searchtext := Uppercase(S);
    Tag1:= Uppercase( Tag1 );
    Tag2:= Uppercase( Tag2 );
    pTag1:= PChar(Tag1);
    pTag2:= PChar(Tag2);
    pScan:= PChar(searchtext);
    Repeat
      { Search for next occurence of Tag1. }
      pScan:= StrPos( pScan, pTag1 );
      If pScan <> Nil Then Begin
        { Found one, hop over it, then search from that position
          forward for the next occurence of Tag2. }
        Inc(pScan, Length( Tag1 ));
        pEnd := StrPos( pScan, pTag2 );
        If pEnd <> Nil Then Begin
          { Found start and end tag, isolate text between,
            add it to the list. We need to get the text from
            the original S, however, since we want the un-uppercased
            version! So we calculate the address pScan would hold if
            the search had been performed on S instead of searchtext. }
          SetString( foundText,
                     Pchar(S) + (pScan- PChar(searchtext) ),
                     pEnd - pScan );
          list.Add( foundText );

          { Continue next search after the found end tag. }
          pScan := pEnd + Length(tag2);
        End { If }
        Else { Error, no end tag found for start tag, abort. }
          pScan := Nil;
      End; { If }
    Until pScan = Nil;
  End;

Пример использования


Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
 Parsing(Memo1.Text,'\\','  ',Memo2.Lines.Create);
end;
{ где
Memo1.Text - поле в котором находиться текст, в котором производиться поиск.
'\\' - Первый Тэг, от которого идет начало поиска
'  ' - Второй Тэг, до которого идет поиск
Memo2.Lines.Create - место куда выводиться результат 
}
end.

Последний раз редактировалось Noor; 01.08.2012 в 08:27.
Noor вне форума Ответить с цитированием
Старый 01.08.2012, 16:22   #6
vinc2000
Пользователь
 
Аватар для vinc2000
 
Регистрация: 31.01.2012
Сообщений: 47
По умолчанию

Я расскажу просто какой у меня будет сценарий работы моей проги - все в режиме по типу DOS'a. Т.е. максимальное упрощение, чел вводит логин и пароль и через 1-2 мин. его перебрасывает на панельку с его аудио-и-видео записями. Останется только выбрать и скачать! Все равно спасибо за совет!

Noor - ваш код работает! Спасибо. Именно то что я искал - поиск по тегам и вычленение результата.

P.S. Прикрепил скрин проги
Мне осталась одна забава - пальцы в рот, да веселый свист - прокатилась дурная слава, что похабник я, и скандалист.
vinc2000 вне форума Ответить с цитированием
Старый 02.08.2012, 00:00   #7
vinc2000
Пользователь
 
Аватар для vinc2000
 
Регистрация: 31.01.2012
Сообщений: 47
По умолчанию

У меня вопрос по поводу вывода найденного:
Код:
 Parsing(Memo1.Text,'\\','  ',Memo2.Lines.Create);
Возможно ли как-то изменить Memo2 к примеру на Label1.Caption, т.е. преобразовать все TStrings в одну строку (String) и вывести результат в кепшине? А то пока пользуюсь несколькими Мемо
Мне осталась одна забава - пальцы в рот, да веселый свист - прокатилась дурная слава, что похабник я, и скандалист.
vinc2000 вне форума Ответить с цитированием
Старый 02.08.2012, 00:02   #8
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

Нельзя. Зачем использовать несколько Memo? Создайте просто переменную типа TStringList.
Delphi_ProGer вне форума Ответить с цитированием
Старый 02.08.2012, 00:04   #9
vinc2000
Пользователь
 
Аватар для vinc2000
 
Регистрация: 31.01.2012
Сообщений: 47
По умолчанию

Действительно, что-то я не догадался! Спасибо.
Мне осталась одна забава - пальцы в рот, да веселый свист - прокатилась дурная слава, что похабник я, и скандалист.
vinc2000 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
О проблемме в контакте dmitry_cirk Свободное общение 3 02.11.2011 22:22
Друзья в контакте Chopik Свободное общение 17 19.05.2011 17:45
в контакте WEARWOLF Безопасность, Шифрование 6 30.12.2010 20:24
Узнать ip в контакте. Юлия Н Фриланс 10 05.08.2010 21:01
В контакте малыша Софт 1 12.08.2009 16:25