Yorumları: 95
Konuları: 45
Kayıt Tarihi: 10-02-2017
Rep Puanı: 67 Başlangıç
Selam;
Maç kolikten takım skorlarını çekiyorum, skorla beraber takımların adını da almak istediğimde birince takımın adını alıyorum fakat ikici takım adını alamadım acaba nereden hata yapıyorum?
iki takında adı aynı class içinde <div class="match-statistics-logo-text">
function GolParse(Source, EvSahibi, Deplasman, StrEv, StrDep: String): String;
begin
Delete(Source, 1, Pos(EvSahibi, Source) + Length(EvSahibi) - 1);
Result := Copy(Source, 1, Pos(Deplasman, Source) - 1);
Delete(Source, 1, Pos(StrEv, Source) + Length(StrEv) - 1);
Form1.caption := Copy(Source, 1, Pos(StrDep, Source) - 1);
end;
procedure SkorKontrol.Execute;
var
I: Integer;
Http: TIdHTTP;
Mackolik: String;
URL, Kimler, Goller, EvGol, DepGol: String;
begin
With Form1 do
try
Http := TIdHTTP.Create(Nil);
Mackolik := 'http://www.mackolik.com/Mac/';
try
URL := Http.Get(Mackolik + MacIdNo.Text + '/');
Goller := Trim(GolParse(URL,
'<div class="match-score" id="dvScoreText">', '</div>',
'<div class="match-statistics-logo-text">', '</div>'));
EvGol := Trim(Copy(Goller, 1, 1));
DepGol := Trim(Copy(Goller, 5, 1));
EvDepLB.caption := EvGol + ' - ' + DepGol;
MesajLB.caption := 'Skor alındı...';
finally
Http.Free;
end;
except
MesajLB.caption := 'Skor alınamadı işlem tekrar denenecek...';
end;
end;
Yorumları: 304
Konuları: 20
Kayıt Tarihi: 26-09-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.967 Uzman
uses
regularexpressions;
procedure TForm1.btnGitAraBulGetirSaclariniYolGetirClick(Sender: TObject);
Function Explode(AValue, AStart, AEnd : String ): String;
begin
Delete(AValue, 1, pos(AStart, AValue) + Length(AStart)-1);
Result := Copy(AValue, 1, Pos(AEnd, AValue)-1);
end;
const
HomeStart = '<a class="left-block-team-name"';
AwayStart = '<a class="r-left-block-team-name"';
TeamEnd = '</a>';
ScoreStart = '<div class="match-score" id="dvScoreText">';
ScoreEnd = '</div>';
var
tempStr : String;
HomeTeam,
AwayTeam,
Score,
HomeScore,
AwayScore : String;
begin
Memo1.Clear;
try
tempStr := IdHTTP1.Get('http://www.mackolik.com/Mac/2772988/');
HomeTeam := Explode(tempStr, HomeStart, TeamEnd).Trim;
HomeTeam := TRegEx.Replace(HomeTeam, '.+>', '', [roIgnoreCase]);
AwayTeam := Explode(tempStr, AwayStart, TeamEnd).Trim;
AwayTeam := TRegEx.Replace(AwayTeam, '.+>', '', [roIgnoreCase]);
Score := Explode(tempStr, ScoreStart, ScoreEnd).Trim;
HomeScore:= Copy(Score, 1, pos('-', Score)-1).Trim;
AwayScore:= Copy(Score, pos('-', Score)+1, 50).Trim;
finally
with Memo1.Lines do
begin
Add('Home : ' + HomeTeam );
Add('Away : ' + AwayTeam );
Add('Score : ' + Score);
Add('HomeScore : ' + HomeScore);
Add('AwayScore : ' + AwayScore);
end;
end;
end;
Amatör Küme Bilgisayar Programcısı
Yorumları: 1.571
Konuları: 88
Kayıt Tarihi: 09-08-2016
Rep Puanı: 13.829 Üstad
+1
GitAraBulGetirSaclariniYolGetir için
There's no place like 127.0.0.1
Yorumları: 304
Konuları: 20
Kayıt Tarihi: 26-09-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.967 Uzman
(12-04-2017, Saat: 14:48)SimaWB Adlı Kullanıcıdan Alıntı: +1
GitAraBulGetirSaclariniYolGetir için
Mümkün mertebe kodlarımın içinde en az bir tane absürt isim oluyor
Amatör Küme Bilgisayar Programcısı
Yorumları: 95
Konuları: 45
Kayıt Tarihi: 10-02-2017
Rep Puanı: 67 Başlangıç
(12-04-2017, Saat: 14:54)barutali Adlı Kullanıcıdan Alıntı: (12-04-2017, Saat: 14:48)SimaWB Adlı Kullanıcıdan Alıntı: +1
GitAraBulGetirSaclariniYolGetir için
Mümkün mertebe kodlarımın içinde en az bir tane absürt isim oluyor
Tek kelimeyle harika... sadece +4 verebildim bence +100000000 seçenek olmalı....
Yorumları: 305
Konuları: 49
Kayıt Tarihi: 26-12-2016
Rep Puanı: 545 Acemi
Hevesinizi kırmak gibi olmasın ama, bende sizin gibi birçok idda sitesinde maç sonuçlarını alan program yazayım dedim 1 ay uğraştım , siteleri tek tek gezip kodlarını inceleyip parse ettirdim. Sonra bir baktım site 2 hafta sonra kaynak kodunda ilgili div adını değiştirmiş yeniden düzenledim. Sonra bu iş adet haline geldi ve yoruldum ))) Diyeceğim şu ki kaynak kodu parse etmek ile başa çıkılmıyor. Size tavsiyem parse şeklinizi , şu divle bu divi bul arasını al şeklinde değilde, verdiğiniz div class adını veya idsini aratarak yapın böylece diğer işlemlerden kurtulmuş olursunuz. Tabi bunun için idhttp değilde gizli webbrowser kullanmanız gerek ))
Eski parse şeklim
procedure bilyoner_banko; ///BANKO
Const
blokbasi ='<DIV id=popular_container'; bloksonu ='<DIV class="row footer">';
silinecek ='<DIV class=odd>';
varsa ='<DIV class=match>';
aranacak ='<DIV id=kupon_ismi>BANKO KUPONU</DIV>';
Var
strIcerik, strBlok, tahminturu,kodu,takimadi,tahmini: String;
begin
URL:='http://www.bilyoner.com/';
Sayfada_Ara:=aranacak;
if Form1.WebBrowser1.ReadyState <> READYSTATE_UNINITIALIZED then Form1.WebBrowser1.Stop;
Form1.WebBrowser1.Navigate( URL );
while Form1.WebBrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;
Form1.WebBrowser1.OleObject.Document.GetElementByID('2Pg').Click;
while NOT Pos( aranacak, Form1.WebBrowser1.OleObject.Document.Body.InnerHTML ) > 0 do Application.ProcessMessages;
IF Pos( aranacak, Form1.WebBrowser1.OleObject.Document.Body.InnerHTML ) > 0 then begin
strIcerik:=Form1.WebBrowser1.Oleobject.Document.Body.InnerHTML;
strBlok := blokSec(strIcerik,blokbasi,bloksonu);
Delete(strBlok, 1, pos(varsa, strBlok)-1);
while Pos( varsa, strBlok ) > 0 do
begin
tahminturu :=blokSec(strBlok,'<DIV class=type><SPAN class=OddTypes>','<');
takimadi :=blokSec(strBlok,'<DIV class=teams>','<');
kodu :=blokSec(strBlok,'<DIV class=code>','<');
tahmini :=blokSec(strBlok,'<DIV class=choice>','<');
Delete(strBlok, 1, pos(silinecek, strBlok) + Length(silinecek)-1);
Form1.Memo2.Lines.Add(kodu+'--'+takimadi+'--'+tahminturu+'--'+tahmini);
end; // while
end;
end;
Sonra bıkıp yeni geliştirdiğim yöntem
////////////////////////////////////////////////////////////////////////
procedure Getir_idda_Prg(const kodu,adi: string);
var
Doc:IDispatch;
Document: IHTMLDocument2;
Body: IHTMLElement2;
Tags: IHTMLElementCollection;
Tag: IHTMLElement;
I,k: Integer;
mackodu,takimadi,tahminleri, oranlar : string;
begin
Doc:=Form1.WebBrowser1.Document;
// Form1.Memo1.Clear;
if not Supports(Doc, IHTMLDocument2, Document) then exit;
if not Supports(Document.body, IHTMLElement2, Body) then exit;
Tags := Body.getElementsByTagName('*');
for I := 0 to Pred(Tags.length) do
begin
Tag := Tags.item(I, EmptyParam) as IHTMLElement;
if AnsiSameText(Tag._className, kodu) then
begin
mackodu:=Tag.innerText;
end;
if AnsiSameText(Tag._className, adi) then
begin
takimadi:=Tag.innerText;
if (mackodu<>'')and (takimadi<>'') then begin
form1.Table_iddaprg.Append;
form1.Table_iddaprgKodu.AsString := mackodu;
form1.Table_iddaprgTakim_Adi.AsString := takimadi;
form1.Table_iddaprg.Refresh;
Form1.Memo1.Lines.Add(mackodu +' '+ takimadi);
end;
end;
end;
end;
////////////////////////////////////////////////////////////////////////
Yorumları: 4.224
Konuları: 379
Kayıt Tarihi: 07-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 16.975 Üstad
(13-04-2017, Saat: 01:24)serhat Adlı Kullanıcıdan Alıntı: (12-04-2017, Saat: 14:54)barutali Adlı Kullanıcıdan Alıntı: Mümkün mertebe kodlarımın içinde en az bir tane absürt isim oluyor
Tek kelimeyle harika... sadece +4 verebildim bence +100000000 seçenek olmalı....
Bilginin kıymeti, puanla ölçülemez tabi.
Bildiğini, bilmeyenlerden saklamayanların kıymeti ise paha biçilemez.
Sizin vesilenizle Ali Bey ( barutali) ve benzer şekilde katkıları olan tüm Delphi Can'lara teşekkür ederim.
|