Skep kliënte [Vala en Gtk 3]

Normaalweg mis ons in Linux 'n hele paar toepassings, of kliënte van sekere dienste wat baie vroeër op ander platforms verskyn, want in hierdie handleiding sal ons sien hoe u 'n kliënt kan skep (dit sal 'n visie ver bo wees) deur die REST te gebruik API met waarde (en gtk 3).

API

Ek gaan nie verduidelik wat 'n API is of wat die REST API is nie (u kan baie inligting op Google vind), ek sal net sê dat ons ongeveer 'n paar versoeke sal doen (GET of POST) en stuur 'n antwoord in JSON-formaat terug.

Vir die tutoriaal het ek besluit om die API wat dit bied, te gebruik Marvel (sien api-dokumentasie), wat ons 'n reeks inligting verskaf oor strokiesprente, karakters ...

Om toegang daartoe te kry, benodig ons 'n sleutel wat ons kan kry deur te registreer. Ons het 'n limiet van 3000 versoeke sodra dit verkry is.

Kom ons kyk na 'n voorbeeld van die API, om hierdie API te noem, moet ons gebruik maak van ons sleutels (ons het 'n openbare en 'n private):

m

Om hierdie eenvoudige voorbeeld te sien, kan ons gebruik www.md5.net waar ons 1 "+" keyprivate "+" sleutelbord plaas en wat die hash genereer, kan ons dit noem soos dit in die afbeelding staan. Ons sal die antwoord kry (in hierdie geval is dit om die karakters te sien):

daar is 'n fout in die beeld. Die oproep sou wees: http://gateway.marvel.com/v1/openbare/ strokiesprente ...

mm

Daar is programme en inproppe vir blaaiers wat die siening van json vergemaklik:

m1 Ons kan sien dat dit ons die naam, die beskrywing, 'n kleinkiekie (beeld van die karakter) gee ...

verwonder webontwikkeling

Behandeling van JSON met vala (Parseando).

Ek sal ook nie verduidelik wat die formate is nie json, kan u inligting aanlyn vind. Ons kan 'n eenvoudige voorbeeld vind wat in Vala gemaak is hier.

Eerstens installeer ons die json-glib-biblioteek as ons dit nie geïnstalleer het nie:

sudo apt-kry installeer libjson-glib-1.0-0 libjson-glib-1.0-0-dev

Ons sal ook libsoup installeer:

sudo apt-kry installeer libsoup-2.4 libsoup2.4-dev
Ek sal nie die publieke sleutel of die hash op die versoeke plaas nie

Eerstens voer ons die biblioteke in wat ons gaan gebruik:

gebruik Sop; gebruik Json; gebruik Gtk;

Stuur 'n versoek:

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 sessie = nuwe Soup.SessionSync (); var boodskap = nuwe Soup.Message ("GET", uri); session.send_message (boodskap);

Die url sal ons maksimum tien strokiesprente wys wat tussen twee datums verskyn het (10-2-00, 03-2014-16).
Eerstens skep ons 'n sessie, dan bou ons die versoek van die GET-tipe en stuur dit.

Ontleed json:

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

kry die hoofvoorwerp, dws al die json-kode.

var response = root_object.get_object_member ("data"); var resultate = respons.get_array_member ("resultate");

Ons kan vang

Verwerk die kode:

voorgrond (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 ("name"), geoname.get_double_member ("beskrywing")); }

U kan voorbeelde sien hier.

Vertoon die inligting:

Hier voer ons reeds in hoe ons die inligting wil wys, om die beelde af te laai, kan ons hierdie metode gebruik:

openbare statiese async Gdk.Pixbuf? get_img (string url) {Gdk.Pixbuf? pix = nul; var-lêer = File.new_for_uri (url); probeer {GLib.InputStream @input_stream = opbrengs file.read_async (Prioriteit.DEFAULT, null); pix = lewer nuwe Gdk.Pixbuf.from_stream_at_scale_async (input_stream, 800, 600, true, null); } vang (Fout e) {waarskuwing (e. boodskap); } terugkeer pix; }

Omdat ons 'n metode is wat in 'n ander draad (asynchroon) uitgevoer word, moet ons dit so doen:

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

Waar img_url die url van die beeld is wat ons van die json kry.

Om aremo's saam te stel:

valac --pkg gtk + -3.0 --pkg libsoup-2.4 --pkg json-glib-1.0 persoonlike naam.vala
Ons kan dokumentasie vir json-glib vind hier.

Wenke

'N Paar wenke wat ons kan help om ons kliënt / toepassing te skep:

Toepassingsaanwyser

AppIndicator is 'n biblioteek waarmee ons ons program as 'n aanduiding in die boonste paneel kan plaas (beide in Elementary en Ubuntu).

Installeer appindicator3-0.1

sudo apt-kry installeer libappindicator3-dev

Opstel:

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

As u fout kry, kan dit wees omdat u 'n nuwer weergawe van appindicator het, gaan dan in / usr / share / vala / vapi en u sal sien wat u weergawe is.

Vaslegging van 2014-02-23 15:30:57

Ons kan 'n voorbeeld in die Ubuntu-ontwikkelingswebwerf.

'N Klein voorbeeld:

Vaslegging van 2014-02-23 17:04:52

 

var aanwyser = nuwe aanwyser ("win.title", "kantoor-adresboek", IndicatorCategory.APPLICATION_STATUS); indicator.set_status (IndicatorStatus.ACTIVE); var menu = nuwe Gtk.Menu (); var item = new Gtk.MenuItem.with_label ("Voeg nuwe kontak by"); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // CreateContact ();}); item.show (); menu.append (item); item = nuwe Gtk.MenuItem.with_label ("Kontak uitvee"); item.show (); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // DeleteContact ();}); menu.append (item); indicator.set_menu (menu);

Imagery

Sit 'n ikoon in ons aansoek:

Ons begin by die konstrukteur van die Gtk.Window-klas:

probeer {// Gids van die beeld this.icon = new Gdk.Pixbuf.from_file ("fcbb.png"); } vang (Fout e) {stderr.printf ("fout:% s \ n", e.message); }

Vaslegging van 2014-02-23 15:44:00

 

Eenvoudige prentjie

'N Eenvoudige beeld in vala wat ons byvoorbeeld in 'n uitleg kan plaas.

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

fcb

oog

Gebruik vala en gtk vir kliënte? nee, volgens my mening is dit baie beter en makliker om c ++ en Qt (QML) te gebruik, dit bly om 'n artikel te doen om kliënte in QML te maak.


Die inhoud van die artikel voldoen aan ons beginsels van redaksionele etiek. Klik op om 'n fout te rapporteer hier.

2 kommentaar, los joune

Laat u kommentaar

Jou e-posadres sal nie gepubliseer word nie. Verpligte velde gemerk met *

*

*

  1. Verantwoordelik vir die data: Miguel Ángel Gatón
  2. Doel van die data: Beheer SPAM, bestuur van kommentaar.
  3. Wettiging: U toestemming
  4. Kommunikasie van die data: Die data sal nie aan derde partye oorgedra word nie, behalwe deur wettige verpligtinge.
  5. Datastoor: databasis aangebied deur Occentus Networks (EU)
  6. Regte: U kan u inligting te alle tye beperk, herstel en verwyder.

  1.   marcos dijo

    dankie vleeslike 😀, dit is wonderlik om te sien wat 'n "paar reëls kode" kan doen as u kennis het. die voorbeeld gee baie idees vir ander dinge 😀

  2.   eliotyd3000 dijo

    Baie goeie wenke, boetie.

    Kyk of ek een kan maak.