2017-04-20 2 views
0

Ich muss eine gezippte .csv-Datei von dieser Website herunterladen. http://www.phrfsocal.org/web-lookup-2/ Die Datei ist der Link Daten herunterladen über der Tabelle auf der rechten Seite. Der Gotcha ist der Link wird dynamisch erstellt. Also muss ich es zuerst extrahieren.PHP curl Herunterladen einer gezippten CSV von einer Caspio-Website

Dieser Teil scheint gut zu funktionieren. Ich bekomme diesen Link für die href. https://b6.caspio.com/dp.asp?appSession=68982476236455965042483715808486764445346819370685922723164994812296661481433499615115137717633929851735433386281180144919150987&RecordID=&PageID=2&PrevPageID=&cpipage=&download=1

Als ich diesen Link in einem neuen Browser-Tab einfügen, lädt der Browser die Zip-Datei, um die csv enthält, die ich interessiert bin.

Wenn jedoch ein ROTATION Verwendung zu versuchen, den Reißverschluss zu bekommen, es statt Ruft den HTML-Code der Tabelle unterhalb des Links ab. Ich kann mir nicht vorstellen, wie ich die .zip-Datei entpacken soll. Unten ist mein Code der erste Teil findet den Link und scheint zu arbeiten.

Der zweite Teil ist wo ich Probleme habe.

PS Ich habe vom Besitzer dieser Seite die Erlaubnis, diese Daten jeden Abend mit einem Cron-Job herunterzuladen. Dank im Voraus, Dave

$url = "http://www.phrfsocal.org/web-lookup-2/"; 

// url to the dynamic content doesn't seem to change. 
$url = "https://b6.caspio.com/dp.asp?AppKey=0dc330000cbc1d03fd244fea82b4"; 

$header = get_web_page($url); 
// Find the location of the Download Data link and extract the href  
$strpos = strpos($header['content'], 'Download Data'); 
$link = substr($header['content'], $strpos, 300); 
$link = explode(" ", $link); 
$link = explode('"', $link[2]); 
$url1 = $link[1]; 

print_r($url1); 
print "<p>"; 

// Now Go get the zip file. 
$zipFile = "temp/SoCalzipfile.zip"; // Local Zip File Path 
$zipResource = fopen($zipFile, "w+"); 
// Get The Zip File From Server 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url1); 
curl_setopt($ch, CURLOPT_FAILONERROR, true); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_AUTOREFERER, true); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_FILE, $zipResource); 
$page = curl_exec($ch); 
if (!$page) { 
    echo "Error :- " . curl_error($ch); 
} 
curl_close($ch); 

echo "zip file recieved"; 
/* Open the Zip file */ 
$zip = new ZipArchive; 
$extractPath = "temp"; 
if ($zip->open($zipFile) != "true") { 
    echo "Error :- Unable to open the Zip File"; 
}emphasized text 
/* Extract Zip File */ 
$zip->extractTo($extractPath); 
$zip->close(); 

Antwort

1

Der folgende Code wird die Zip-Datei herunterladen und in den angegebenen Ordner entpacken. Stellen Sie sicher, dass der Ordner beschreibbar ist. Stellen Sie in diesem Beispiel sicher, dass der temporäre Ordner Schreibrechte besitzt.

Sie müssen auch nicht die HTML-Version der Seite holen, um den Link zu extrahieren. Ich habe mit den URLs herumgespielt und Sie können die Zip-Datei für jede Seite mit der cpipage Variable abrufen. Sie können die Variable $page_num ändern, um den Zip von der angegebenen Seite zu erhalten.

$page_num = 1; 

$url = 'https://b6.caspio.com/dp.asp?AppKey=0dc330000cbc1d03fd244fea82b4&RecordID=&PageID=2&PrevPageID=&cpipage=' .$page_num. '&download=1'; 

$zipFile = "temp/SoCalzipfile.zip"; // Local Zip File Path 
$zipResource = fopen($zipFile, "w"); 
// Get The Zip File From Server 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_FAILONERROR, true); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_AUTOREFERER, true); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER,true); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_FILE, $zipResource); 
$page = curl_exec($ch); 
if(!$page) { 
echo "Error :- ".curl_error($ch); 
} 
curl_close($ch); 


$zip = new ZipArchive; 
$extractPath = "temp"; 
if($zip->open($zipFile) != "true"){ 
echo "Error :- Unable to open the Zip File"; 
} 
/* Extract Zip File */ 
$zip->extractTo($extractPath); 
$zip->close(); 
+0

Chris, das funktioniert super. Tatsächlich enthält die gezippte .csv-Datei auf allen Seiten alle Daten. Vielen vielen Dank. – davewhirlwind

+0

Kein Problem, froh, dass ich helfen konnte :) – Chris

Verwandte Themen