Lumilikha ng Mga kliyente [Vala at Gtk 3]

Karaniwan sa Linux napalampas namin ang ilang mga application, o mga kliyente ng ilang mga serbisyo na lumalabas nang mas maaga para sa iba pang mga platform, dahil sa tutorial na ito makikita natin kung paano lumikha ng isang kliyente (ito ay magiging isang pangitain na higit sa itaas), sa pamamagitan ng paggamit ng REST API na may halaga (at gtk 3).

API

Hindi ko ipaliwanag kung ano ang isang API, o kung ano ang REST API (maaari kang makahanap ng maraming impormasyon sa google), sasabihin ko lamang na halos gumawa kami ng ilang mga kahilingan (GET o POST) at magbabalik ito ng tugon sa format na JSON.

Para sa tutorial nagpasya akong gamitin ang api na ibinibigay nito sa amin milagro (tingnan ang dokumentasyon ng api), na nagbibigay sa amin ng isang serye ng impormasyon tungkol sa mga komiks, character ...

Upang ma-access ito kailangan namin ng isang susi, na maaari naming makuha sa pamamagitan ng pagrehistro, sa sandaling nakuha ay mayroon kaming isang limitasyon ng 3000 mga kahilingan.

Makakakita kami ng isang halimbawa ng API, upang tawagan ang api na ito kailangan naming magamit ang aming mga susi (mayroon kaming publiko at isang pribado):

m

Upang makita ang simpleng halimbawang ito na maaari naming magamit www.md5.net kung saan inilalagay namin ang 1 "+" keyprivate "+" keypublic at na bumubuo ng hash, maaari kaming tumawag habang inilalagay sa imahe. Makukuha namin ang sagot (sa kasong ito ay upang makita ang mga character):

mayroong isang error sa imahe ang tawag ay http://gateway.marvel.com/v1/publiko/ komiks ...

mm

Mayroong mga programa at plugin para sa mga browser na magpapadali sa pagtingin kay json:

m1

Maaari nating makita na binibigyan tayo nito ng pangalan, paglalarawan, isang thumbnail (imahe ng character) ...

mamangha web development

Paggamot sa JSON sa vala (Parseando).

Hindi ko rin ipapaliwanag kung ano ang mga format json, maaari kang makahanap ng impormasyon sa online. Maaari kaming makahanap ng isang simpleng halimbawa na ginawa sa Vala dito.

Una sa lahat ay mai-install namin ang json-glib library kung sakaling hindi namin ito naka-install:

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

Mag-i-install din kami ng libsoup:

sudo apt-get install libsoup-2.4 libsoup2.4-dev
Hindi ko ilalagay ang susi ng publiko o ang hash sa mga kahilingan

Una sa lahat ay ini-import namin ang mga library na gagamitin namin:

gamit ang Sopas; gamit si Json; gamit ang Gtk;

Nagpapadala ng isang kahilingan:

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

Ipapakita sa amin ng url ang maximum na 10 komiks na lumabas sa pagitan ng 2 mga petsa (00-03-2014, 16-03-2014).
Una sa lahat lumikha kami ng isang sesyon, pagkatapos ay binubuo namin ang kahilingan ng uri ng GET at ipadala ito.

Parseying json:

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

Nakukuha ang pangunahing object ibig sabihin lahat ng json code.

var response = root_object.get_object_member ("data"); mga resulta sa var = response.get_array_member ("mga resulta");

Maaari nating mahuli

Iproseso ang code:

maaga (var geonode sa mga resulta.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")); }

Maaari kang makakita ng mga halimbawa dito.

Ipinapakita ang impormasyon:

Nakapasok na kami sa gusto namin kung paano ipakita ang impormasyon, upang mai-download ang mga imaheng maaari naming magamit ang pamamaraang ito:

pampublikong static async Gdk.Pixbuf? get_img (string url) {Gdk.Pixbuf? pix = null; var file = File.new_for_uri (url); subukan ang {GLib.InputStream @input_stream = ani file.read_async (Priority.DEFAULT, null); pix = nagbubunga ng bagong Gdk.Pixbuf.from_stream_at_scale_async (input_stream, 800, 600, totoo, null); } mahuli (Error e) {babala (e.message); } ibalik ang pix; }

Ang pagiging isang paraan na naisakatuparan sa ibang thread (asynchronous) kapag tinawag ito kailangan nating gawin ito sa ganitong paraan:

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

Kung saan ang img_url ay ang url ng imahe na nakukuha namin mula sa json.

Upang mag-ipon ng mga aremos:

valac --pkg gtk + -3.0 --pkg libsoup-2.4 --pkg json-glib-1.0 customname.vala
Maaari kaming makahanap ng dokumentasyon para sa json-glib dito.

Tips

Ang ilang mga Tip na makakatulong sa amin upang lumikha ng aming client / application:

AppIndicator

Ang AppIndicator ay isang silid-aklatan na nagpapahintulot sa amin na ilagay ang aming programa bilang isang tagapagpahiwatig sa itaas na panel (kapwa sa Elementary os at Ubuntu).

Pag-install ng appindicator3-0.1

sudo apt-get install libabpindicator3-dev

Pagtitipon:

valac --pkg gtk + -3.0 --pkg appindicator3-0.1 programa.val

Kung nakakuha ka ng isang error, maaaring dahil mayroon kang isang mas bagong bersyon ng appindicator, sa kasong iyon pumunta sa / usr / share / vala / vapi at makikita mo kung ano ang iyong bersyon.

Makunan mula 2014-02-23 15:30:57

Maaari tayong makahanap ng isang halimbawa sa Website ng pag-unlad ng Ubuntu.

Isang maliit na halimbawa:

Makunan mula 2014-02-23 17:04:52

var tagapagpahiwatig = bagong Tagapagpahiwatig ("win.title", "office-address-book", IndicatorCategory.APPLICATION_STATUS); indicator.set_status (IndicatorStatus.ACTIVE); var menu = bagong Gtk.Menu (); var item = bagong Gtk.MenuItem.with_label ("Magdagdag ng bagong contact"); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // CreateContact ();}); item.show (); menu.append (item); item = bagong Gtk.MenuItem.with_label ("Tanggalin ang contact"); item.show (); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // DeleteContact ();}); menu.append (item); tagapagpahiwatig.set_menu (menu);

Imagery

Maglagay ng isang icon sa aming application:

Nagsisimula kami mula sa tagapagbuo ng Gtk. Klase ng Windows:

subukan ang {// Directory Directory this.icon = new Gdk.Pixbuf.from_file ("fcbb.png"); } catch (Error e) {stderr.printf ("error:% s \ n", e.message); }

Makunan mula 2014-02-23 15:44:00

Simpleng larawan

Isang simpleng imahe sa vala na maaari naming mailagay halimbawa sa isang layout.

imahe = bagong Gtk.Image (); image.set_from_file ("fcb.png");

fcb

Opinion

Gumamit ng vala at gtk para sa mga kliyente? hindi, mula sa aking pananaw ay mas mabuti at mas madaling gamitin ang c ++ at Qt (QML), hinihintay na gawin ang isang artikulo upang makagawa ng mga kliyente sa QML.


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   Marcos dijo

    salamat sa karnal 😀, mahusay na makita kung ano ang maaaring gawin ng isang "ilang linya ng code" kapag mayroon kang kaalaman. ang halimbawa ay nagbibigay ng maraming mga ideya para sa iba pang mga bagay 😀

  2.   eliotime3000 dijo

    Napakagandang mga tip, bro.

    Tingnan kung makakagawa ako ng isa.