string parse ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ready4die
Üye
Mesajlar: 40
Kayıt: 04 Eki 2007 10:17

string parse ?

Mesaj gönderen ready4die »

s.a
şimdi ben idhttp ile istediğim bir siteyi açıyorum bu sitedeki linkleri almak istiyorum
mesela
<a href="http://site">Link1</a>

ben bu http://site'yi nasıl alabilirim ? forumda araştırma yaptım ama bulamadım. mrarman hocamın örneğini kontrol ettim ama nedense çözemedim yardım edermisiniz ?
teşekkürler. iyi çalışmalar
Kullanıcı avatarı
Z.D.
Üye
Mesajlar: 104
Kayıt: 01 Nis 2006 01:48
Konum: İstanbul

Re: string parse ?

Mesaj gönderen Z.D. »

umarım spam vs. gibi işler için istemiyorsundur. eğer öyleyse gerçekten üzülürüm!

mesela bir html source kodu

Kod: Tümünü seç

<link rel="icon" href="http://i.imdb.com/favicon.ico" />
yukarıdaki linki almak için href=" <> " arasındaki değeri alan bir fonksiyon yazman lazım.

bunun için basit bir örnek yazdım

Kod: Tümünü seç

{==============================================================================
Code Example:
  - HTML Parse
  - http://www.delphiturkiye.com/forum/
==============================================================================}

unit Unit1;

interface

{-------------------------------------------------------------------------------
-------------------------------------------------------------------------------}

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1:    TMemo;
    ListBox1: TListBox;
    Button1:  TButton;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

{-------------------------------------------------------------------------------
-------------------------------------------------------------------------------}

var
  Form1: TForm1;


implementation

{$R *.dfm}

{-------------------------------------------------------------------------------
-------------------------------------------------------------------------------}

procedure TForm1.Button1Click(Sender: TObject);
var
  RemainingTextA: string;

{-------------------------------------------------------------------------------
-------------------------------------------------------------------------------}

  function TextBetweenA(WholeText: string; BeforeText: string; AfterText: string): string;
  var
    FoundPos: Integer;
    WorkText: string;
  begin
    RemainingTextA := WholeText;
    Result         := '';
    if BeforeText = '' then
      FoundPos := 0
    else begin
      FoundPos := Pos(BeforeText, WholeText);
      if FoundPos = 0 then
        Exit;
    end;
    WorkText := Copy(WholeText, FoundPos + Length(BeforeText), Length(WholeText));
    if AfterText = '' then
      FoundPos := Length(WorkText) + 1
    else begin
      FoundPos := Pos(AfterText, WorkText);
      if FoundPos = 0 then
        Exit;
    end;
    Result         := Copy(WorkText, 1, FoundPos - 1);
    RemainingTextA := Copy(WorkText, FoundPos + Length(AfterText), Length(WorkText));
  end;

{-------------------------------------------------------------------------------
-------------------------------------------------------------------------------}

var
  S, Value: string;
begin
  ListBox1.Items.Clear;
  S := Memo1.Text;
  while True do
  begin
    Value := TextBetweenA(S, 'href="', '"');
    if Value <> '' then
    begin
      S := RemainingTextA;
      ListBox1.Items.Add(Value);
    end
    else
      break;
  end;
end;

{-------------------------------------------------------------------------------
-------------------------------------------------------------------------------}

end.

örnekte RemainingTextA kullanmamızın nedeni hem tekrar aynı yeri parse etmemek hemde loopdan çıkmak için.

http://rapidshare.com/files/119794283/H ... e.zip.html
ready4die
Üye
Mesajlar: 40
Kayıt: 04 Eki 2007 10:17

Re: string parse ?

Mesaj gönderen ready4die »

cevap için teşekkürler deneyeceğim.
hayır spamlarla vs. işim olmuyor. aslında daha farklı birşey için istedim yani sayfalardan istediğim karakterlerin arasını alamyordum ve soruyu sorarken link almak geldi aklıma o yüzden böyle sordum..
teşekkürler
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Re: string parse ?

Mesaj gönderen undefined »

Kendi yazacağın parse fonksiyonu yerine, Regular expression librarysi bulup uygun syntax ile çok daha esnek bir şekilde yapabilirsin bu işlemi.
ready4die
Üye
Mesajlar: 40
Kayıt: 04 Eki 2007 10:17

Re: string parse ?

Mesaj gönderen ready4die »

merhaba fonksiyonla değilde undefined'in dediği yöntemle yaptım yinede fonksiyon için teşekkürler ama şimdi başka bir soruda takıldım mesela birden fazla sayfalama yapılmışsa o sayfalamayı nasıl geçicem ? yani

msn.com dan arama yaptığımızda

