• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

forecast.io mit JS benutzen

tylerendicott

New member
Hi,

ich bin ziemlich neu in Sachen javascript und brauche Hilfe.

Ich hab vor, für eine HTML Seite Temperaturen von forecast.io zu beziehen. Ich hab schon gelesen, dass man sowas via API macht. Allerdings komm ich da von alleine gar nicht weiter.

Ich hab mich da bereits angemeldet und auch schon einen API key bekommen, weiß damit nun aber nichts anzufangen.

Am coolsten wäre es wohl, wenn mir das beziehen von Werten anhand eines Codebeispiels zeigen könnte.
Auch wenn etwas unklar ist, fragt einfach nach und ich versuche es nach bestem Wissen zu beantworten oder erklären.

Ich weiß, das mag alles ziemlich laienhaft klingen aber irgendwo muss ich ja anfangen mir Hilfe zu suchen.

Gruß Tyler
 
scheint so zu sein, dann muss man das serverseitig erledigen. ist bei wetterdaten vielleicht auch sinnvoll.
ändert aber an der herangehensweise nichts
* request an die entsprechende url (mit php über PHP: file_get_contents - Manual)
* string ist im json-format (warum auch immer, wenn man mit clientseitigem js nicht drauf zugreifen kann)
* string parsen (in php über PHP: json_decode - Manual)
 
Wäre der erste Schritt so richtig?

HTML:
  <script type="text/JavaScript">
  function httpGet("https://api.forecast.io/forecast/meinkey/longitude,langitude")
  {
    var xmlHttp = null;

    xmlHttp = new XMLHttpRequest();
    xmlHttp.open( "GET", "https://api.forecast.io/forecast/meinkey/longitude,langitude", false );
    xmlHttp.send( null );
    return xmlHttp.responseText;
  }
  document.write(httpGet("https://api.forecast.io/forecast/meinkey/longitude,langitude"));
  </script>

Ich bekomme da noch nichts ausgegeben, ist aber laut meinem Verständnis auch soweit richtig.

edit: Für meinkey, longitude und langitude habe ich natürlich meinen key und die entsprechenden Längen und Breitengrade angegeben.
 
Zuletzt bearbeitet von einem Moderator:
Das du das serverseitig erledigen musst, wurde dir schon gesagt. Javascript arbeitet clientseitig (Ausnahme: node.js).
Selbst wenn du die SOP irgendwie aushebeln solltest, ist Javascript keine gute Idee, da jeder Nutzer einen API-Aufruf tätigt.

Du hast die API-Doku gelesen?
Your API key must be kept secret. In particular, you should not embed it in JavaScript code that is transmitted to end-users: this enables your end users to accrue large bills using your key that you are responsible for.

Im Klartext: Jeder kann deinen API-Key klauen und du zahlst dafür!!

LG jspit
 
Zuletzt bearbeitet:
Beim Zugriff auf eine externe API bietet sich bei zeitunkritischen Abfragen immer an, die Antworten zu cachen.
Dafür kann z.B. eine serverseitge Datei benutzt werden.
Spart Zeit und der API-Anbieter wird entlastet.

Pseudocode:
Code:
if(eigener Cache nicht mehr aktuell)
    {
     request an die entsprechende url,
     if(requestresult OK) 
        {
         eigener Cache := requestresult;
        }
    }
 
Wäre der erste Schritt so richtig?
Mal abgesehen von den Anmerkungen der anderen, dass du das auf jeden Fall auf dem Server (und damit nicht mit JS) machen sollst (und kannst, da die SOP im Weg steht), hast du einen Syntaxfehler. Der steht, zusammen mit der Hinweis der SOP, in der Fehlerkonsole

Zu document.write:
http://www.w3.org/html/wg/drafts/html/CR/webappapis.html#dynamic-markup-insertion schrieb:
This method has very idiosyncratic behavior. In some cases, this method can affect the state of the HTML parser while the parser is running, resulting in a DOM that does not correspond to the source of the document (e.g. if the string written is the string "<plaintext>" or "<!--"). In other cases, the call can clear the current page first, as if document.open( ) had been called. In yet more cases, the method is simply ignored, or throws an exception. To make matters worse, the exact behavior of this method can in some cases be dependent on network latency, which can lead to failures that are very hard to debug. For all these reasons, use of this method is strongly discouraged.
 
clientseitig geht es mit
Code:
var apiKey = ...
var lat = ...
var lon = ...
var units = ... 
var lang = ... 
$yhr.jsonp('https://api.forecast.io/forecast/'+apiKey+'/'+lat+','lon+'?units='+units+"&lang="+lang+"&callback=JSON_CALLBACK").then(function(response)
{
  return response;
});
 
Das meint Dormilich nicht. Jeder kann den Javasript-Code einsehen, damit auch den API-Key und diesen stehlen/missbrauchen (s.a. #9)
 
Ok, für einen lokalen Webserver im Heimnetz ist das ok.
Ich glaube aber, es gibt nicht nur eine typische Anwendung für so was.
Habe mir für eine öffentliche Page z.B. eine eigene Wettervorhersage auf Basis der openweathermap gebastelt.
Hier hatte wohl jeder seine typische Anwendung im Blick... :)

LG jspit
 
Zurück
Oben