Création de clients [Vala et Gtk 3]

Normalement sous Linux nous manquons pas mal d'applications, ou de clients de certains services qui sortent beaucoup plus tôt pour d'autres plates-formes, car dans ce tutoriel nous verrons comment créer un client (ce sera une vision bien au-dessus), en utilisant l'API REST avec valeur (et gtk 3).

API

Je ne vais pas expliquer ce qu'est une API, ni ce qu'est l'API REST (vous pouvez trouver beaucoup d'informations dans google), je dirai simplement qu'en gros nous allons faire des requêtes (GET ou POST) et ça va renvoie une réponse au format JSON.

Pour le tutoriel j'ai décidé d'utiliser l'API qu'il nous fournit Marvel (voir la documentation de l'API), qui nous fournit une série d'informations sur les bandes dessinées, les personnages ...

Pour y accéder, nous avons besoin d'une clé, que nous pouvons obtenir en nous enregistrant, une fois obtenue, nous avons une limite de 3000 requêtes.

Voyons un exemple de l'API, pour appeler cette api, nous devons utiliser nos clés (nous en avons une publique et une privée):

m

Pour voir cet exemple simple, nous pouvons utiliser www.md5.net où on met 1 "+" keyprivate "+" keypublic et qui génère le hachage, on peut appeler comme il le met dans l'image. Nous aurons la réponse (dans ce cas il s'agit de voir les personnages):

il y a une erreur dans l'image, l'appel serait http://gateway.marvel.com/v1/public/ des bandes dessinées ...

mm

Il existe des programmes et des plugins pour les navigateurs qui faciliteront la vue de json:

m1

On voit qu'il nous donne le nom, la description, une vignette (image du personnage) ...

développement web Marvel

Traiter JSON avec vala (Parseando).

Je n'expliquerai pas non plus quels sont les formats json, vous pouvez trouver des informations en ligne. On peut trouver un exemple simple made in Vala ici !.

Tout d'abord, nous installons la bibliothèque json-glib au cas où nous ne l'aurions pas installée:

sudo apt-get install libjson-glib-1.0-0 libjson-glib-1.0-0-dev

Nous installerons également libsoup:

sudo apt-get install libsoup-2.4 libsoup2.4-dev
Je ne mettrai ni la clé publique ni le hash aux requêtes

Tout d'abord, nous importons les bibliothèques que nous utiliserons:

en utilisant de la soupe; en utilisant Json; en utilisant Gtk;

Envoi d'une demande:

var uri = "http://gateway.marvel.com/v1/public/comics?dateRange=2014-16-03%2C2014-16-03&orderBy=-onsaleDate&limit=10&ts=1&apikey=123&hash=555224458"; var session = new Soup.SessionSync (); var message = new Soup.Message ("GET", uri); session.send_message (message);

L'URL nous montrera un maximum de 10 bandes dessinées qui sont sorties entre 2 dates (00-03-2014, 16-03-2014).
Tout d'abord, nous créons une session, puis nous construisons la requête de type GET et l'envoyons.

Analyse de json:

var root_object = parser.get_root () .get_object ();

obtient l'objet principal, c'est-à-dire tout le code json.

var response = root_object.get_object_member ("données"); var résultats = response.get_array_member ("résultats");

Nous pouvons attraper

Traitez le code:

foreach (var geonode dans results.get_elements ()) {var geoname = geonode.get_object (); stdout.printf ("% f \ n% s \ n% s \ n \ n", geoname.get_string_member ("id"), geoname.get_string_member ("name"), geoname.get_double_member ("description")); }

Vous pouvez voir des exemples ici !.

Affichage des informations:

Ici, nous entrons déjà à notre goût comment afficher les informations, pour télécharger les images, nous pouvons utiliser cette méthode:

public statique asynchrone Gdk.Pixbuf? get_img (chaîne url) {Gdk.Pixbuf? pix = nul; var fichier = File.new_for_uri (url); essayez {GLib.InputStream @input_stream = yield file.read_async (Priority.DEFAULT, null); pix = yield new Gdk.Pixbuf.from_stream_at_scale_async (input_stream, 800, 600, true, null); } catch (Erreur e) {avertissement (e.message); } return pix; }

Étant une méthode qui est exécutée dans un autre thread (asynchrone) lors de son appel, nous devons le faire de cette façon:

get_img.begin (img_url, (obj, res) => {var pix = get_img.end (res);});

Où img_url est l'url de l'image que nous obtenons du json.

Pour compiler aremos:

valac --pkg gtk + -3.0 --pkg libsoup-2.4 --pkg json-glib-1.0 nom_utilisateur.vala
Nous pouvons trouver de la documentation pour json-glib ici !.

Pourboires

Quelques conseils qui peuvent nous aider à créer notre client / application:

Indicateur d'application

AppIndicator est une bibliothèque qui nous permet de mettre notre programme en tant qu'indicateur dans le panneau supérieur (à la fois dans Elementary OS et Ubuntu).

Installation de appindicator3-0.1

sudo apt-get install libappindicator3-dev

Compilation:

valac --pkg gtk + -3.0 --pkg indicateur3-0.1 program.vala

Si vous obtenez une erreur, cela peut être dû au fait que vous avez une version plus récente de appindicator, dans ce cas, allez dans / usr / share / vala / vapi et vous verrez quelle est votre version.

Capture du 2014/02/23 15:30:57

On peut trouver un exemple dans le Site Web de développement Ubuntu.

Un petit exemple:

Capture du 2014/02/23 17:04:52

var indicateur = new Indicator ("win.title", "office-address-book", IndicatorCategory.APPLICATION_STATUS); indicateur.set_status (IndicatorStatus.ACTIVE); var menu = nouveau Gtk.Menu (); var item = new Gtk.MenuItem.with_label ("Ajouter un nouveau contact"); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // CreateContact ();}); item.show (); menu.append (élément); item = new Gtk.MenuItem.with_label ("Supprimer le contact"); item.show (); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // DeleteContact ();}); menu.append (élément); indicateur.set_menu (menu);

Imágenes

Mettez une icône dans notre application:

Nous partons du constructeur de la classe Gtk.Window:

try {// Répertoire de l'image this.icon = new Gdk.Pixbuf.from_file ("fcbb.png"); } catch (Erreur e) {stderr.printf ("erreur:% s \ n", e.message); }

Capture du 2014/02/23 15:44:00

Image simple

Une simple image en vala que l'on peut mettre par exemple dans un layout.

image = nouveau Gtk.Image (); image.set_from_file ("fcb.png");

fcb

Opinion

Utiliser vala et gtk pour les clients? non, de mon point de vue il est bien meilleur et plus facile d'utiliser c ++ et Qt (QML), il est en attente de faire un article pour faire des clients en QML.


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.

  1.   cadres dit

    merci charnel 😀, c'est formidable de voir ce que peuvent faire "quelques lignes de code" quand on a des connaissances. l'exemple donne de nombreuses idées pour d'autres choses 😀

  2.   éliotime3000 dit

    Très bons conseils, mon frère.

    Voyez si je peux en faire un.