Tworzenie klientów [Vala i Gtk 3]

Zwykle w Linuksie brakuje nam kilku aplikacji lub klientów niektórych usług, które wychodzą znacznie wcześniej na inne platformy, ponieważ w tym samouczku zobaczymy, jak stworzyć klienta (będzie to wizja daleko powyżej), za pomocą REST API z wartością (i gtk 3).

API

Nie będę wyjaśniał, czym jest API, ani czym jest REST API (w google można znaleźć wiele informacji), powiem tylko, że z grubsza wykonamy kilka żądań (GET lub POST) i tak się stanie zwraca odpowiedź w formacie JSON.

W samouczku zdecydowałem się użyć interfejsu API, który nam zapewnia Marvel (patrz dokumentacja API), która dostarcza nam szeregu informacji o komiksach, postaciach ...

Aby uzyskać do niego dostęp potrzebujemy klucza, który możemy uzyskać rejestrując się, po uzyskaniu mamy limit 3000 zapytań.

Zobaczmy przykład API, aby wywołać ten interfejs, musimy skorzystać z naszych kluczy (mamy publiczny i prywatny):

m

Aby zobaczyć ten prosty przykład, możemy użyć www.md5.net gdzie umieszczamy 1 "+" keyprivate "+" keypublic i to generuje hash, możemy wywołać to, co umieszcza na obrazku. Otrzymamy odpowiedź (w tym przypadku jest to zobaczenie postaci):

na obrazie jest błąd, wywołanie będzie wyglądać następująco: http://gateway.marvel.com/v1/publiczny/ komiksy ...

mm

Istnieją programy i wtyczki do przeglądarek, które ułatwią przeglądanie json:

m1

Widzimy, że podaje nam imię, opis, miniaturę (obraz postaci) ...

cudowne tworzenie stron internetowych

Traktowanie JSON za pomocą vala (Parseando).

Nie wyjaśnię też, jakie są formaty json, możesz znaleźć informacje w Internecie. Możemy znaleźć prosty przykład wykonany w Vala tutaj.

Przede wszystkim instalujemy bibliotekę json-glib na wypadek, gdybyśmy jej nie zainstalowali:

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

Zainstalujemy również libsoup:

sudo apt-get zainstaluj libsoup-2.4 libsoup2.4-dev
Nie będę umieszczać ani klucza publicznego, ani skrótu do żądań

Przede wszystkim importujemy biblioteki, z których będziemy korzystać:

przy użyciu zupy; using Json; using Gtk;

Wysyłanie zapytania:

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 message = new Soup.Message ("GET", uri); session.send_message (wiadomość);

Adres URL pokaże nam maksymalnie 10 komiksów, które pojawiły się między 2 datami (00-03-2014, 16-03-2014).
Najpierw tworzymy sesję, następnie budujemy żądanie typu GET i wysyłamy.

Json analizowania:

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

pobiera główny obiekt, czyli cały kod json.

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

Możemy złapać

Przetwórz kod:

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 ("opis")); }

Możesz zobaczyć przykłady tutaj.

Wyświetlanie informacji:

Tutaj już wpisujemy, jak nam się podoba, jak wyświetlać informacje, aby pobrać obrazy, możemy użyć tej metody:

publiczny statyczny asynchroniczny Gdk.Pixbuf? get_img (string url) {Gdk.Pixbuf? pix = null; var file = File.new_for_uri (adres URL); try {GLib.InputStream @input_stream = yield file.read_async (Priority.DEFAULT, null); pix = daj nowy Gdk.Pixbuf.from_stream_at_scale_async (input_stream, 800, 600, true, null); } catch (błąd e) {ostrzeżenie (e.message); } return pix; }

Będąc metodą, która jest wykonywana w innym wątku (asynchronicznie) przy jej wywołaniu, musimy to zrobić w następujący sposób:

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

Gdzie img_url to adres URL obrazu, który otrzymujemy z pliku json.

Aby skompilować aremos:

valac --pkg gtk + -3.0 --pkg libsoup-2.4 --pkg json-glib-1.0 nazwa_własna.vala
Możemy znaleźć dokumentację dla json-glib tutaj.

Tips

Kilka wskazówek, które mogą nam pomóc w tworzeniu naszego klienta / aplikacji:

AppIndicator

AppIndicator to biblioteka, która pozwala nam umieścić nasz program jako wskaźnik w górnym panelu (zarówno w Elementary OS, jak i Ubuntu).

Instalowanie appindicator3-0.1

sudo apt-get zainstaluj libappindicator3-dev

Kompilacja:

valac --pkg gtk + -3.0 --pkg aplikator3-0.1 program.vala

Jeśli pojawi się błąd, może to być spowodowane posiadaniem nowszej wersji appindicatora, w takim przypadku przejdź do / usr / share / vala / vapi i zobaczysz, jaka jest twoja wersja.

Przechwytywanie z 2014 02:23:15

Przykład możemy znaleźć w Witryna programistyczna Ubuntu.

Mały przykład:

Przechwytywanie z 2014 02:23:17

var Indicator = new Indicator ("win.title", "książka adresowa-biura", IndicatorCategory.APPLICATION_STATUS); Indicator.set_status (IndicatorStatus.ACTIVE); var menu = new Gtk.Menu (); var item = new Gtk.MenuItem.with_label ("Dodaj nowy kontakt"); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // CreateContact ();}); item.show (); menu.append (pozycja); item = new Gtk.MenuItem.with_label ("Usuń kontakt"); item.show (); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // DeleteContact ();}); menu.append (pozycja); wskaźnik.set_menu (menu);

Obrazowość

Umieść ikonę w naszej aplikacji:

Zaczynamy od konstruktora klasy Gtk.Window:

try {// Katalog obrazu this.icon = new Gdk.Pixbuf.from_file ("fcbb.png"); } catch (błąd e) {stderr.printf ("błąd:% s \ n", e.message); }

Przechwytywanie z 2014 02:23:15

Prosty obraz

Prosty obraz w vala, który możemy umieścić na przykład w układzie.

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

Fcb

Opinia

Używać vala i gtk dla klientów? nie, z mojego punktu widzenia jest dużo lepsze i łatwiejsze w użyciu c ++ i Qt (QML), oczekuje na artykuł o tworzeniu klientów w QML.


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.

  1.   Marcos powiedział

    dzięki cielesnemu 😀, wspaniale jest zobaczyć, co może zrobić „kilka linijek kodu”, gdy masz wiedzę. przykład daje wiele pomysłów na inne rzeczy 😀

  2.   Eliotime3000 powiedział

    Bardzo dobre wskazówki, brachu.

    Zobacz, czy uda mi się je zrobić.