Clients aanmaken [Vala en Gtk 3]

Normaal missen we in Linux nogal wat applicaties, of clients van sommige services die veel eerder uitkomen voor andere platforms, omdat we in deze tutorial zullen zien hoe we een client kunnen maken (het zal een visie zijn ver boven), door REST API te gebruiken met waarde (en gtk 3).

API

Ik ga niet uitleggen wat een API is, of wat de REST API is (je kunt veel informatie vinden in google), ik zal alleen zeggen dat we grofweg een aantal verzoeken zullen doen (GET of POST) en het zal een antwoord in JSON-formaat retourneren.

Voor de tutorial heb ik besloten om de api te gebruiken die het ons biedt Marvel (zie de api-documentatie), die ons een reeks informatie geeft over strips, personages ...

Om toegang te krijgen hebben we een sleutel nodig, die we kunnen verkrijgen door te registreren, eenmaal verkregen hebben we een limiet van 3000 verzoeken.

Laten we een voorbeeld van de API bekijken, om deze api te noemen, moeten we onze sleutels gebruiken (we hebben een openbare en een privé):

m

Om dit eenvoudige voorbeeld te zien, kunnen we gebruiken www.md5.net waar we 1 "+" keyprivate "+" keypublic plaatsen en dat genereert de hash die we kunnen noemen zoals het in de afbeelding plaatst. We krijgen het antwoord (in dit geval is het om de karakters te zien):

er is een fout in de afbeelding, de oproep zou http://gateway.marvel.com/v1/ zijnpubliek/ strips ...

mm

Er zijn programma's en plug-ins voor browsers die de weergave van json vergemakkelijken:

m1

We kunnen zien dat het ons de naam, de beschrijving, een miniatuur (karakterafbeelding) ...

wonder webontwikkeling

JSON behandelen met vala (Parseando).

Evenmin zal ik uitleggen wat de formaten zijn jsonkunt u online informatie vinden. We kunnen een eenvoudig voorbeeld vinden gemaakt in Vala hier.

Allereerst installeren we de json-glib-bibliotheek voor het geval we deze niet hebben geïnstalleerd:

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

We zullen ook libsoup installeren:

sudo apt-get install libsoup-2.4 libsoup2.4-dev
Ik zal noch de publieke sleutel, noch de hash aan de verzoeken toevoegen

Allereerst importeren we de bibliotheken die we gaan gebruiken:

Soep gebruiken; met behulp van Json; Gtk gebruiken;

Verzoek verzenden:

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 session = nieuwe Soup.SessionSync (); var message = new Soup.Message ("GET", uri); session.send_message (bericht);

De url zal ons maximaal 10 strips tonen die zijn verschenen tussen 2 datums (00-03-2014, 16-03-2014).
Allereerst maken we een sessie, dan bouwen we het verzoek van het GET-type op en verzenden we het.

Json ontleden:

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

krijgt het hoofdobject, d.w.z. alle json-code.

var response = root_object.get_object_member ("data"); var results = response.get_array_member ("results");

We kunnen vangen

Verwerk de code:

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

U kunt voorbeelden zien hier.

De informatie weergeven:

Hier voeren we al naar onze zin in hoe de informatie moet worden weergegeven, om de afbeeldingen te downloaden kunnen we deze methode gebruiken:

openbare statische async Gdk.Pixbuf? get_img (string url) {Gdk.Pixbuf? pix = null; var file = File.new_for_uri (url); probeer {GLib.InputStream @input_stream = yield file.read_async (Priority.DEFAULT, null); pix = geef nieuwe Gdk.Pixbuf.from_stream_at_scale_async (input_stream, 800, 600, true, null); } catch (Error e) {waarschuwing (e.message); } retour pix; }

Omdat het een methode is die wordt uitgevoerd in een andere thread (asynchroon) bij het aanroepen ervan, moeten we het op deze manier doen:

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

Waar img_url de url is van de afbeelding die we krijgen van de json.

Om aremo's te compileren:

valac --pkg gtk + -3.0 --pkg libsoup-2.4 --pkg json-glib-1.0 customername.vala
We kunnen documentatie vinden voor json-glib hier.

Tips

Enkele tips die ons kunnen helpen bij het maken van onze client / applicatie:

AppIndicator

AppIndicator is een bibliotheek waarmee we ons programma als indicator in het bovenste paneel kunnen plaatsen (zowel in Elementary os als in Ubuntu).

Appindicator3-0.1 installeren

sudo apt-get install libappindicator3-dev

Compileren:

valac --pkg gtk + -3.0 --pkg app-indicator3-0.1 program.vala

Als je een foutmelding krijgt, kan het zijn dat je een nieuwere versie van appindicator hebt, ga in dat geval naar / usr / share / vala / vapi en je zult zien wat je versie is.

Leg vast van 2014-02-23 15:30:57

We kunnen een voorbeeld vinden in de Ubuntu-ontwikkelingswebsite.

Een klein voorbeeld:

Leg vast van 2014-02-23 17:04:52

var indicator = nieuwe Indicator ("win.title", "office-address-book", IndicatorCategory.APPLICATION_STATUS); indicator.set_status (IndicatorStatus.ACTIVE); var menu = nieuwe Gtk.Menu (); var item = new Gtk.MenuItem.with_label ("Nieuwe contactpersoon toevoegen"); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // CreateContact ();}); item.show (); menu.append (item); item = new Gtk.MenuItem.with_label ("Verwijder contact"); item.show (); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // DeleteContact ();}); menu.append (item); indicator.set_menu (menu);

Imágenes

Zet een icoon in onze applicatie:

We beginnen met de constructor van de klasse Gtk.Window:

probeer {// Directory van de afbeelding this.icon = new Gdk.Pixbuf.from_file ("fcbb.png"); } catch (Fout e) {stderr.printf ("error:% s \ n", e.message); }

Leg vast van 2014-02-23 15:44:00

Eenvoudig plaatje

Een simpele afbeelding in vala die we bijvoorbeeld in een layout kunnen zetten.

afbeelding = nieuwe Gtk.Image (); image.set_from_file ("fcb.png");

fcb

uitzicht

Vala en gtk gebruiken voor klanten? nee, naar mijn mening is het veel beter en gemakkelijker om c ++ en Qt (QML) te gebruiken, het is in afwachting van een artikel om klanten te maken in QML.


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   kaders zei

    bedankt vleselijk 😀, het is geweldig om te zien wat een "paar regels code" kan doen als je kennis hebt. het voorbeeld geeft veel ideeën voor andere dingen 😀

  2.   eliotime3000 zei

    Zeer goede tips, bro.

    Kijk of ik er een kan maken.