Müşteri Oluşturma [Vala ve Gtk 3]

Normalde Linux'ta, diğer platformlar için çok daha erken ortaya çıkan birkaç uygulamayı veya bazı hizmetlerin istemcilerini özlüyoruz, çünkü bu eğiticide REST API kullanarak nasıl bir istemcinin (çok yukarıda bir vizyon olacak) nasıl oluşturulacağını göreceğiz. değer ile (ve gtk 3).

API

Bir API'nin ne olduğunu veya REST API'nin ne olduğunu açıklamayacağım (google'da pek çok bilgi bulabilirsiniz), kabaca bazı isteklerde bulunacağımızı (GET veya POST) söyleyeceğim ve JSON biçiminde bir yanıt döndürür.

Eğitim için bize sağladığı api'yi kullanmaya karar verdim Marvel (API belgelerine bakın), bize çizgi romanlar, karakterler hakkında bir dizi bilgi sağlar ...

Erişmek için, kayıt yaptırarak elde edebileceğimiz bir anahtara ihtiyacımız var, elde edildikten sonra 3000 istek limitimiz var.

Bir API örneğine bakalım, bu api'yi çağırmak için anahtarlarımızdan yararlanmamız gerekiyor (bir genel ve bir özel bir tane var):

m

Bu basit örneği görmek için kullanabiliriz www.md5.net 1 "+" keyprivate "+" keypublic koyduğumuz ve hash'i üreten yere, görselde söylediği gibi diyebiliriz. Cevabı alacağız (bu durumda karakterleri görmektir):

görüntüde bir hata var, çağrı http://gateway.marvel.com/v1/halka açık/ çizgi roman ...

mm

Tarayıcılar için json görünümünü kolaylaştıracak programlar ve eklentiler vardır:

m1

Bize isim, açıklama, küçük resim (karakterin görüntüsü) verdiğini görebiliriz ...

harika web geliştirme

JSON'u vala (Parseando) ile tedavi etme.

Formatların ne olduğunu da açıklamayacağım jsonçevrimiçi bilgi bulabilirsiniz. Vala'da yapılmış basit bir örnek bulabiliriz burada.

Öncelikle json-glib kitaplığını kurmadık diye kuruyoruz:

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

Ayrıca libsoup'u da kuracağız:

sudo apt-get kurulum libsoup-2.4 libsoup2.4-dev
İsteklere ne genel anahtarı ne de hash'ı koymayacağım

Öncelikle kullanacağımız kütüphaneleri içe aktarıyoruz:

Çorba kullanarak; Json kullanarak; Gtk kullanarak;

Bir istek göndermek:

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

Url bize 10 tarih (2-00-03, 2014-16-03) arasında çıkan en fazla 2014 çizgi roman gösterecektir.
Öncelikle bir oturum oluşturuyoruz, ardından GET tipinde bir istek oluşturup gönderiyoruz.

Ayrıştırıcı json:

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

ana nesneyi, yani tüm json kodunu alır.

var response = root_object.get_object_member ("veri"); var results = response.get_array_member ("sonuçlar");

Yakalayabiliriz

Kodu işleyin:

foreach (results.get_elements () 'de var geonode) {var geoname = geonode.get_object (); stdout.printf ("% f \ n% s \ n% s \ n \ n", geoname.get_string_member ("id"), geoname.get_string_member ("ad"), geoname.get_double_member ("açıklama")); }

Örnekleri görebilirsiniz burada.

Bilginin görüntülenmesi:

Burada, bilgileri nasıl görüntüleyeceğimizi beğenimize zaten giriyoruz, görüntüleri indirmek için bu yöntemi kullanabiliriz:

public static async Gdk.Pixbuf? get_img (string url) {Gdk.Pixbuf? pix = boş; var dosya = File.new_for_uri (url); deneyin {GLib.InputStream @input_stream = give file.read_async (Priority.DEFAULT, null); pix = yeni Gdk.Pixbuf.from_stream_at_scale_async (input_stream, 800, 600, true, null) verir; } catch (Hata e) {uyarı (e.message); } dönüş pikseli; }

Başka bir iş parçacığında (asenkron) çalıştırılan bir yöntem olarak onu çağırırken bunu şu şekilde yapmalıyız:

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

İmg_url, json'dan aldığımız görüntünün url'sidir.

Aemoları derlemek için:

valac --pkg gtk + -3.0 --pkg libsoup-2.4 --pkg json-glib-1.0 özeladı.vala
Json-glib için dokümantasyon bulabiliriz burada.

İpuçları

İstemcimizi / uygulamamızı oluşturmamıza yardımcı olabilecek bazı İpuçları:

Uygulama Göstergesi

AppIndicator, programımızı üst panele (hem Elementary os hem de Ubuntu'da) gösterge olarak koymamızı sağlayan bir kitaplıktır.

Appindicator3-0.1 yükleniyor

sudo apt-get install libappindicator3-dev

Derleme:

valac --pkg gtk + -3.0 --pkg aplikatörü3-0.1 program.vala

Bir hata alırsanız, bunun nedeni appindicator'ın daha yeni bir sürümüne sahip olmanız olabilir, bu durumda / usr / share / vala / vapi'ye gidin ve sürümünüzün ne olduğunu göreceksiniz.

2014-02-23 15:30:57 arası yakalama

Bir örnek bulabiliriz Ubuntu geliştirme web sitesi.

Küçük bir örnek:

2014-02-23 17:04:52 arası yakalama

var göstergesi = new Gösterge ("win.title", "ofis-adres defteri", IndicatorCategory.APPLICATION_STATUS); indica.set_status (IndicatorStatus.ACTIVE); var menu = new Gtk.Menu (); var item = new Gtk.MenuItem.with_label ("Yeni kişi ekle"); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // CreateContact ();}); item.show (); menu.append (öğe); item = new Gtk.MenuItem.with_label ("Kişiyi sil"); item.show (); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // DeleteContact ();}); menu.append (öğe); gösterge.set_menu (menü);

Görüntüler

Uygulamamıza bir simge koyun:

Gtk.Window sınıfının yapıcısından başlıyoruz:

deneyin {// Resmin dizini this.icon = new Gdk.Pixbuf.from_file ("fcbb.png"); } catch (Hata e) {stderr.printf ("hata:% s \ n", e.message); }

2014-02-23 15:44:00 arası yakalama

Basit resim

Örneğin bir düzene koyabileceğimiz, vala'daki basit bir resim.

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

fcb

Görüş

Müşteriler için vala ve gtk kullanılsın mı? hayır, bence c ++ ve Qt'yi (QML) kullanmak çok daha iyi ve daha kolay, QML'de müşteri yapmak için bir makale yapmayı bekliyor.


Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.

  1.   marcos dijo

    teşekkürler carnal 😀, bilginiz olduğunda "birkaç satır kodun" neler yapabileceğini görmek harika. örnek başka şeyler için birçok fikir veriyor 😀

  2.   eliotime3000 dijo

    Çok güzel ipuçları kardeşim.

    Bir tane yapabilir miyim bir bak.