Klientu izveide [Vala un Gtk 3]

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):

m

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):

attēlā ir kļūda, zvans būtu http://gateway.marvel.com/v1/valsts/ komiksi ...

mm

Pārlūkprogrammām ir programmas un spraudņi, kas atvieglos json skatu:

m1

Mēs varam redzēt, ka tas dod mums vārdu, aprakstu, sīktēlu (rakstzīmes attēlu) ...

apbrīnojiet tīmekļa izstrādi

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
Es nelikšu pieprasījumiem ne publisko atslēgu, ne hash

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
Mēs varam atrast dokumentāciju json-glib šeit.

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.

Uzņemiet no 2014. gada 02. septembra 23:15:30

Mēs varam atrast piemēru Ubuntu izstrādes vietne.

Neliels piemērs:

Uzņemiet no 2014. gada 02. septembra 23:17:04

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); }

Uzņemiet no 2014. gada 02. septembra 23:15:44

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");

fcb

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.


Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   Marcos teica

    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 😀

  2.   3000 teica

    Ļoti labi padomi, bro.

    Paskaties, vai varu tādu uztaisīt.