2017-08-24 2 views
12

Ich habe einen Dienst, der eine Yahoo! Finanztabelle yahoo.finance.xchange. Heute Morgen habe ich bemerkt, dass es nicht mehr funktioniert, weil Yahoo! begann, einen Fehler zurückzugeben, der sagt:Keine Definition gefunden für Tabelle yahoo.finance.xchange

{ 
    "error": { 
    "lang": "en-US", 
     "description": "No definition found for Table yahoo.finance.xchange" 
    } 
} 

This is the request URL. Interessante Tatsache: Wenn ich versuche, die Abfrage mehrmals zu aktualisieren, bekomme ich manchmal eine korrekte Antwort zurück, aber das passiert sehr selten (wie in 10% der Fälle). Tage zuvor war alles in Ordnung.

Bedeutet dies, Yahoo API ist oder bin ich etwas fehlt, weil die API geändert wurde? Ich würde jede Hilfe schätzen.

+0

Haben gleiche Problem Neuigkeiten gibt? – Bukashk0zzz

+0

Fast genau das gleiche Problem hier .. Ich versuche, rss-feed zu holen. Es hat bis jetzt einwandfrei funktioniert. Schlag auf die "irgendwelche Nachrichten?". – MikkoS

+1

sieht aus wie sie gerade diese API getötet haben. nicht zu fassen. – DolceVita

Antwort

4

Da ich das gleiche Problem habe und dass es heute auch damit begonnen hat, dass andere genau zur gleichen Zeit posten, und dass es immer noch die meiste Zeit funktioniert, ist die einzige Erklärung, die ich finden kann, dass sie haben einige zufällige Datenbankfehler an ihrem Ende und wir können hoffen, dass dies bald gelöst wird. Ich habe auch eine Fehlerquote von 20% beim Aktualisieren der Seite der Abfrage.

Meine Vermutung ist, dass sie viele Server verwenden, um die Anfragen zu behandeln (sagen wir 8) und dass eine von ihnen leer ist oder diese Tabelle aus irgendwelchen Gründen nicht, so dass der Fehler, wenn es die Abfrage an diesen Server leitet ist zurück gekommen.

Temporäre Lösung: Ändern Sie einfach Ihr Skript, um 3-4 Mal zu wiederholen. Das hat es für mich getan, denn unter 5 Versuchen gelingt mindestens einer.

+0

Ich teile ähnliche Theorie. Da dies die Endnutzer betrifft, würde ich davon ausgehen, dass es Twitter-Feeds von Yahoo! erzähl uns davon. Ich habe keine gefunden. – Phil

+0

Ja, diese Lösung ist eigentlich nicht schlecht. Und ich würde es als permanent verlassen. Ich mache max 10-mal wiederholen, und wenn es die ganze Zeit ausfällt, ich Rückfall auf einem Tag alten Backup. Die Sicherung kann entweder im Arbeitsspeicher oder in einer Datei oder DB serialisiert und bei einem Fallback deserialisiert werden. Ich hatte nie Vertrauen zu Yahoo. – walv

-3

Ich fand Lösung, in meinem Fall, ändern Sie einfach http zu https und alles funktioniert.

+0

Ich fand heraus, es funktioniert einfach zufällig –

+0

Vor allem in meinem Beitrag zur Verfügung gestellt ich die URL mit https-Schema. Zweitens - nein, es funktioniert nicht, es funktioniert zufällig. 80% Anfragen werden abgelehnt. – DolceVita

-1

Ich habe das gleiche Problem bekommt.

Ich brauche Wechselkurse in meiner App, also habe ich mich dafür entschieden, stattdessen die currencylayer.com API zu verwenden - sie geben 168 Währungen, einschließlich Edelmetalle und Bitcoin.

Ich habe auch einen Microservice mit webtask.io geschrieben, um die Raten von currencylayer zu cachen und Cross-Rate-Berechnungen durchzuführen.

Und ich habe eine blog post darüber geschrieben

Check it out, wenn Sie Ihre eigene Micro laufen, dann ist es ziemlich einfach

1

ich dieses Problem lösen, indem sie anstelle der Verwendung quote.yahoo.com query.yahooapis.com Dienst. Hier ist mein Code:

function devise($currency_from,$currency_to,$amount_from){ 
    $url = "http://quote.yahoo.com/d/quotes.csv?s=" . $currency_from . $currency_to . "=X" . "&f=l1&e=.csv"; 
    $handle = fopen($url, "r"); 
    $exchange_rate = fread($handle, 2000); 
    fclose($handle); 
    $amount_to = $amount_from * $exchange_rate; 
    return round($amount_to,2); 
} 
+0

Versucht dies. Haben Sie die Antwort, dass Yahoo heruntergefahren, dass die API als sie sich gegen ihre ToS verwendet wurde. „Es ist uns nicht entgangen, dass dieser Dienst in Verletzung der Yahoo Nutzungsbedingungen als solche verwendet wird, wird der Dienst eingestellt wird für. Alle zukünftigen Markt- und Aktien-Datenrecherchen finden Sie unter finance.yahoo.com. " – DocRattie

0

gleichen Fehler, ich wandern zu http://finance.yahoo.com hier C# Beispiel

private static readonly ILog Log = LogManager.GetCurrentClassLogger(); 
    private int YahooTimeOut = 4000; 
    private int Try { get; set; } 

    public decimal GetRate(string from, string to) 
    { 
     var url = 
      string.Format(
       "http://finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s={0}{1}=X", from, to); 

     var request = (HttpWebRequest)WebRequest.Create(url); 
     request.UseDefaultCredentials = true; 
     request.ContentType = "text/csv"; 
     request.Timeout = YahooTimeOut; 
     try 
     { 
      using (var response = (HttpWebResponse)request.GetResponse()) 
      { 
       var resStream = response.GetResponseStream(); 
       using (var reader = new StreamReader(resStream)) 
       { 
        var html = reader.ReadToEnd(); 
        var values = Regex.Split(html, ","); 
        var rate = Convert.ToDecimal(values[1], new CultureInfo("en-US")); 
        if (rate == 0) 
        { 
         Thread.Sleep(550); 
         ++Try; 
         return Try < 5 ? GetRate(from, to) : 0; 
        } 
        return rate; 

       } 
      } 
     } 
     catch (Exception ex) 
     { 
      Log.Warning("Get currency rate from Yahoo fail " + ex); 
      Thread.Sleep(550); 
      ++Try; 
      return Try < 5 ? GetRate(from, to) : 0; 
     } 
    } 
Verwandte Themen