2016-04-25 10 views
0

Ich benutze PHP, um CSV-Dateien von Yahoo Finance basierend auf einer Reihe von Börsenticker greifen.Yahoo Finanzen: 404 Antwort-Code (PHP)

Mein Code ist einfach und lautet wie folgt:

$file = 'http://ichart.yahoo.com/table.csv?s='.$this->symbol.'&a='.$a.'&b='.$b.'&c='.$c.'&d='.$d.'&e='.$e.'&f='.$f.'&g='.$g.'&q=q&y=0&z='.$this->symbol.'&x=.csv'; 
$handle = fopen($file, "r"); 
//Then use fgetcsv to grab data, 
fclose($handle); 

ich die folgende Fehlermeldung erhalten:

Warning: fopen(http://ichart.yahoo.com/table.csv?s=ANA.L&a=2&b=16&c=2016&d=2&e=19&f=2016&g=d&q=q&y=0&z=ANA.L&x=.csv): failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found in y.php on line x

manuell die vorherige URL eingeben (http://ichart.yahoo.com/table.csv?s=ANA.L&a=2&b=16&c=2016&d=2&e=19&f=2016&g=d&q=q&y=0&z=ANA.L&x=.csv) wird die CSV ohne Probleme Datei Ich bin verwirrt, warum ich einen 404-Antwortcode bekomme.

EDIT: Ich habe eine cURL Anfrage vor der Verwendung von fopen hinzugefügt. Dies ist, um nach einem 404-Antwortcode zu suchen. Ich bekomme keine 404-Antwort-Codes von der CURL, aber immer noch den gleichen Fehler wie oben erwähnt.

$curlhandle = curl_init($file); 
curl_setopt($curlhandle, CURLOPT_RETURNTRANSFER, TRUE); 
/* Get the HTML or whatever is linked in $url. */ 
$response = curl_exec($curlhandle); 
/* Check for 404 (file not found). */ 
$httpCode = curl_getinfo($curlhandle, CURLINFO_HTTP_CODE); 

if($httpCode == 404) { 
    echo "404:".$this->symbol."<br>"; 
    curl_close($curlhandle); 
    return null; 
    break; 
} else { 
    curl_close($curlhandle); 
    $handle = fopen($file, "r");       
} 
+0

Wenn ich die angegebene URL als String (direkt) benutze, um die Datei über PHP zu öffnen, erhalte ich keine Fehler. Versuchen Sie zu entkommen und kodieren Sie Ihre Variablen – manniL

Antwort

1

Sie müssen URL kodieren alle Ihre params sonst können Sie eine ungültige URL haben ...

$file = 'http://ichart.yahoo.com/table.csv?s='.urlencode($this->symbol).'&a='.urlencode($a).' //etc 
+0

Hinzugefügt die 'urlencode()' und ich bekomme genau die gleichen Ergebnisse – Calum

+0

fügen Sie Ihren gesamten Code – fire

+0

Ich sehe keine Parameter in dort, die URL-codiert werden müssen. Ich denke nicht, dass das das Problem ist. – Chris

0

Versuchen ichart.yahoo.com-ichart.finance.yahoo.com ändern. d. h.

file = 'http://ichart.finance.yahoo.com/table.csv?s='.$this->symbol.'&a='.$a.'&b='.$b.'&c='.$c.'&d='.$d.'&e='.$e.'&f='.$f.'&g='.$g.'&q=q&y=0&z='.$this->symbol.'&x=.csv'; 
$handle = fopen($file, "r"); 
//Then use fgetcsv to grab data, 
fclose($handle); 
+0

Immer noch genau die gleichen Ergebnisse – Calum

+0

@Calum Das ist ziemlich komisch. Zuerst konnte ich das 404 replizieren, aber jetzt bekomme ich es nicht für beide URLs. – Chris

+0

Glaubst du, es ist etwas Yahoo-Seite? Möglicherweise Drosselung IPs? – Calum