Stvaranje klijenata [Vala i Gtk 3]

Obično u Linuxu propustimo dosta aplikacija ili klijenata nekih usluga koji izlaze mnogo ranije za druge platforme, jer ćemo u ovom vodiču vidjeti kako stvoriti klijenta (to će biti vizija daleko iznad), koristeći REST API sa vrijednošću (i gtk 3).

API

Neću objašnjavati što je API ili što je REST API (puno podataka možete pronaći na googleu), samo ću reći da ćemo otprilike podnijeti neke zahtjeve (GET ili POST), a on će vrati odgovor u JSON formatu.

Za tutorijal sam odlučio koristiti api koji nudi čudo (vidi api dokumentaciju), koja nam pruža niz informacija o stripovima, likovima ...

Da bismo mu pristupili, potreban nam je ključ koji možemo dobiti registracijom, nakon što ga dobijemo, imamo ograničenje od 3000 zahtjeva.

Pogledajmo primjer API-ja, da bismo pozvali ovaj api, moramo iskoristiti naše ključeve (imamo javni i privatni):

m

Da bismo vidjeli ovaj jednostavan primjer koji možemo koristiti www.md5.net tamo gdje stavimo 1 "+" keyprivate "+" keypublic i koji generira hash, možemo ga nazvati kako piše na slici. Dobit ćemo odgovor (u ovom slučaju to je vidjeti likove):

postoji greška na slici poziv bi bio http://gateway.marvel.com/v1/javnost/ stripovi ...

mm

Postoje programi i dodaci za preglednike koji će olakšati prikaz json-a:

m1

Vidimo da nam daje ime, opis, minijaturu (slika lika) ...

čudesni web razvoj

Lečenje JSON-a valom (Parseando).

Niti ću objasniti koji su to formati json, informacije možete pronaći na mreži. Možemo pronaći jednostavan primjer napravljen u Vali ovdje.

Prije svega instaliramo json-glib biblioteku u slučaju da je nemamo instaliranu:

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

Također ćemo instalirati libsoup:

sudo apt-get instalacija libsoup-2.4 libsoup2.4-dev
Neću staviti javni ključ ni heš zahtjevima

Prije svega uvozimo biblioteke koje ćemo koristiti:

koristeći juhu; koristeći Json; koristeći Gtk;

Slanje zahtjeva:

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 poruka = ​​nova Soup.Message ("GET", uri); session.send_message (poruka);

URL će nam pokazati maksimalno 10 stripova koji su izašli između 2 datuma (00-03-2014, 16-03-2014).
Prije svega kreiramo sesiju, zatim gradimo zahtjev tipa GET i šaljemo ga.

Parseying json:

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

dobiva glavni objekt tj. sav json kod.

var odgovor = root_object.get_object_member ("podaci"); var rezultati = response.get_array_member ("rezultati");

Možemo uhvatiti

Obradite kod:

foreach (var geonode u 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 ("ime"), geoname.get_double_member ("opis")); }

Možete vidjeti primjere ovdje.

Prikazivanje podataka:

Ovdje već unosimo kako želimo prikazati informacije, za preuzimanje slika možemo se koristiti ovom metodom:

javna statička async Gdk.Pixbuf? get_img (url niza) {Gdk.Pixbuf? pix = null; var datoteka = File.new_for_uri (url); isprobajte {GLib.InputStream @input_stream = yield file.read_async (Priority.DEFAULT, null); pix = prinosi novi Gdk.Pixbuf.from_stream_at_scale_async (input_stream, 800, 600, true, null); } catch (Greška e) {upozorenje (e.poruka); } return pix; }

Budući da je metoda koja se izvršava u drugoj niti (asinhroni) kada je pozivamo, moramo to učiniti na ovaj način:

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

Gdje je img_url url slike koju dobivamo iz jsona.

Za kompajliranje aremosa:

valac --pkg gtk + -3.0 --pkg libsoup-2.4 --pkg json-glib-1.0 korisničko ime.vala
Možemo pronaći dokumentaciju za json-glib ovdje.

Savjeti

Neki savjeti koji nam mogu pomoći u stvaranju klijenta / aplikacije:

AppIndicator

AppIndicator je biblioteka koja nam omogućava da svoj program stavimo kao indikator na gornju ploču (i u Elementarnom osu i u Ubuntuu).

Instaliranje appindicator3-0.1

sudo apt-get instalacija libappindicator3-dev

Sastavljanje:

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

Ako dobijete grešku, to je možda zato što imate noviju verziju appindicatora, u tom slučaju idite na / usr / share / vala / vapi i vidjet ćete koja je vaša verzija.

Snimka iz 2014-02-23 15:30:57

Primer možemo naći u Web lokacija za razvoj Ubuntu-a.

Mali primjer:

Snimka iz 2014-02-23 17:04:52

indikator var = novi indikator ("win.title", "office-adresar", IndicatorCategory.APPLICATION_STATUS); indicator.set_status (IndicatorStatus.ACTIVE); var meni = novi Gtk.Menu (); var item = new Gtk.MenuItem.with_label ("Dodaj novi kontakt"); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // CreateContact ();}); item.show (); menu.append (stavka); item = new Gtk.MenuItem.with_label ("Izbriši kontakt"); item.show (); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // DeleteContact ();}); menu.append (stavka); indicator.set_menu (meni);

lik

Stavite ikonu u našu aplikaciju:

Polazimo od konstruktora klase Gtk.Window:

probajte {// Direktorij slike this.icon = new Gdk.Pixbuf.from_file ("fcbb.png"); } catch (Greška e) {stderr.printf ("greška:% s \ n", e.poruka); }

Snimka iz 2014-02-23 15:44:00

Jednostavna slika

Jednostavna slika u vali koju možemo staviti na primjer u izgled.

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

fcb

Mišljenje

Koristiti vala i gtk za klijente? ne, s moje tačke gledišta je puno bolje i lakše koristiti c ++ i Qt (QML), čeka se izrada članka za stvaranje klijenata u QML-u.


Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Marcos rekao je

    hvala plotski 😀, sjajno je vidjeti što "nekoliko redaka koda" može učiniti kada imate znanje. primjer daje mnoge ideje za druge stvari 😀

  2.   eliotime3000 rekao je

    Vrlo dobri savjeti, brate.

    Vidi mogu li je napraviti.