Parasti operētājsistēmā Linux mums pietrūkst diezgan daudz lietojumprogrammu vai dažu pakalpojumu klientu, kas citām platformām nāk klajā daudz agrāk, jo šajā apmācībā mēs redzēsim, kā izveidot klientu (tas būs redzējums krietni augstāk), izmantojot REST API ar vērtību (un gtk 3).
API
Es neskaidrošu, kas ir API vai kas ir REST API (daudz informācijas varat atrast google), es tikai teikšu, ka aptuveni mēs veiksim dažus pieprasījumus (GET vai POST), un tas būs atgriezt atbildi JSON formātā.
Apmācībai esmu nolēmis izmantot api, ko tā mums nodrošina Marvel (skat. api dokumentāciju), kas sniedz mums virkni informācijas par komiksiem, varoņiem ...
Lai piekļūtu tai, mums ir nepieciešama atslēga, kuru mēs varam iegūt, reģistrējoties. Pēc iegūšanas mums ir 3000 pieprasījumu ierobežojums.
Apskatīsim API piemēru, lai izsauktu šo api, mums jāizmanto mūsu atslēgas (mums ir publiska un privāta):
Lai redzētu šo vienkāršo piemēru, mēs varam to izmantot www.md5.net kur mēs ievietojam 1 "+" keyprivate "+" keypublic un kas ģenerē hash, mēs varam izsaukt, kā tas tiek ievietots attēlā. Mēs saņemsim atbildi (šajā gadījumā tas ir redzēt rakstzīmes):
Pārlūkprogrammām ir programmas un spraudņi, kas atvieglos json skatu:
Mēs varam redzēt, ka tas dod mums vārdu, aprakstu, sīktēlu (rakstzīmes attēlu) ...
JSON ārstēšana ar vala (Parseando).
Es arī nepaskaidrošu, kādi ir formāti Džons, informāciju varat atrast tiešsaistē. Mēs varam atrast vienkāršu piemēru, kas izgatavots Valā šeit.
Vispirms mēs instalējam bibliotēku json-glib, ja mums tā nav instalēta:
sudo apt-get install libjson-glib-1.0-0 libjson-glib-1.0-0-dev
Mēs instalēsim arī libsoup:
sudo apt-get install libsoup-2.4 libsoup2.4-dev
Pirmkārt, mēs importējam bibliotēkas, kuras izmantosim:
izmantojot Zupa; izmantojot Json; izmantojot Gtk;
Pieprasījuma sūtīšana:
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 sesija = jauna zupa.SessionSync (); var ziņojums = jauna zupa.Ziņojums ("GET", uri); session.send_message (ziņojums);
Vietrādī URL tiks parādīti ne vairāk kā 10 komiksi, kas ir parādījušies laika posmā no diviem datumiem (2. gada 00. martā, 03. gada 2014. martā).
Vispirms mēs izveidojam sesiju, pēc tam izveidojam GET pieprasījumu un nosūta to.
Parsējot jsonu:
var root_object = parser.get_root () .get_object ();
iegūst galveno objektu, t.i., visu Json kodu.
var atbilde = root_object.get_object_member ("dati"); var results = response.get_array_member ("rezultāti");
Mēs varam noķert
Apstrādājiet kodu:
foreach (main geonode in results.get_elements ()) {var geoname = geonode.get_object (); stdout.printf ("% f \ n% s \ n% s \ n \ n", ģeoname.get_string_member ("id"), geoname.get_string_member ("nosaukums"), geoname.get_double_member ("apraksts")); }
Jūs varat redzēt piemērus šeit.
Informācijas parādīšana:
Šeit mēs jau ievadām, kā mēs vēlamies parādīt informāciju, lai lejupielādētu attēlus, mēs varam izmantot šo metodi:
publiskais statiskais asinhronais Gdk.Pixbuf? get_img (virknes URL) {Gdk.Pixbuf? pix = null; var fails = File.new_for_uri (url); mēģiniet {GLib.InputStream @input_stream = ienesīgums file.read_async (Priority.DEFAULT, null); pix = ienesīgums jauns Gdk.Pixbuf.from_stream_at_scale_async (input_stream, 800, 600, true, null); } catch (kļūda e) {brīdinājums (e.message); } atgriezties pix; }
Tā kā metode, kas tiek izpildīta citā pavedienā (asinhronā), to izsaucot, ir jādara šādi:
get_img.begin (img_url, (obj, res) => {var pix = get_img.end (res);});
Kur img_url ir attēla URL, ko mēs iegūstam no json.
Lai apkopotu aremos:
valac --pkg gtk + -3.0 --pkg libsoup-2.4 --pkg json-glib-1.0 pielāgotājvārds.vala
Tips
Daži padomi, kas mums var palīdzēt izveidot klientu / lietojumprogrammu:
AppIndicator
AppIndicator ir bibliotēka, kas ļauj mums ievietot mūsu programmu kā indikatoru augšējā panelī (gan Elementary OS, gan Ubuntu).
Appindicator instalēšana3-0.1
sudo apt-get install libappindicator3-dev
Sastādīšana:
valac --pkg gtk + -3.0 -3 kg indikators programma.vala
Gadījumā, ja saņemat kļūdu, tas var būt tāpēc, ka jums ir jaunāka appindicator versija, tādā gadījumā dodieties uz / usr / share / vala / vapi un redzēsiet, kāda ir jūsu versija.
Mēs varam atrast piemēru Ubuntu izstrādes vietne.
Neliels piemērs:
var rādītājs = jauns rādītājs ("win.title", "office-address-book", IndicatorCategory.APPLICATION_STATUS); indikators.set_status (IndicatorStatus.ACTIVE); var menu = new Gtk.Menu (); var item = new Gtk.MenuItem.with_label ("Pievienot jaunu kontaktu"); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // CreateContact ();}); item.show (); menu.append (vienums); item = new Gtk.MenuItem.with_label ("Dzēst kontaktu"); item.show (); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // DeleteContact ();}); menu.append (vienums); indikators.set_menu (izvēlne);
Tēlainība
Ievietojiet ikonu mūsu lietojumprogrammā:
Mēs sākam no klases Gtk.Window konstruktora:
mēģiniet {// attēla direktoriju this.icon = new Gdk.Pixbuf.from_file ("fcbb.png"); } catch (kļūda e) {stderr.printf ("kļūda:% s \ n", e.ziņa); }
Vienkāršs attēls
Vienkāršs attēls valā, ko mēs varam ievietot, piemēram, izkārtojumā.
attēls = jauns Gtk.Image (); image.set_from_file ("fcb.png");
Atzinums
Vai klientiem izmantot vala un gtk? nē, no mana viedokļa ir daudz labāk un vieglāk izmantot c ++ un Qt (QML), vēl ir jāizstrādā raksts, lai klientus izveidotu QML.
paldies miesīgs 😀, ir lieliski redzēt, ko var paveikt "dažas koda rindiņas", kad tev ir zināšanas. piemērs sniedz daudz ideju citām lietām 😀
Ļoti labi padomi, bro.
Paskaties, vai varu tādu uztaisīt.