Eine API in einen Script mehrmals aufrufen - PHP

  • Hallo Brotfische,


    ich habe ein API-Script geschrieben das funktioniert wenn man die API einmal aufruft.


    Ich möchte jedoch das ich die API in einer For-Schleife mehrfach aufrufen möchte mit den angeforderten Daten. Ich habe schon einiges versucht
    wie z.b. die Connections eine eindeeutige ID zuzuweisen. Jedoch funktioniert das auch nicht.




    und API->Daten() liest die Daten aus, die ich brauche.


    Wie bereits oben gesat brauche ich immer die entsprechenden Daten in einer For-Schleife.


    Code: auslesen.php
    $Weather = Weather;
    	for($x=1;$x<$db2->counts();$x++) {
    
    		$id = $db2->results()[$x]->id;
    		$Weather->beginConnect($db2->results()[$x]->lat, $db2->results()[$x]->lon);
    		echo 'TEMP: '.$Weather->Daten().'<br />';
    		var_dump($Weather->dump).'<hr />';


    Und die Ausgabe ist:

    Code
    http://privatedomain.de/data/2.5/go?lat=[LAT]&lon=[LNG]&appid=e31e7d4ddecb145d369aa874811d71c3&units=metric&radius=2
    TEMP: 19
    string(150) "52.7764 - 9.21752 API: http://privatedomain.de/data/2.5/go?lat=[LAT]&lon=[LNG]&appid=e31e7d4ddecb145d369aa874811d71c3&units=metric&radius=2" http://privatedomain.de/data/2.5/go?lat=52.7764&lon=[LNG]&appid=e31e7d4ddecb145d369aa874811d71c3&units=metric&radius=2
    TEMP: 19
    string(144) "54 - 13.7 API: http://privatedomain.de/data/2.5/go?lat=52.7764&lon=[LNG]&appid=e31e7d4ddecb145d369aa874811d71c3&units=metric&radius=2" http://privatedomain.de/data/2.5/go?lat=52.7764&lon=[LNG]&appid=e31e7d4ddecb145d369aa874811d71c3&units=metric&radius=2
    TEMP: 19

    Und TEMP ist das was ausgegeben wird. Aber er Liest nur den ersten Datensatz aus und das wiederholt sich in der For-Schleife. Aber jeder Datensatz in der Schleife sollte ausgelesen werden.


    Hat jemand Ideen? ?(


    Liebe Grüße
    palwal

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Also es ist sehr schwer dir hier zu helfen, hast du von deinem Code elemente entfernt an sich müsste der dir ein Fehler ausgeben, am besten postest du mehr Daten damit man eventuell deinen Coden debuggen kann.


    Code
    public  $lat,,


    Code
    $this->connect[$this->l]

    woher kommt $this->l her ? Müsste leer sein

  • Vielen Dank für deine Antwort.
    Also

    Code
    public $lat,,

    ist ein kleinerSchönheitsfehler von mir. Ich hatte da nichts entfernt. Dieser "Fehler" macht nichts. Ist genauso wie nach einer $variable zwei Semikolone dran zu setzen :D


    Code
    $this->connect[$this->l]

    Das war noch wo ich wie oben beschrieben, versucht habe jeden API-Aufruf eine eindeutige ID zuzuweisen. Hatte übersehen das zu ändern.


    Meine PHP-Klasse ist nicht viel größer ausser das sie noch eine gleiche Function beinhaltet wie API->Daten() das die Daten aus der JSON API ausliesst.


    Hättest du eine Idee um das zu beheben. Der erste Aufruf über die Schleife funktioniert jedoch nur die erste :/

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Probier es mal so ( quick 'n' dirty :(

    PHP
    function connects($lat, $lon) 
    	{
    		$this->connect = str_replace('[LAT]', $lat, $this->connect);
    		$this->connect = str_replace('[LON]', $lon, $this->connect);
    		$json = @file_get_contents($this->connect);
    		$this->connect = $this->api.'?lat=[LAT&lon=[LON]&appid='.$this->appid.'&units=metric&radius=2';
    		return json_decode($json);
    	}


    Alternativ:



    PHP
    function connects($lat, $lon) 
    	{
    		$url = $this->connect;
    		$url = str_replace('[LAT]', $lat, $this->connect);
    		$url = str_replace('[LON]', $lon, $this->connect);
    
    
    		$json = @file_get_contents($url);
    		return json_decode($json);
    	}
  • noch ein Fehler, der mir aufgefallen ist:
    $this->connect = $this->api.'?lat=[LAT&lon=[LON]&appid='.$this->appid.'&units=metric&radius=2';


    zu:
    $this->connect = $this->api.'?lat=[LAT]&lon=[LON]&appid='.$this->appid.'&units=metric&radius=2';

  • Hallo, danke für deine Antwort. Ich habe den Faden verloren und weiss nicht wo da eine Änderung ist. Ich hab es trotzdem einfügt, allerdings löst es das Problem nicht :(


    Habe mal Tante Google gefragt. Sie weiss darüber leier auch nicht alles. Aber habe au Stack Overflow eine Variante mit foreach gefunden. Ich glaube die Variante funktioniert auch, aber ich kann auf Arrays und Objects nicht zugreifen was ich müsste.



    Und die Ausgabe ist:

    dumme Frage aber wie greife ich jetzt darauf zu? Bin auch überfragt. Foreach ist eigentlich selbsterklärend aber naja...

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Ich habe mal die API umgeschrieben:


    Im Browser wird mir dann folgendes Resultat gezeigt ( sofern du alles richtig hast, kannst du damit also arbeiten )

    Code
    API Aufruf: http://privatedomain.de/data/2.5/go?lat=47.95&lon=10.2333&appid=e31e7d4ddecb145d369aazzuih811d71c3&units=metric&radius=2
    API Aufruf: http://privatedomain.de/data/2.5/go?lat=47.7833&lon=7.9333&appid=e31e7d4ddecb145d369aazzuih811d71c3&units=metric&radius=2
    API Aufruf: http://privatedomain.de/data/2.5/go?lat=49.4833&lon=11.9833&appid=e31e7d4ddecb145d369aazzuih811d71c3&units=metric&radius=2
    API Aufruf: http://privatedomain.de/data/2.5/go?lat=49.7667&lon=10.4667&appid=e31e7d4ddecb145d369aazzuih811d71c3&units=metric&radius=2