Crearea clienților [Vala și Gtk 3]

În mod normal, în Linux ne lipsesc destul de multe aplicații sau clienți ai unor servicii care apar mult mai devreme pentru alte platforme, deoarece în acest tutorial vom vedea cum să creăm un client (va fi o viziune mult mai sus), prin utilizarea API REST cu valoare (și gtk 3).

API

Nu am de gând să explic ce este un API sau ce este API-ul REST (puteți găsi o mulțime de informații în google), voi spune doar că aproximativ vom face câteva solicitări (GET sau POST) și va fi returnează un răspuns în format JSON.

Pentru tutorial am decis să folosesc API-ul pe care ni-l oferă Minune (vezi documentația api), care ne oferă o serie de informații despre benzi desenate, personaje ...

Pentru a-l accesa avem nevoie de o cheie, pe care o putem obține prin înregistrare, odată obținută avem o limită de 3000 de cereri.

Să vedem un exemplu de API, pentru a numi acest API trebuie să folosim cheile noastre (avem una publică și una privată):

m

Pentru a vedea acest exemplu simplu îl putem folosi www.md5.net unde punem 1 "+" keyprivate "+" keypublic și care generează hash, putem apela așa cum se pune în imagine. Vom primi răspunsul (în acest caz este să vedem personajele):

există o eroare în imagine, apelul ar fi http://gateway.marvel.com/v1/public/ benzi desenate ...

mm

Există programe și pluginuri pentru browsere care vor facilita vizualizarea json:

m1

Putem vedea că ne oferă numele, descrierea, o miniatură (imagine de caractere) ...

dezvoltare web minune

Tratarea JSON cu vala (Parseando).

Nici nu voi explica care sunt formatele JSON, puteți găsi informații online. Putem găsi un exemplu simplu realizat în Vala aici.

În primul rând instalăm biblioteca json-glib în cazul în care nu o avem instalată:

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

Vom instala și libsoup:

sudo apt-get install libsoup-2.4 libsoup2.4-dev
Nu voi pune nici cheia publică, nici hash-ul la cereri

În primul rând, importăm bibliotecile pe care le vom folosi:

utilizarea supei; folosind Json; folosind Gtk;

Trimiterea unei cereri:

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 (mesaj);

Adresa URL ne va arăta maximum 10 benzi desenate care au apărut între 2 date (00-03-2014, 16-03-2014).
În primul rând creăm o sesiune, apoi construim cererea de tip GET și o trimitem.

Analizarea lui json:

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

obține obiectul principal, adică tot codul JSON.

var response = root_object.get_object_member („date”); var results = response.get_array_member ("rezultate");

Putem prinde

Procesați codul:

foreach (var geonode in 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 ("nume"), geoname.get_double_member ("descriere")); }

Puteți vedea exemple aici.

Afișarea informațiilor:

Aici intrăm deja pe placul nostru cum să afișăm informațiile, pentru a descărca imaginile putem folosi această metodă:

public static async Gdk.Pixbuf? get_img (url șir) {Gdk.Pixbuf? pix = nul; var fișier = File.new_for_uri (url); încercați {GLib.InputStream @input_stream = randament file.read_async (Priority.DEFAULT, nul); pix = randament Gdk.Pixbuf.from_stream_at_scale_async nou (input_stream, 800, 600, adevărat, nul); } catch (Error e) {avertisment (e.message); } return pix; }

Fiind o metodă care se execută într-un alt fir (asincron) atunci când îl apelăm, trebuie să o facem astfel:

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

Unde img_url este adresa URL a imaginii pe care o obținem de la json.

Pentru a compila aremos:

valac --pkg gtk + -3.0 --pkg libsoup-2.4 --pkg json-glib-1.0 nume personalizat.vala
Putem găsi documentație pentru json-glib aici.

sfaturi

Câteva sfaturi care ne pot ajuta să ne creăm clientul / aplicația:

AppIndicator

AppIndicator este o bibliotecă care ne permite să plasăm programul nostru ca indicator în panoul superior (atât în ​​Elementary os, cât și în Ubuntu).

Instalarea appindicator3-0.1

sudo apt-get install libappindicator3-dev

Compilare:

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

În cazul în care primiți o eroare, se poate datora faptului că aveți o versiune mai nouă de appindicator, în acest caz accesați / usr / share / vala / vapi și veți vedea care este versiunea dvs.

Captură din 2014-02-23 15:30:57

Putem găsi un exemplu în Site de dezvoltare Ubuntu.

Un mic exemplu:

Captură din 2014-02-23 17:04:52

var indicator = new Indicator ("win.title", "office-address-book", IndicatorCategory.APPLICATION_STATUS); indicator.set_status (IndicatorStatus.ACTIVE); var menu = new Gtk.Menu (); var item = new Gtk.MenuItem.with_label ("Adăugați un contact nou"); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // CreateContact ();}); item.show (); menu.append (item); item = new Gtk.MenuItem.with_label ("Ștergeți contactul"); item.show (); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // DeleteContact ();}); menu.append (item); indicator.set_menu (meniu);

Imagini

Puneți o pictogramă în aplicația noastră:

Începem de la constructorul clasei Gtk.Window:

încercați {// Directorul imaginii this.icon = new Gdk.Pixbuf.from_file ("fcbb.png"); } catch (Error e) {stderr.printf ("error:% s \ n", e.message); }

Captură din 2014-02-23 15:44:00

Imagine simplă

O imagine simplă în vala pe care o putem pune de exemplu într-un aspect.

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

fcb

vedere

Folosiți vala și gtk pentru clienți? nu, din punctul meu de vedere, este mult mai bine și mai ușor să folosiți c ++ și Qt (QML), este în așteptare să faceți un articol pentru a crea clienți în QML.


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   marcos el a spus

    mulțumesc carnal 😀, este minunat să vezi ce pot face „câteva linii de cod” atunci când ai cunoștințe. exemplul oferă multe idei pentru alte lucruri 😀

  2.   eliotime3000 el a spus

    Sfaturi foarte bune, frate.

    Vezi dacă pot face una.