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):
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):
Tarayıcılar için json görünümünü kolaylaştıracak programlar ve eklentiler vardır:
Bize isim, açıklama, küçük resim (karakterin görüntüsü) verdiğini görebiliriz ...
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
Ö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
İ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.
Bir örnek bulabiliriz Ubuntu geliştirme web sitesi.
Küçük bir örnek:
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); }
Basit resim
Örneğin bir düzene koyabileceğimiz, vala'daki basit bir resim.
image = new Gtk.Image (); image.set_from_file ("fcb.png");
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.
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 😀
Çok güzel ipuçları kardeşim.
Bir tane yapabilir miyim bir bak.