Blame platform-demos/el/weatherGeonames.js.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" type="topic" style="task" id="weatherGeonames.js" xml:lang="el">
Packit 1470ea
  <info>
Packit 1470ea
    <link type="guide" xref="weatherApp.js#main"/>
Packit 1470ea
    <revision version="0.1" date="2012-03-09" status="stub"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Susanna Huhtanen</name>
Packit 1470ea
      <email its:translate="no">ihmis.suski@gmail.com</email>
Packit 1470ea
      <years>2012</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <desc/>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Ελληνική μεταφραστική ομάδα GNOME</mal:name>
Packit 1470ea
      <mal:email>team@gnome.gr</mal:email>
Packit 1470ea
      <mal:years>2012-2015</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Δημήτρης Σπίγγος</mal:name>
Packit 1470ea
      <mal:email>dmtrs32@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2012, 2013</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Μαρία Θουκιδίδου</mal:name>
Packit 1470ea
      <mal:email>marablack3@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2014</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Θάνος Τρυφωνίδης</mal:name>
Packit 1470ea
      <mal:email>tomtryf@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2014, 2015</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>Τοπική βιβλιοθήκη geoNames</title>
Packit 1470ea
  <synopsis>
Packit 1470ea
    

Σε αυτό το τμήμα του οδηγού πρόκειται να κατασκευάσουμε μια τοπική βιβλιοθήκη geoNames χρησιμοποιώντας ασύγχρονες κλήσεις. Οι πληροφορίες του καιρού σε αυτό το παράδειγμα παρέχονται από τον geonames.org και η εφαρμογή χρησιμοποιεί το <link href="http://en.wikipedia.org/wiki/List_of_airports_by_ICAO_code:_E">κωδικούς ICAO</link> για να τοποθετήσει την αίτηση σας για τον καιρό. Για να γράψετε και να εκτελέσετε οι ίδιοι τα παραδείγματα του κώδικα, χρειάζεστε έναν επεξεργαστή για να γράψετε τον κώδικα, τερματικό και GNOME 3 ή μεγαλύτερο εγκατεστημένο στον υπολογιστή σας. Σε αυτόν τον οδηγό θα εξετάσουμε τα παρακάτω μέρη:

Packit 1470ea
Packit 1470ea
    <list>
Packit 1470ea
      <item>

<link xref="#geonamesimports">Τοπική βιβλιοθήκη για λήψη του καιρού</link>

</item>
Packit 1470ea
      <item>

<link xref="#geonamesfunction">Δημιουργώντας συναρτήσεις geoNames</link>

</item>
Packit 1470ea
      <item>

<link xref="#geonamesmethods">Μέθοδοι για το geoNames</link>

</item>
Packit 1470ea
      <item>

<link xref="#geonames.js">geonames.js </link>

</item>
Packit 1470ea
    </list>
Packit 1470ea
  </synopsis>
Packit 1470ea
Packit 1470ea
  <section id="geonamesimports">
Packit 1470ea
  <title>Τοπική βιβλιοθήκη για λήψη του καιρού</title>
Packit 1470ea
  

Για αυτό θα χρειαστούμε ένα νέο αρχείο που θα είναι η τοπική μας βιβλιοθήκη.

Packit 1470ea
  
Packit 1470ea
const Soup = imports.gi.Soup;
Packit 1470ea
const _httpSession = new Soup.SessionAsync();
Packit 1470ea
Soup.Session.prototype.add_feature.call(_httpSession, new Soup.ProxyResolverDefault());
Packit 1470ea
Packit 1470ea
  

Στις πρώτες γραμμές θα εισάγουμε και θα αρχικοποιήσουμε τις απαιτούμενες βιβλιοθήκες για χρήση σε αυτή την τοπική βιβλιοθήκη. Το Soup επεξεργάζεται όλες τις αιτήσεις που πρέπει να κάνουμε με http.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="geonamesfunction">
Packit 1470ea
  <title>Δημιουργία συνάρτησης geoNames</title>
Packit 1470ea
  
