Krei Klientojn [Vala kaj Gtk 3]

Kutime en Linukso mankas al ni multaj aplikoj, aŭ klientoj de iuj servoj, kiuj multe pli frue aperas por aliaj platformoj, ĉar en ĉi tiu lernilo ni vidos kiel krei klienton (ĝi estos vizio tre supre), per la uzo de REST API kun valoro (kaj gtk 3).

API

Mi ne klarigos, kio estas API, aŭ kio estas la REST API (vi povas trovi multajn informojn en google), mi nur diros, ke proksimume ni faros iujn petojn (GET aŭ POST) kaj ĝi faros redonu respondon en formato JSON.

Por la lernilo mi decidis uzi la api, kiun ĝi donas al ni Marvel (vidu api-dokumentaron), kiu donas al ni serion da informoj pri bildstrioj, roluloj ...

Por aliri ĝin ni bezonas ŝlosilon, kiun ni povas akiri registrante, post kiam ricevita ni havas limon de 3000 petoj.

Ni vidu ekzemplon de la API, por nomi ĉi tiun api ni devas uzi niajn ŝlosilojn (ni havas publikan kaj privatan):

m

Por vidi ĉi tiun simplan ekzemplon ni povas uzi www.md5.net kie ni metas 1 "+" keyprivate "+" keypublic kaj tio generas la hash, ni povas voki kiel ĝi enmetas la bildon. Ni ricevos la respondon (ĉi-kaze temas pri vidi la rolulojn):

estas eraro en la bildo, ke la alvoko estus http://gateway.marvel.com/v1/publikajn/ bildstrioj ...

mm

Estas programoj kaj aldonaĵoj por retumiloj, kiuj faciligos la vidon de json:

m1 Ni povas vidi, ke ĝi donas al ni la nomon, la priskribon, bildeton (bildo de la rolulo) ...

miru interretevoluon

Traktado de JSON per vala (Parseando).

Ankaŭ mi ne klarigos, kiaj estas la formatoj json, vi povas trovi informojn interrete. Ni povas trovi simplan ekzemplon faritan en Vala Ĉi tie.

Antaŭ ĉio ni instalas la json-glib-bibliotekon se ni ne havas ĝin instalita:

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

Ni ankaŭ instalos libsoup:

sudo apt-get install libsoup-2.4 libsoup2.4-dev
Mi ne metos nek la publikan ŝlosilon nek la hash al la petoj

Unue ni importas la bibliotekojn, kiujn ni uzos:

uzante Supon; uzante Json; uzante Gtk;

Sendo de peto:

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 kunsido = nova Soup.SessionSync (); var message = new Soup.Message ("GET", uri); sesio.sendi_mesaĝon (mesaĝo);

La url montros al ni maksimume 10 bildstriojn aperintajn inter 2 datoj (00-03-2014, 16-03-2014).
Unue ni kreas sesion, tiam ni konstruas la peton de la GET-tipo kaj sendas ĝin.

Analizado de json:

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

ricevas la ĉefan objekton t.e. la tutan JSON-kodon.

var respondo = root_object.get_object_member ("datumoj"); var results = response.get_array_member ("rezultoj");

Ni povas kapti

Prilabori la kodon:

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 ("nomo"), geoname.get_double_member ("priskribo")); }

Vi povas vidi ekzemplojn Ĉi tie.

Montrante la informojn:

Ĉi tie ni jam eniras laŭplaĉe kiel montri la informojn, por elŝuti la bildojn ni povas uzi ĉi tiun metodon:

publika statika asinkronigo Gdk.Pixbuf? get_img (ĉeno url) {Gdk.Pixbuf? pix = nula; var dosiero = File.new_for_uri (url); provu {GLib.InputStream @input_stream = rendimenta dosiero.read_async (Prioritato.DEFAULT, nula); pix = donas novan Gdk.Pixbuf.from_stream_at_scale_async (input_stream, 800, 600, vera, nula); } kapti (Eraro e) {averto (e.mesaĝo); } resendi pix; }

