Autor Beitrag
Stefan-W
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 475

Win 7 SP1
D2005 PE
BeitragVerfasst: Mi 31.05.06 14:45 
Hi, ich brauch mal eine helfende Hand beim übersetzen einer Funktion von PHP nach Delphi.

ich hoffe da kann mir jemand helfen...

Ich will einen Anrufmonitor für unsere FritzBox programmieren und da soll dann statt der Nummer dier Name angezeigt werden. Ich hab den Code aus der DP, und kann ihn nur nicht übersetzen.

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
<?php

//
// Inverssuche via 'dasoertliche.de'
//
// Copyright (c) 2005 Peter J. Schneider
// www.raketenwerfer.de
//


define("NL", "\n");


function get_name_by_number($number) {
  $url = 'http://www.dasoertliche.de/DB4Web/es/oetb2suche/home.htm'.
    '?main=Antwort&AKTION=START_INVERS_SUCHE&SEITE=INVERSSUCHE_V'.
    '&s=2&rg=1&taoid=&si=&SKN=0&kw_invers='.
    urlencode($number);

  // Abfrage
  $file = fopen ($url, "r");
  if (!$file) {
    exit;
  }
  while (!feof ($file)) {
    $line = fgets ($file, 1024);
    if (eregi ("<a class=\"blb\"(.*)</td>", $line, $out)) {
      $result = $out[1];
      break;
    }
  }
  fclose($file);

  // Prä parsen
  $result = substr($result, strpos($result,  '>')+2);

  $vor_array = explode('</a><br>', $result);  // 0 : Name
                        // 1: Anschrift
  
  $vor_array2 = explode(', ', $vor_array[1]); // 0: Straße
                        // 1: PLZ / Ort

  return array($vor_array[0], $vor_array2[0], $vor_array2[1]);
}



$result = get_name_by_number($_GET['number']);

echo $result[0].NL;
echo $result[1].NL;
echo $result[2]; 

?>

sind nur ca 20 Zeilen (ohne Komentare)

Würd mich freuen wenn mir jemand hilft
Tschau Stefan


Moderiert von user profile iconAXMD: Topic aus Sonstiges (Delphi) verschoben am Do 01.06.2006 um 19:02
Stefan-W Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 475

Win 7 SP1
D2005 PE
BeitragVerfasst: Do 01.06.06 17:59 
gut da es einige gab die hier zwar reichgeschaut haben aber nix posteten, denk ich mal so einfach seit ihr nicht zu überzeugen, mir hierbei zu helfen ;-) :lol:
gut mir ist die Sache nun mitlerweile soviel wert, dass ich mich entschlossen habe euch einen kleinen Unkostenbeitrag zukommen zu lassen, ich denk da so an 5€ da es ja nur ca 20 Zeilen sind.
Würd mich freuen wenn mir jemand helfen kann. :flehan:

Tschau Stefan
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 01.06.06 18:31 
Spende das Geld doch lieber für einen guten Zweck ;)
Jedenfalls würde ich sowas aber nicht in ein Programm einbauen; wenn das Design der Seite ändert funktioniert das ganze nämlich nicht mehr.
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
uses IdHTTP, IdException;

type
 ENotFound = class(Exception);
 TAddress = record
  Name, Anschrift, PLZ_Ort: String;
 end;

function get_name_by_number(Number: String): TAddress;
 procedure Error;
 begin
  raise ENotFound.Create('Incorrect format');
 end;
var
 Answer, A1, A2: String;
 I: Integer;
begin
  with TIdHTTP.Create do
   try
    Answer := Get('http://www.dasoertliche.de/DB4Web/es/oetb2suche/home.htm?main=Antwort&AKTION=START_INVERS_SUCHE&SEITE=INVERSSUCHE_V&s=2&rg=1&taoid=&si=&SKN=0&kw_invers='+Number);
    I := Pos('class="blb"',Answer);
    if I = 0 then Error;
    Answer := Copy(Answer, I, Length(Answer)-I+1);
    I := Pos('>',Answer);
    if I = 0 then Error;
    Answer := Copy(Answer, I+1, Length(Answer)-I);
    I := Pos('</td>',Answer);
    if I = 0 then Error;
    Answer := Copy(Answer, 1, I-1);
    I := Pos('</a><br>',Answer);
    if I = 0 then Error;
    A1 := Copy(Answer, 1, I-1);
    A2 := Copy(Answer, I+8, Length(Answer)-(I+8-1));
    I := Pos(',',A2);
    if I = 0 then Error;
    Result.Name := Trim(A1);
    Result.Anschrift := Trim(Copy(A2, 1, I-1));
    Result.PLZ_Ort := Trim(Copy(A2, I+1, Length(A2)-I));
   finally
    Free;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Adresse: TAddress;
begin
  try
  Adresse := get_name_by_number('04394610'); // irgend ne Nummer
  ShowMessage(Adresse.Name+#13+Adresse.Anschrift+#13+Adresse.PLZ_Ort);
  except
   on E:ENotFound do
     MessageDlg('Fehler beim Nachschlagen.', mtError, [mbOk], 0);
   on E:EIdException do
     MessageDlg('Fehler bei der Verbindung.', mtError, [mbOk], 0);
  end;
end;
Stefan-W Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 475

Win 7 SP1
D2005 PE
BeitragVerfasst: Do 01.06.06 18:41 
Ah wunderbar :D da kann ich nachher gleich weiter arbeiten :D *WieSauFreu*

ich hätte dir angeboten dir das Geld zu überweisen

Nochmal vielen Dank

Tschau Stefan
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Fr 02.06.06 07:16 
Kannst es unseren Admins überweisen für den Traffic des Forums ;)