HTML があり、ページから実際に書かれたテキストを抽出する必要があります。
これまでのところ、Web ブラウザーを使用してページをレンダリングしてから、ドキュメント プロパティに移動してテキストを取得しようとしました。これは機能しますが、ブラウザーがサポートされている場合 (IE com オブジェクト) に限られます。問題は、これをワインでも実行できるようにしたいので、IE COM を使用しないソリューションが必要です。
これを行うには、合理的なプログラムによる方法が必要です。
HTML があり、ページから実際に書かれたテキストを抽出する必要があります。
これまでのところ、Web ブラウザーを使用してページをレンダリングしてから、ドキュメント プロパティに移動してテキストを取得しようとしました。これは機能しますが、ブラウザーがサポートされている場合 (IE com オブジェクト) に限られます。問題は、これをワインでも実行できるようにしたいので、IE COM を使用しないソリューションが必要です。
これを行うには、合理的なプログラムによる方法が必要です。
Delphi で HTML を解析するための推奨される方法はわかりませんが、もし私だったら、html2text のコピーをバンドルしたくなるでしょう (その名前の古いC++ プログラムまたは新しいPython プログラムのいずれか) 。それらのいずれかへの呼び出しを生成します。
py2exeを使用して、Python html2text を実行可能ファイルに変換できます。どちらの html2text プログラムも GPL の下でライセンスされていますが、実行可能ファイルをアプリにバンドルし、GPL の制限に従ってソースを利用できるようにするだけであれば問題ありません。
TWebBrowser を使用する代わりに、TIdHttp とその Get メソッドを直接使用できます。
html 文字列が返されます。
これは、 Scalabium からコピーされた、素敵でシンプルなルーチンです:
function StripHTMLTags(const strHTML: string): string;
var
P: PChar;
InTag: Boolean;
i, intResultLength: Integer;
begin
P := PChar(strHTML);
Result := '';
InTag := False;
repeat
case P^ of
'<': InTag := True;
'>': InTag := False;
#13, #10: ; {do nothing}
else
if not InTag then
begin
if (P^ in [#9, #32]) and ((P+1)^ in [#10, #13, #32, #9, '<']) then
else
Result := Result + P^;
end;
end;
Inc(P);
until (P^ = #0);
{convert system characters}
Result := StringReplace(Result, '"', '"', [rfReplaceAll]);
Result := StringReplace(Result, ''', '''', [rfReplaceAll]);
Result := StringReplace(Result, '>', '>', [rfReplaceAll]);
Result := StringReplace(Result, '<', '<', [rfReplaceAll]);
Result := StringReplace(Result, '&', '&', [rfReplaceAll]);
{here you may add another symbols from RFC if you need}
end;
その後、これを簡単に変更して、必要なことを正確に行うことができます。