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):
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 programme en inproppe vir blaaiers wat die siening van json vergemaklik:
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
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
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.
Ons kan 'n voorbeeld in die Ubuntu-ontwikkelingswebwerf.
'N Klein voorbeeld:
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); }
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");
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.
2 kommentaar, los joune
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 😀
Baie goeie wenke, boetie.
Kyk of ek een kan maak.