home *** CD-ROM | disk | FTP | other *** search
- { Copyright 2003 by The Delphi Inspiration <delphi@zeitungsjunge.de>
-
- DIHtmlParser Demo to show how to extract search results from HTML pages
- returned by the Google Internet search engine.
-
- Please visit the DIHtmlParser homepage for latest information and updates.
-
- http://www.zeitungsjunge.de/delphi/
-
- { ---------------------------------------------------------------------------- }
-
- unit fGoogle;
-
- {$I DI.inc} // Download DIHtmlParser from http://www.zeitungsjunge.de/delphi/
-
- interface
-
- uses
- Windows, Classes, Forms, Controls, StdCtrls, ExtCtrls, Graphics, ComCtrls, Buttons,
-
- DIUnicode,
- DIHtmlParser,
- DIHtmlCharSetPlugin,
- DIHtmlGooglePlugin;
-
- type
- TfrmGoogle = class(TForm)
- pnlTop: TPanel;
- lblQuery: TLabel;
- Image1: TImage;
- DIHtmlGooglePlugin1: TDIHtmlGooglePlugin;
- DIHtmlParser1: TDIHtmlParser;
- DIHtmlCharSetPlugin1: TDIHtmlCharSetPlugin;
- tvResults: TTreeView;
- sbnOpen: TSpeedButton;
- sbnCollapse: TSpeedButton;
- sbnExpand: TSpeedButton;
- sbnClear: TSpeedButton;
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure DIHtmlGooglePlugin1Result(const Sender: TDIHtmlParserPlugin);
- procedure Image1Click(Sender: TObject);
- procedure tvResultsCustomDrawItem(Sender: TCustomTreeView;
- Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
- procedure sbnOpenClick(Sender: TObject);
- procedure sbnExpandClick(Sender: TObject);
- procedure sbnCollapseClick(Sender: TObject);
- procedure sbnClearClick(Sender: TObject);
- private
- FFileNode: TTreeNode;
- procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
- procedure ParseFile(const f: AnsiString);
- public
- end;
-
- var
- frmGoogle: TfrmGoogle;
-
- const
- APP_TITLE = 'Google Parser';
-
- implementation
-
- {$R *.DFM}
-
- uses
- Messages, ShellAPI, SysUtils, Dialogs,
-
- DIHtmlColors;
-
- { ---------------------------------------------------------------------------- }
-
- const
- DATA_FILE = 1;
- DATA_TITLE = 2;
- DATA_URL = 3;
- DATA_TRANSLATION = 4;
- DATA_FILEFORMAT = 5;
- DATA_FILEHTML_URL = 6;
- DATA_EXCERPT = 7;
- DATA_DESCRIPTION = 8;
- DATA_CATEGORY = 9;
- DATA_CATEGORY_URL = 10;
- DATA_PROPERTIES = 11;
- DATA_CACHE_URL = 12;
- DATA_RELATED_URL = 13;
-
- G_COLORS: array[1..13] of TColor = (
- clDkGray,
- clBlack,
- clBlue,
- clBlack,
- clGray,
- clBlack,
- clBlack,
- clBlack,
- clBlack,
- clBlack,
- clGreen,
- clGray,
- clGray);
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmGoogle.FormCreate(Sender: TObject);
- begin
- Application.OnMessage := AppMessage;
- DragAcceptFiles(tvResults.Handle, True);
- end;
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmGoogle.FormDestroy(Sender: TObject);
- begin
- Application.OnMessage := nil;
- DragAcceptFiles(tvResults.Handle, False);
- end;
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmGoogle.AppMessage(var Msg: TMsg; var Handled: Boolean);
- var
- s: array[0..MAX_PATH] of AnsiChar;
- begin
- if Msg.Message = WM_DROPFILES then
- begin
- DragQueryFile(Msg.wParam, 0, s, SizeOf(s));
- DragFinish(Msg.wParam);
- ParseFile(s);
- Handled := True;
- end;
- end;
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmGoogle.ParseFile(const f: AnsiString);
- var
- s: TFileStream;
- begin
- Caption := f + ' - ' + APP_TITLE;
-
- s := TFileStream.Create(f, fmOpenRead or fmShareDenyWrite);
- try
- tvResults.Items.BeginUpdate;
- try
- FFileNode := tvResults.Items.Add(nil, 'File: ' + f);
- FFileNode.Data := Pointer(DATA_FILE);
-
- DIHtmlParser1.SourceStream := s;
- DIHtmlParser1.Reset;
- DIHtmlParser1.ParseAll;
-
- lblQuery.Caption := 'Searched for: ' + DIHtmlGooglePlugin1.Query;
- finally
- tvResults.Items.EndUpdate;
- end;
- finally
- s.Free;
- end;
- end;
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmGoogle.Image1Click(Sender: TObject);
- begin
- end;
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmGoogle.DIHtmlGooglePlugin1Result(const Sender: TDIHtmlParserPlugin);
- var
- ItemNode: TTreeNode;
- begin
- ItemNode := tvResults.Items.AddChild(FFileNode, TDIHtmlGooglePlugin(Sender).Title);
- ItemNode.Data := Pointer(DATA_TITLE);
- if TDIHtmlGooglePlugin(Sender).LinkUrl <> '' then
- tvResults.Items.AddChild(ItemNode, 'URL: ' + TDIHtmlGooglePlugin(Sender).LinkUrl).Data := Pointer(DATA_URL);
- if TDIHtmlGooglePlugin(Sender).TranslationUrl <> '' then
- tvResults.Items.AddChild(ItemNode, 'Translation: ' + TDIHtmlGooglePlugin(Sender).TranslationUrl).Data := Pointer(DATA_TRANSLATION);
- if TDIHtmlGooglePlugin(Sender).FileFormat <> '' then
- tvResults.Items.AddChild(ItemNode, 'FileFormat: ' + TDIHtmlGooglePlugin(Sender).FileFormat).Data := Pointer(DATA_FILEFORMAT);
- if TDIHtmlGooglePlugin(Sender).FileHtmlUrl <> '' then
- tvResults.Items.AddChild(ItemNode, 'FileHTML URL: ' + TDIHtmlGooglePlugin(Sender).FileHtmlUrl).Data := Pointer(DATA_FILEHTML_URL);
- if TDIHtmlGooglePlugin(Sender).Abstract <> '' then
- tvResults.Items.AddChild(ItemNode, 'Excerpt: ' + TDIHtmlGooglePlugin(Sender).Abstract).Data := Pointer(DATA_EXCERPT);
- if TDIHtmlGooglePlugin(Sender).Description <> '' then
- tvResults.Items.AddChild(ItemNode, 'Description: ' + TDIHtmlGooglePlugin(Sender).Description).Data := Pointer(DATA_DESCRIPTION);
- if TDIHtmlGooglePlugin(Sender).Category <> '' then
- tvResults.Items.AddChild(ItemNode, 'Category: ' + TDIHtmlGooglePlugin(Sender).Category).Data := Pointer(DATA_CATEGORY);
- if TDIHtmlGooglePlugin(Sender).CategoryUrl <> '' then
- tvResults.Items.AddChild(ItemNode, 'Category-URL: ' + TDIHtmlGooglePlugin(Sender).CategoryUrl).Data := Pointer(DATA_CATEGORY_URL);
- if TDIHtmlGooglePlugin(Sender).Properties <> '' then
- tvResults.Items.AddChild(ItemNode, 'Properties: ' + TDIHtmlGooglePlugin(Sender).Properties).Data := Pointer(DATA_PROPERTIES);
- if TDIHtmlGooglePlugin(Sender).CacheUrl <> '' then
- tvResults.Items.AddChild(ItemNode, 'Cache-URL: ' + TDIHtmlGooglePlugin(Sender).CacheUrl).Data := Pointer(DATA_CACHE_URL);
- if TDIHtmlGooglePlugin(Sender).RelatedUrl <> '' then
- tvResults.Items.AddChild(ItemNode, 'Related-URL: ' + TDIHtmlGooglePlugin(Sender).RelatedUrl).Data := Pointer(DATA_RELATED_URL);
- end;
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmGoogle.tvResultsCustomDrawItem(Sender: TCustomTreeView;
- Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
- begin
- case Cardinal(Node.Data) of
- DATA_FILE:
- Sender.Canvas.Font.Style := [fsBold];
- DATA_TITLE:
- Sender.Canvas.Font.Style := [fsBold];
- end;
-
- if (State = []) and (Node.Data <> nil) then
- begin
- Sender.Canvas.Font.Color := G_COLORS[Cardinal(Node.Data)];
- end;
- end;
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmGoogle.sbnOpenClick(Sender: TObject);
- begin
- with TOpenDialog.Create(nil) do
- try
- Filter := 'HTML-files (*.htm;*.html)|*.htm;*.html|All files (*.*)|*.*';
- if Execute then
- ParseFile(FileName);
- finally
- Free;
- end;
- end;
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmGoogle.sbnExpandClick(Sender: TObject);
- begin
- tvResults.FullExpand;
- end;
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmGoogle.sbnCollapseClick(Sender: TObject);
- begin
- tvResults.FullCollapse;
- end;
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmGoogle.sbnClearClick(Sender: TObject);
- begin
- tvResults.Items.Clear;
- end;
-
- { ---------------------------------------------------------------------------- }
-
- initialization
- RegisterHtmlTags;
- RegisterHtmlAttribs;
- RegisterHtmlDecodingEntities;
- RegisterHtmlColors;
- RegisterCharSets;
-
- end.
-
-