PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Daten verarbeiten mit curl



knuff
16-09-2014, 00:04
Hallo zusammen,

ich arbeite das erste Mal mit curl und weiß nicht genau, wie ich am besten die daten verarbeiten soll. Also ich lese mittels curl eine csv von einer url aus. das funktioniert soweit auch einwandfei.



<?php
function get_data($url)
{
$ch = curl_init();
$timeout = 5;
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/plain'));
$data = curl_exec($ch);
curl_close($ch);
return $data;
}

// Aufruf der Funktion get_data
$str = get_data('url');
echo $str;
?>


ich bekomme nun folgende ausgabe:



Status;SubID 0;"243" 0;"244"


soweit alles gut. das sind genau die daten, die ich haben will. allerdings weiß ich jetzt nicht so genau, wie ich damit arbeiten soll, da die datensätze in einen string komplett hintereinander geklatscht werden. ich hatte gehofft die daten mit curl in ein array auslesen zu können, um dies dann zeilenweise abarbeiten zu können.



Status;SubID
0;"243"
0;"244"



eigentlich sollte es ja so aussehen. es handelt sich ja um eine reihe von datensätzen. in einem array könnte man, diese datensätze nun einfach durchlaufen und mit der datenbank abgleichen. ich habe allerdings keine curl-funktion gefunden, die mir die daten direkt in ein array schreibt.

würde mich über hilfe freuen. danke

gruß
knuff

joocom
01-10-2015, 10:56
Hi,

direkt mit curl kann ich leider auch keine Lösung präsentieren, aber mit Hilfe von str_getcsv wäre es möglich, die eingelesenen Daten nachträglich aufzubereiten, damit sie entsprechend für Datenbankoperationen vorliegen:



// Verarbeitung der CSV-Daten
$csvData = array();
if (!empty($data)) {
$fieldNames = array();
$tmpData = str_getcsv($data, "\n");
foreach($tmpData as $idx => $row) {
// Die erste Zeile enthaelt die Feldnamen der Werte
if ($idx == 0) {
$fieldNames = str_getcsv($row, ';');
} else {
$row = str_getcsv($row, ';');
// Sofern Daten fuer die Zeile vorhanden, diese uebernehmen
if (!empty($row)) {
$tmp = array();
foreach ($fieldNames as $fIdx => $fName) {
$tmp[$fName] = $row[$fIdx];
}
if (!empty($tmp)) {
$csvData[] = $tmp;
}
}
}
}
}


Eine mögliche Alternative wäre vielleicht auch fgetcsv, die ich hier vorgestellt (http://www.joocom.de/blog/csv-von-website-in-php-einlesen) habe.

fork
01-10-2015, 22:47
Sieht für mich nach einer simplen Split Geschichte aus.



$pairs = preg_split("/ /",$curl_data)
foreach $pairs as $one_pair {
list ( $e1,$e2 ) =
preg_split("/;/",$one_pair);
mach_was($e1,$e2);
}