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):
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 programoj kaj aldonaĵoj por retumiloj, kiuj faciligos la vidon de json:
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
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
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.
Ni povas trovi ekzemplon en la Reteja disvolviĝo de Ubuntu.
Eta ekzemplo:
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); }
Simpla bildo
Simpla bildo en vala, kiun ni povas meti ekzemple en aranĝo.
bildo = nova Gtk.Image (); image.set_from_file ("fcb.png");
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.
2 komentoj, lasu la viajn
dankon karna 😀, estas bonege vidi, kion povas fari "kelkaj linioj de kodo" kiam vi havas scion. la ekzemplo donas multajn ideojn por aliaj aferoj 😀
Tre bonaj konsiloj, frato.
Vidu, ĉu mi povas fari tian.