Packit 1470ea
function GeoNames(station) {
Packit 1470ea
  this.station = station;
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
GeoNames.prototype = {
Packit 1470ea
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
  

Εδώ δημιουργούμε τη συνάρτηση GeoNames που θα χειριστεί τη λήψη καιρού για μας. Το JavaScript επιτρέπει τη δημιουργία συναρτήσεων που έχουν λίγο μέσα στην αρχή και αργότερα τις επεκτείνει. Αυτό θα γίνει μέσα στα άγκιστρα {} του GeoNames.prototype

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="geonamesmethods">
Packit 1470ea
  <title>Μέθοδοι για GeoNames</title>
Packit 1470ea
  
Packit 1470ea
getWeather: function(callback) {
Packit 1470ea
    var request = Soup.Message.new('GET', 'http://api.geonames.org/weatherIcaoJSON?ICAO=' + this.station + '&username=demo');
Packit 1470ea
    _httpSession.queue_message(request, function(_httpSession, message) {
Packit 1470ea
      if (message.status_code !== 200) {
Packit 1470ea
        callback(message.status_code, null);
Packit 1470ea
        return;
Packit 1470ea
      }
Packit 1470ea
      var weatherJSON = request.response_body.data;
Packit 1470ea
      var weather = JSON.parse(weatherJSON);
Packit 1470ea
      callback(null, weather);
Packit 1470ea
      });
Packit 1470ea
},
Packit 1470ea
Packit 1470ea
getIcon: function(weather){
Packit 1470ea
    switch (weather.weatherObservation.weatherCondition){
Packit 1470ea
    case "drizzle":
Packit 1470ea
    case "light showers rain":
Packit 1470ea
    case "light rain":
Packit 1470ea
      return "weather-showers-scattered.svg";
Packit 1470ea
    case "rain":
Packit 1470ea
      return "weather-showers.svg";
Packit 1470ea
    case "light snow":
Packit 1470ea
    case "snow grains":
Packit 1470ea
      return "weather-snow.svg";
Packit 1470ea
    }
Packit 1470ea
    switch (weather.weatherObservation.clouds){
Packit 1470ea
      case "few clouds":
Packit 1470ea
      case "scattered clouds":
Packit 1470ea
        return "weather-few-clouds.svg";
Packit 1470ea
      case "clear sky":
Packit 1470ea
        return "weather-clear.svg"
Packit 1470ea
      case "broken clouds":
Packit 1470ea
      case "overcast":
Packit 1470ea
        return "weather-overcast.svg";
Packit 1470ea
    }
Packit 1470ea
    return "weather-fog.svg";
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
  

Η πρώτη μέθοδος για το GeoNames είναι η getWeather και η δεύτερη η getIcon. Στην getWeather κάνουμε μια αίτηση http με soup, επεξεργασία σφαλμάτων και έπειτα ανάλυση της πληροφορίας από την αίτηση για μορφή που μπορούμε να χρησιμοποιήσουμε. Στο getIcon συγκρίνουμε απλά τα αποτελέσματα που παίρνουμε από getWeather στον διακόπτη που έχουμε για τη λήψη εικονιδίου που ταιριάζει στον τρέχοντα καιρό. Τώρα που έχουμε την τοπική μας βιβλιοθήκη έτοιμη, είναι καιρός να τη χρησιμοποιήσουμε.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
Packit 1470ea
  <section id="geonames.js">
Packit 1470ea
  <title>geonames.js</title>
Packit 1470ea
  

Εδώ είναι όλος ο κώδικας για την τοπική μας βιβλιοθήκη. Το αρχείο του κυρίως προγράμματος το καλεί ασύγχρονα.

Packit 1470ea
  
Packit 1470ea
const Soup = imports.gi.Soup;
Packit 1470ea
const _httpSession = new Soup.SessionAsync();
Packit 1470ea
Soup.Session.prototype.add_feature.call(_httpSession, new Soup.ProxyResolverDefault());
Packit 1470ea
Packit 1470ea
function GeoNames(station) {
Packit 1470ea
  this.station = station;
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
GeoNames.prototype = {
Packit 1470ea
  getWeather: function(callback) {
Packit 1470ea
    var request = Soup.Message.new('GET', 'http://api.geonames.org/weatherIcaoJSON?ICAO=' + this.station + '&username=demo');
Packit 1470ea
    _httpSession.queue_message(request, function(_httpSession, message) {
Packit 1470ea
      if (message.status_code !== 200) {
Packit 1470ea
        callback(message.status_code, null);
Packit 1470ea
        return;
Packit 1470ea
      }
Packit 1470ea
      var weatherJSON = request.response_body.data;
Packit 1470ea
      var weather = JSON.parse(weatherJSON);
Packit 1470ea
      callback(null, weather);
Packit 1470ea
      });
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
  getIcon: function(weather){
Packit 1470ea
    switch (weather.weatherObservation.weatherCondition){
Packit 1470ea
    case "drizzle":
Packit 1470ea
    case "light showers rain":
Packit 1470ea
    case "light rain":
Packit 1470ea
      return "weather-showers-scattered.svg";
Packit 1470ea
    case "rain":
Packit 1470ea
      return "weather-showers.svg";
Packit 1470ea
    case "light snow":
Packit 1470ea
    case "snow grains":
Packit 1470ea
      return "weather-snow.svg";
Packit 1470ea
    }
Packit 1470ea
    switch (weather.weatherObservation.clouds){
Packit 1470ea
      case "few clouds":
Packit 1470ea
      case "scattered clouds":
Packit 1470ea
        return "weather-few-clouds.svg";
Packit 1470ea
      case "clear sky":
Packit 1470ea
        return "weather-clear.svg"
Packit 1470ea
      case "broken clouds":
Packit 1470ea
      case "overcast":
Packit 1470ea
        return "weather-overcast.svg";
Packit 1470ea
    }
Packit 1470ea
    return "weather-fog.svg";
Packit 1470ea
    }
Packit 1470ea
}
Packit 1470ea
}  
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
</page>