tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
24
ZUGRIFFE
1378
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    webbudda webbudda ist offline Mitglied Bronze
    Registriert seit
    Sep 2009
    Beiträge
    46
    Hallo,

    ich möchte 2 Werte einer Webseite auslesen. Dabei handelt es sich um 2 Variablen von Koordianten des Einwahlpunktes:
    Latitude:
    Longitude:

    Diese möchte Variablen (lat, long )ich für Google maps weiterverwenden, sofern diese von der Webseite erkannt werden also, wenn dort NICHT City: (Unknown city)
    steht.

    Webseite:
    http://api.hostip.info/get_html.php?ip=&position=true

    Bin da leider kein profi und hab auch nicht so richtig was gefunden.
    Hat jemand eine idee?
    Danke & gruß
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,

    alleine mit JS ist dies nicht machbar, da man damit keinen Zugriff auf Quellen von fremden Servern hat.
     

  3. #3
    webbudda webbudda ist offline Mitglied Bronze
    Registriert seit
    Sep 2009
    Beiträge
    46
    Ahnte sowas. Das ist eine startseite (index.php). wird wohl nicht leicht das per php zu machen und dann die variablen an JS zu übergeben was?

    Hat jemand eine Idee?
     

  4. #4
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.960
    Ob das jetzt eine Startseite ist oder nicht, ist in dem Fall egal. Leg dir einfach eine andere Datei an die folgendes beinhaltet:
    PHP-Code:
    <?php
    $contents 
    file('http://api.hostip.info/get_html.php?ip=&position=true');

    foreach(
    $contents as $line) {
        if(
    strpos($line'Latitude') !== FALSE) {
            
    $data['latitude'] = (float) substr($line10);
        }
        elseif(
    strpos($line'Longitude') !== FALSE) {
            
    $data['longitude'] = (float) substr($line11);
        }
    }
    ?>
    So kannst du die Daten auslesen. Den Array kannst du dann wie du willst ausgeben und dann per AJAX auf die Seite deiner Wahl einlesen. Fertig!

    EDIT: Arrays kannst du zum Beispiel mit JSON bearbeiten und dann mit beispielsweise dem Framework jQuery für JavaScript verständlich umformen. jQuery bietet dir auch JSON.
    Geändert von einfach nur crack (17.10.09 um 12:45 Uhr)
     
    Ich mag:
    • positive Bewertungen meiner Beiträge
    • ein Danke für meine hilfreichen Beiträge

    Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

  5. #5
    webbudda webbudda ist offline Mitglied Bronze
    Registriert seit
    Sep 2009
    Beiträge
    46
    Oh danke für den Tipp.

    Wenn ich die Seite aufrufe, bekomme ich im Skript und im Brwoser andere Werte. Ich vermute, der trackt die IP vom Server, wenn ich das per PHP aufrufe was...

    PHP-Code:
    <?php

        $ip 
    "UNBEKANNT";
        if (
    $_SERVER["HTTP_CLIENT_IP"]) 
            
    $ip $_SERVER["HTTP_CLIENT_IP"];
        else if(
    $_SERVER["HTTP_X_FORWARDED_FOR"]) 
            
    $ip $_SERVER["HTTP_X_FORWARDED_FOR"];
        else if(
    $_SERVER["REMOTE_ADDR"]) 
            
    $ip $_SERVER["REMOTE_ADDR"];

    $contents file("http://api.hostip.info/get_html.php?ip=".$ip."&position=true");

    foreach(
    $contents as $line) {
        if(
    strpos($line'Latitude') !== FALSE) {
            
    $data['latitude'] =  substr($line10);
        }
        elseif(
    strpos($line'Longitude') !== FALSE) {
            
    $data['longitude'] =  substr($line11);
        }
    }

    echo 
    $data['longitude'];
    echo 
    "<br>";
    echo 
    $data['latitude'];

    ?>
    so gehts. Aber wie bekomme ich die daten jetzt mit ajax ausgelesen? Ich habe die daten jetzt mit JSOn bearbeitet:
    PHP-Code:
    {"latitude":"xx.08\n","longitude":"xx.81"
    Bekomme das nicht ganz hin?

    HTML-Code:
    var http = null;
    if (window.XMLHttpRequest) {
       http = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
       http = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if (http != null) {
       http.open("GET", "getpos.php", true);
       http.onreadystatechange = ausgeben;
       http.send(null);
    }
    
    function ausgeben() {
       if (http.readyState == 4) {
           var rueckgabe = http.responseText;
           var objekt = eval("(" + rueckgabe + ")");
           
    lat=?
    long=?
    		
    
            
       }
    }

    kann man das auch so programmieren, dass es erst weiter geht wenn der wert geholt ist bzw das nach einer gewissen zeit abgebrochen wird. wenn es weiter geht ohne das die werte schon da sind wäre unglücklich, dann bekomme ich wohl ein timing problem.
    Geändert von webbudda (17.10.09 um 23:46 Uhr)
     

  6. #6
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Zitat Zitat von webbudda Beitrag anzeigen
    so gehts. Aber wie bekomme ich die daten jetzt mit ajax ausgelesen? Ich habe die daten jetzt mit JSOn bearbeitet:
    PHP-Code:
    {"latitude":"xx.08\n","longitude":"xx.81"
    Wenn das die Rückgabe ist, solltest du mit
    Code :
    1
    
    objekt.latitude
    bzw.
    Code :
    1
    
    objekt.longitude

    ans Ziel kommen.
     

  7. #7
    webbudda webbudda ist offline Mitglied Bronze
    Registriert seit
    Sep 2009
    Beiträge
    46
    Danke. Jetzt habe ich ein timing Problem. Die Variablen brauchen eine Zeit zum Abrufen. Kann man sowas umgehen?.
    Code :
    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
    
     
    var long_pos;
    var lat_pos;
    var http = null;
    if (window.XMLHttpRequest) {
       http = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
       http = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if (http != null) {
       http.open("GET", "getpos.php", true);
       http.onreadystatechange = ausgeben;
       http.send(null);
    }
     
    function ausgeben() {
       if (http.readyState == 4) {
           var rueckgabe = http.responseText;
           var objekt = eval("(" + rueckgabe + ")");       
            lat_pos = objekt.latitude;
            long_pos = objekt.longitude;         
       alert("1");
       }
    }
     
    alert("2");
        alert(lat_pos);
        alert(long_pos);

    Ausgabe:
    2
    1
    lat_pos
    long_pos

    Ohne die Messageboxen sind lat und long auch leer, weils n mom dauert bis die geholt sind. eine idee?
    Geändert von webbudda (18.10.09 um 12:51 Uhr)
     

  8. #8
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Wenn du die Variablen innerhalb von ausgeben() verwendest, oder nachdem diese Funktion aufgerufen wurde, sollten sie bekannt sein.

    Optional könntest du den Request synchron vornehmen(3. Parameter von open() auf false)...allerdings würde der Browser dann bis zr Antwort unbenutzbar sein.
     

  9. #9
    webbudda webbudda ist offline Mitglied Bronze
    Registriert seit
    Sep 2009
    Beiträge
    46
    Zitat Zitat von Sven Mintel Beitrag anzeigen
    Wenn du die Variablen innerhalb von ausgeben() verwendest, oder nachdem diese Funktion aufgerufen wurde, sollten sie bekannt sein.
    Sind sie ja scheinbar nicht, siehe oben.
    Optional könntest du den Request synchron vornehmen(3. Parameter von open() auf false)...allerdings würde der Browser dann bis zr Antwort unbenutzbar sein.
    Und wenn mal keine antwort kommt? Klappt ausserdem nicht, dann sind die variablen null.
    Geändert von webbudda (18.10.09 um 14:45 Uhr)
     

  10. #10
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Zitat Zitat von webbudda Beitrag anzeigen
    Sind sie ja scheinbar nicht, siehe oben.

    Code :
    1
    
    var objekt = eval("(" + rueckgabe + ")");

    Entferne dort das var....dann ist objekt global verfügbar.
     

  11. #11
    webbudda webbudda ist offline Mitglied Bronze
    Registriert seit
    Sep 2009
    Beiträge
    46
    Die Variablen nehmen den richtigen Wert ja an. Leider aber nur wenn ich ein alert VOR der ausgabe setzte und dann 2 seklunden warte, bevor ich die box weg klicke. danach haben die variablen den richtigen wert.

    deshalb habe ich auch oben die ausgabe gepostet. 2 wird vor 1 ausgegeben. das sagt eigentlich alles...timing.

    setze ich den dritten parameter auf false sind die variablen immer null.
    Geändert von webbudda (18.10.09 um 16:17 Uhr)
     

  12. #12
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Ahso, probiere es mal ohne onreadystatechange...das ist bei synchronem Request nicht nötig und kann je nach Browser Probleme verursachen:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    var long_pos;
    var lat_pos;
    var http = null;
    if (window.XMLHttpRequest) {
       http = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
       http = new ActiveXObject("Microsoft.XMLHTTP");
    }
     
     
    if (http != null) 
    {
       http.open("GET", "getpos.php?"+new Date().getTime(), false);
       http.send();
       eval('objekt='+http.responseText); 
       long_pos=objekt.longitude;
       lat_pos=objekt.latitude;
    }
     
    alert(lat_pos+'\n'+long_pos);
     

  13. #13
    webbudda webbudda ist offline Mitglied Bronze
    Registriert seit
    Sep 2009
    Beiträge
    46
    wieso das +new Date().getTime() hinter dem aufruf?
     

  14. #14
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Um sicherzugehen, dass da nichts aus dem Cache geladen wird.
     

  15. #15
    webbudda webbudda ist offline Mitglied Bronze
    Registriert seit
    Sep 2009
    Beiträge
    46
    Firefox 3.0.14 (ich weiss, ist nicht der neuste, aber trotzdem) springt vor dem http.send();
    scheinbar raus. Der IE 8 schluckts auch nicht.
    Geändert von webbudda (24.10.09 um 15:31 Uhr)
     

Ähnliche Themen

  1. [C++] String aus WebSeite auslesen.
    Von Golumserbe im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 19.11.10, 08:16
  2. Javascript (für Dashboard-Widget) fremde Webseite auslesen
    Von zeroize im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 03.05.09, 22:37
  3. Aktuelle Webseite auslesen
    Von ronaldo84 im Forum Visual Basic 6.0
    Antworten: 20
    Letzter Beitrag: 15.02.06, 14:15
  4. Antworten: 6
    Letzter Beitrag: 22.11.05, 18:44
  5. Webseite auslesen
    Von zoetti1 im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 16.05.05, 13:45