http://search.msn.com/results.aspx?q=as ... &FORM=MSNH > ilk sayfa
http://search.msn.com/results.aspx?q=as ... &FORM=PORE > 2. sayfa
http://search.msn.com/results.aspx?q=as ... &FORM=PORE > 3. sayfa

yani sayfalar
/results.aspx?q=asdasdasdasd&first=21&FORM=PORE
/results.aspx?q=asdasdasdasd&first=31&FORM=PORE

sayılar 21,31,41 şeklinde 10ar 10ar atarak gidiyorya işte bunları sırayla açamıyorum bir sayac ekleyip her parse edildikten sonra sayac'i +10 artırıyorum ama olmuyor yardım lütfen
amacım ilk sayfadaki istediğim bilgileri parse ettikten sonra ikinci , 3. , 4. sayfayı sırayla açmak ta ki bitene kadar

teşekkürler
ready4die
Üye
Mesajlar: 40
Kayıt: 04 Eki 2007 10:17

Re: string parse ?

Mesaj gönderen ready4die »

arkadaşlar yardım lütfen..
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Re: string parse ?

Mesaj gönderen undefined »

Sorun anlaşılmıyor, bu kadar eksik bilgiylede anlaşılabileceğini sanmıyorum. Bunun string parse la ilgisi var mı ?
ready4die
Üye
Mesajlar: 40
Kayıt: 04 Eki 2007 10:17

Re: string parse ?

Mesaj gönderen ready4die »

yeni başlık açmak istemedim o yüzden

şimdi yapmak istediğim şey mesela msnden birşey aratıyoruzya link
http://search.msn.com/results.aspx?q=aranacak&FORM=MSNH

böyle burdan istenilen şeyleri alıyoruz daha sonra 2. sayfayı almamız lazım ama işte bunu yapamıyorum while döngüsünü kullanıyorum ama olmuyor
2. sayfa

http://search.msn.com/results.aspx?q=aranacak&first=21 > 2. sayfa
http://search.msn.com/results.aspx?q=aranacak&first=31 > 3. Sayfa
http://search.msn.com/results.aspx?q=aranacak&first=41 > 4. sayfa

yani yapmak istediğim ilk sayfadan bilgi aldıktan sonra diğer sayfalara nasıl geçeceğim ? while ile yaptım olmadı yardım ederseniz sevinirim
teşekkürler
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Re: string parse ?

Mesaj gönderen undefined »

Kodları görmeden birşey söylenemez. Döngü içinde IdHttp Get isteğiyle yapılmaması için bir neden yok .
ready4die
Üye
Mesajlar: 40
Kayıt: 04 Eki 2007 10:17

Re: string parse ?

Mesaj gönderen ready4die »

Kod: Tümünü seç

var
  S, link: string;
  Sayac,i : integer;
  Devam, Eklendi : Boolean;
begin
  Sayac := 2;
  While (Sayac>0) Do
Begin
  Memo1.Text := inet1.openurl('http://search.msn.com/results.aspx?q=' + Edit1.Text + '&first=' + IntToStr(Sayac-1) + '&FORM=PORE');
  Edit2.Text := Inet1.URL;
  kaynak := Memo1.Text;
  While True Do
  begin
    link:= YaziyiKopar(kaynak, '<h3><a href="', '"');
    Eklendi := False;
    For i := 0 To Listbox1.items.count-1 Do
      Begin
        if link = Listbox1.items[i] Then
        Begin
          Eklendi := True;
        End;
//        Next;
      End;
    if Eklendi = False Then
    begin
      S := YaziyiKopar;
      Devam := True;
      ListBox1.Items.Add(link);
      Label2.Caption := IntToStr(Listbox1.Items.Count);
    end
    Else
      Break;
  end;
        if Devam = True Then
          Begin
            Sayac := Sayac+1*10;
          End
          Else
            Sayac := 0;
End;
end;

end.
idhttp de sorun çıkıyor bazen inet kullanıyorum. şimdiden teşekkürler (not : örnek olarak sadece linkleri almayı yaptım)

edit(@undefined) : Kodlar tag içine alındı
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Re: string parse ?

Mesaj gönderen undefined »

Kod: Tümünü seç

  Memo1.Text := inet1.openurl('http://search.msn.com/results.aspx?q=' + Edit1.Text + '&first=' + IntToStr(Sayac-1) + '&FORM=PORE');
  Edit2.Text := Inet1.URL;
  kaynak := Memo1.Text;
Bu satırları while döngüsünün dışında bırakmışsın. Bunları döngünün en başına al.
ready4die
Üye
Mesajlar: 40
Kayıt: 04 Eki 2007 10:17

Re: string parse ?

Mesaj gönderen ready4die »

döngünün içinde değil m i:S dediğinizi yaptım yada yaptığımı zannediyorum olmadı:S
Cevapla