Seite auslesen und abspeichern

Sasser

Erfahrenes Mitglied
Hallo Leutz!

Ich versuche eine Seite auszulesen. Leider wurde die Seite nicht so formatiert, dass jeder Artikel in einer Zeile ist, sondern einfach hintereinander weg geschrieben und ab und zu kommt ein Zeilenumbruch und durch "|" getrennt. Immer 40 Teile gehören zu einem Artikel.

Folgende Lösung funktioniert aber nur teilweise.

PHP:
$shopcontent = fopen ( 'www.test.de/data.php', 'r' );
while (! feof ( $shopcontent )) {
	$shop_ID ++;
	if ($shop_ID > "1") {
		$shopdata = explode ( ";", fgets ( $shopcontent ) );
		$itemcontent = fopen ( $shopdata [5], 'r' );
		$itemsdata = explode ( "|", file_get_contents ( $itemcontent ) );
		foreach ($itemsdata as $itemdata) {
			$i ++;
			if ($i == "1") {
				$data [item] = $itemdata;
			} elseif ($i == "2") {
				$data [name] = $itemdata;
			} elseif ($i == "3") {
				$data [info] = $itemdata;
			} elseif ($i == "5") {
				$data [image] = $itemdata;
			} elseif ($i == "6") {
				$data [url] = $itemdata;
			} elseif ($i == "12") {
				$data [price] = $itemdata;
			} elseif ($i == "14") {
				$data [currency] = $itemdata;
			} elseif ($i == "17") {
				$data [categorie] = $itemdata;
			} elseif ($i == "34") {
				$data [shippingcosts] = $itemdata;
			}
			if ($i == "40") {
				mysql_query ( "INSERT INTO items (`item`, `name`, `info`, `price`, `shippingcosts`, `currency`, `image`, `url`, `categorie`) VALUES ('" . $data [item] . "', '" . $data [name] . "', '" . $data [info] . "', '" . $data [price] . "', '" . $data [shippingcosts] . "', '" . $data [currency] . "', '" . $data [image] . "', '" . $data [url] . "', '" . $data [categorie] . "')" );
				$data = "";
				$i = "0";
			}
		}
	}
}
fclose ( $shopcontent );
 
Zuletzt bearbeitet:
Es wäre natürlich hilfreicher zu erfahren, was er nun teilweise NICHT macht.
Und wenn du vielleicht mal einen Teil-String mit 2 Produkten darstellen könntest, wäre das auch klasse.

Natürlich gäbe es auch eine Möglichkeit die Produkte einfacher zu erhalten, wenn du Einfluss auf die Ausgabe der Datei nehmen könntest und 2 Produkte bspw. durch "||" trennen könntest.

Dann explodest du einmal quasi nach den Produkten und dann jedesmal für dessen Eigenschaften...
 
Ich habe leider gar keine Chance diese Formatierung zu ändern!

Die Artikel sind folgendermaßen formatiert:

1223344|Stift Blau| Das ist ein
blauer Stift| ... |

Normalerweise hätte ich ja einfach nur jede Zeile als Datensatz nehmen können und dann exploden. Aber leider komme ich nicht auf eine vernünftige Lösung bei dieser Formatierung.
 
Und wie sieht es aus, wenn Du allen Zeilenumbruch löscht? Wird es damit einfacher? Danach hättest Du ein einfaches Array mit "|"- explode und lässt das einfach durchgehen und wenn anz/40==int(anz/40), einen neuen Datensatz beginnen. Wie sieht es aus, wenn Du -anstatt gleich in die DB zu schreiben- erstmal in ein Array schreibst, dieses mal ausgibst und schaust, was denn falsch läuft..

Dein Problem ist nicht klar ersichtlich. Wir kennen nur eine theoretische Struktur, die aber scheinbar doch nicht so einfach sein soll.
 
Also nochmal von vorn anfangen. Ich möchte gern generell die erste Zeile überspringen, aber er zeigt mir trotzdem die erste Zeile an!?

PHP:
$shopcontent = fopen ( 'DOMAIN', 'r' );
while (! feof ( $shopcontent )) {
	$i ++;
	if ($i > "1") {
		$shopdata = explode ( ";", fgets ( $shopcontent ) );
		echo $shopdata [5] . "<br>";
	}
}
fclose ( $shopcontent );
 
Wie wärs, wenn Du die Seite erstmal komplett lädst (in ein String packst), anstatt Zeile für Zeile.
Macht's das nicht einfacher?

$i erstmal auf 0 setzen, quasi ein reinit vor dem while. Lässt er die erste Zeile aus, wenn Du 2 einträgst?

mfg chmee
 
Also die Sache ist, dass ich vor dem Abruf der Artikel erst einmal eine Liste mit dem Downloadlink hole.

In $shopdata [5] ist der Link zur Liste mit den Artikeln.

Nein, bei 2 lässt er die erste auch nicht aus. Ich möchte diese nur nicht übergeben, weil darin einfach nur "URL" steht.
 
Eigentlich agiert php mit Variablen echt variabel, aber hast Du schon versucht die Anführungsstriche im Vergleich wegzunehmen?
Also anstatt "1" einfach nur 1 ?

mfg chmee
 
Ja habe ich versucht. Ich habs jetzt aber erst einmal anders gemacht:

PHP:
$shopcontent = fopen ( 'http://publisher.affili.net/Download/AutoDownload.aspx?PartnerID=' . $affilinet_ID . '&csvPW=' . $affilinet_CSV_Password, 'r' );
while (! feof ( $shopcontent )) {
	$shopdata = explode ( ";", fgets ( $shopcontent ) );
	if ($shopdata [5] != "DownloadLink") {
		echo $shopdata [5] . "<br>";
	}
}
fclose ( $shopcontent );

Jetzt zeigt er mir jedenfalls die Linkliste korrekt an.

Nun muss ich zu jedem Link den Quellcode auslesen, alle Zeilenumbrüche entfernen und irgendwie also Datensätze einlesen...
 
So, ich habs nun endlich nach langem hin und her geschafft und es funktioniert:

PHP:
$urls = fopen ( 'data.php', 'r' );
while (! feof ( $urls )) {
	$shop = explode ( ";", fgets ( $urls ) );
	if ($shop [5] != "DownloadLink") {
		$items = file_get_contents ( $shop [5], 'r' );
		$rows = explode ( "\n", $items );
		foreach ($rows as $row) {
    		if ($row != "") {
    			$data = explode ( "|", $row );
    			mysql_query ( "INSERT INTO items (`name`, `info`, `price`, `shippingcosts`, `currency`, `image`, `url`, `categorie`) VALUES ('" . $data [1] . "', '" . $data [2] . "', '" . $data [11] . "', '" . $data [33] . "', '" . $data [13] . "', '" . $data [4] . "', '" . $data [5] . "', '" . $data [16] . "')" );
    		}
		}
	}
}
fclose ( $urls );


Allerdings bricht file_get_contents (); nach einiger Zeit ab, da warscheinlich die Datei zu lange braucht um geladen zu werden!? Wie kann man dem entgegenwirken?
 
Zuletzt bearbeitet:
Zurück