Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбор ссылок в html-документе (utf-8) 
:(
    Опции темы
sg729
Дата 21.5.2009, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 17.5.2009

Репутация: 1
Всего: 1



Есть html в кодировке utf-8 (если верить тегу meta). Пытаюсь вытянуть все ссылки из него, не прибегая к помощи TWebBrowser:

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  v : OleVariant;
  i : Integer;
  HtmlURL : String;
  HtmlDocument : IHtmlDocument2;
  HtmlCollection, LinksCollection : IHtmlElementCollection;
  HtmlElement : IHtmlElement;
  HtmlContent : TTntStringList;
begin
  TntMemo1.Clear;

  HtmlURL:='http://images.yandex.ru/';

  HtmlContent:=TTntStringList.Create;

  if DownloadFile(HtmlURL,'dump.html') then
    HtmlContent.LoadFromFile('dump.html');

  HtmlDocument:=coHTMLDocument.Create as IHTMLDocument2;
  if HtmlDocument=nil then
    Exit;

  v:=VarArrayCreate([0,0],VarVariant);
  v[0]:=UTF8Decode(HtmlContent.Text);
  HtmlDocument.Write(PSafeArray(TVarData(v).VArray));  //ошибка :

  HtmlCollection:=HtmlDocument.All;
  LinksCollection:=HtmlCollection.Tags('A') as IHTMLElementCollection;
  for i:=0 to LinksCollection.Length-1 do
  begin
    HtmlElement:=LinksCollection.Item(i,0) as IHtmlElement;
    TntMemo1.Lines.Add(HtmlElement.getAttribute('href',0));
  end;

  HtmlContent.Free;
  HtmlDocument.Close;
  HtmlDocument:=nil;
end;


на операторе HtmlDocument.Write(PSafeArray(TVarData(v).VArray)) последовательно возникают следующие ошибки:

user posted image

user posted image

Подскажите, что неправильно в моем коде? 

PM MAIL   Вверх
MetalFan
Дата 22.5.2009, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



какая версия делфи? если не 2009я, то зачем прикрутил Tnt? UTF8Decode декодирует из мультибайт строки, а не из WideString.



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
sg729
Дата 22.5.2009, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 17.5.2009

Репутация: 1
Всего: 1



Цитата(MetalFan @  22.5.2009,  12:19 Найти цитируемый пост)
какая версия делфи?

7-я

Цитата(MetalFan @  22.5.2009,  12:19 Найти цитируемый пост)
если не 2009я, то зачем прикрутил Tnt?

Читал где-то, что VCL-компоненты 7-ой не поддерживают юникод. Поэтому чтобы увидеть читабельные ссылки взял Tnt.




PM MAIL   Вверх
MetalFan
Дата 23.5.2009, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



молоток. верни обратно)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
sg729
Дата 24.5.2009, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 17.5.2009

Репутация: 1
Всего: 1



Цитата(MetalFan @  23.5.2009,  21:45 Найти цитируемый пост)
молоток. верни обратно) 

 
чего вернуть-то?  smile 
С обычными TMemo и TStringList будут те-же самые ошибки, только в добавок будут нечитабельные ссылки с крякозябрами   smile 
PM MAIL   Вверх
sg729
Дата 31.5.2009, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 17.5.2009

Репутация: 1
Всего: 1



Работает:
Код

var
  ...
  WB : IWebBrowser2;
  ...
begin
  ...
  WB:=CoInternetExplorer.Create;
  WB.Visible:=False;
  WB.Silent:=True;
  ...
  HtmlDocument:=WB.Document as IHtmlDocument2;
  ...
  ...
  WB.Quit; 
  WB:=nil;  


У интерфейса IHtmlDocument2 нет свойства Silent, поэтому приходится задействовать IWebBrowser2. Может как-то по-другому можно подавить эти диалоговые окна?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0521 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.