Estante metodo efektivigita en alia fadeno (nesinkrona) kiam ni vokas ĝin, ni devas fari ĝin tiel:

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

Kie img_url estas la URL de la bildo, kiun ni ricevas de la json.

Kompili aremojn:

valac --pkg gtk + -3.0 --pkg libsoup-2.4 --pkg json-glib-1.0-kutima nomo.vala
Ni povas trovi dokumentojn por json-glib Ĉi tie.

Konsiloj

Iuj Konsiletoj, kiuj povas helpi nin krei nian klienton / programon:

AppIndicator

AppIndicator estas biblioteko, kiu permesas al ni meti nian programon kiel indikilon en la supran panelon (ambaŭ en Elementa os kaj Ubuntu).

Instalante appindicator3-0.1

sudo apt-get install libappindicator3-dev

Kompilado:

valac --pkg gtk + -3.0 --pkg-indikilo3-0.1 programo.vala

Se vi ricevos eraron, eble ĉar vi havas pli novan version de appindicator, tiaokaze iru al / usr / share / vala / vapi kaj vi vidos, kio estas via versio.

Kapto de 2014-02-23 15:30:57

Ni povas trovi ekzemplon en la Reteja disvolviĝo de Ubuntu.

Eta ekzemplo:

Kapto de 2014-02-23 17:04:52

 

var indikilo = nova Indikilo ("win.title", "office-address-book", IndicatorCategory.APPLICATION_STATUS); indicator.set_status (IndicatorStatus.ACTIVE); var menu = nova Gtk.Menu (); var ero = nova Gtk.MenuItem.with_label ("Aldoni novan kontakton"); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // CreateContact ();}); ero.montru (); menu.append (listero); ero = nova Gtk.MenuItem.with_label ("Forigi kontakton"); ero.montru (); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // DeleteContact ();}); menu.append (listero); indikilo.set_menu (menuo);

Bildoj

Enmetu ikonon en nian aplikaĵon:

Ni komencas de la konstruilo de la klaso Gtk.Window:

provu {// Adresaro de la bildo ĉi.ikono = nova Gdk.Pixbuf.de_dosiero ("fcbb.png"); } kapti (Eraro e) {stderr.printf ("eraro:% s \ n", e.mesaĝo); }

Kapto de 2014-02-23 15:44:00

 

Simpla bildo

Simpla bildo en vala, kiun ni povas meti ekzemple en aranĝo.

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

fcb

Opinio

Ĉu uzi vala kaj gtk por klientoj? ne, laŭ mia opinio estas multe pli bone kaj pli facile uzi c ++ kaj Qt (QML), ĝi atendas fari artikolon por krei klientojn en QML.


La enhavo de la artikolo aliĝas al niaj principoj de redakcia etiko. Por raporti eraron alklaku Ĉi tie.

2 komentoj, lasu la viajn

Lasu vian komenton

Via retpoŝta adreso ne estos eldonita. Postulita kampojn estas markita per *

*

*

  1. Respondeculo pri la datumoj: Miguel Ángel Gatón
  2. Celo de la datumoj: Kontrola SPAM, administrado de komentoj.
  3. Legitimado: Via konsento
  4. Komunikado de la datumoj: La datumoj ne estos komunikitaj al triaj krom per laŭleĝa devo.
  5. Stokado de datumoj: Datumbazo gastigita de Occentus Networks (EU)
  6. Rajtoj: Iam ajn vi povas limigi, retrovi kaj forigi viajn informojn.

  1.   Marcos diris

    dankon karna 😀, estas bonege vidi, kion povas fari "kelkaj linioj de kodo" kiam vi havas scion. la ekzemplo donas multajn ideojn por aliaj aferoj 😀

  2.   eliotime3000 diris

    Tre bonaj konsiloj, frato.

    Vidu, ĉu mi povas fari tian.