Створення клієнтів [Vala та Gtk 3]

Зазвичай в Linux ми пропускаємо досить багато програм або клієнтів деяких служб, які виходять набагато раніше для інших платформ, тому що в цьому посібнику ми побачимо, як створити клієнта (це буде бачення набагато вище), використовуючи REST API зі значенням (і gtk 3).

API

Я не збираюся пояснювати, що таке API, або що таке REST API (ви можете знайти багато інформації в google), я просто скажу, що приблизно ми зробимо деякі запити (GET або POST), і це буде повернути відповідь у форматі JSON.

Для підручника я вирішив використовувати api, який він пропонує Marvel (див. документацію до API), яка надає нам ряд відомостей про комікси, персонажів ...

Для доступу до нього нам потрібен ключ, який ми можемо отримати, зареєструвавшись, після отримання ми маємо ліміт 3000 запитів.

Давайте подивимось приклад API, щоб викликати цей api, ми повинні використовувати наші ключі (у нас є загальнодоступний та приватний):

m

Щоб побачити цей простий приклад, ми можемо використати www.md5.net де ми ставимо 1 "+" keyprivate "+" keypublic і який генерує хеш, ми можемо викликати так, як це поміщається на зображенні. Ми отримаємо відповідь (у цьому випадку це побачити символів):

в зображенні є помилка, дзвінок буде http://gateway.marvel.com/v1/громадськість/ комікси ...

mm

Існують програми та плагіни для браузерів, які полегшать перегляд json:

m1

Ми бачимо, що це дає нам ім’я, опис, ескіз (зображення персонажа) ...

чудова веб-розробка

Лікування JSON валою (Parseando).

Я також не поясню, що це за формати json, Ви можете знайти інформацію в Інтернеті. Ми можемо знайти простий приклад, зроблений у Валі тут.

Перш за все ми встановлюємо бібліотеку json-glib на випадок, якщо її не встановлено:

sudo apt-get встановити libjson-glib-1.0-0 libjson-glib-1.0-0-dev

Ми також встановимо libsoup:

sudo apt-get install libsoup-2.4 libsoup2.4-dev
Я не ставлю ні відкритий ключ, ні хеш запитів

Перш за все ми імпортуємо бібліотеки, якими ми будемо користуватися:

використання супу; за допомогою Json; за допомогою Gtk;

Надсилання запиту:

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 (повідомлення);

URL-адреса покаже нам максимум 10 коміксів, які з’явилися між 2 датами (00-03-2014, 16-03-2014).
Перш за все ми створюємо сеанс, потім конструюємо запит типу GET і відправляємо його.

Розбір JSON:

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

отримує основний об'єкт, тобто весь код JSON.

відповідь var = root_object.get_object_member ("дані"); var результати = response.get_array_member ("результати");

Ми можемо зловити

Обробіть код:

foreach (var geonode в 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")); }

Ви можете бачити приклади тут.

Відображення інформації:

Тут ми вже вводимо, як ми хочемо показувати інформацію, щоб завантажити зображення, ми можемо використовувати цей метод:

загальнодоступна статична асинхронізація Gdk.Pixbuf? get_img (URL-адреса рядка) {Gdk.Pixbuf? pix = нуль; файл var = File.new_for_uri (url); спробуйте {GLib.InputStream @input_stream = yield file.read_async (Priority.DEFAULT, null); pix = yield new Gdk.Pixbuf.from_stream_at_scale_async (input_stream, 800, 600, true, null); } catch (Помилка e) {попередження (e.message); } повернути пікс; }

Будучи методом, який виконується в іншому потоці (асинхронному), коли ми його називаємо, ми повинні робити це таким чином:

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

Де img_url - це URL-адреса зображення, яке ми отримуємо з json.

Щоб скомпілювати аремос:

valac --pkg gtk + -3.0 --pkg libsoup-2.4 --pkg json-glib-1.0 ім'я клієнта.vala
Ми можемо знайти документацію для json-glib тут.

Tips

Деякі поради, які можуть допомогти нам створити наш клієнт / додаток:

AppIndicator

AppIndicator - це бібліотека, яка дозволяє розмістити програму як індикатор на верхній панелі (як в елементарному, так і в Ubuntu).

Встановлення appindicator3-0.1

sudo apt-get встановити libappindicator3-dev

Компіляція:

valac --pkg gtk + -3.0 --pkg appindicator3-0.1 програма.вала

Якщо ви отримуєте помилку, можливо, це пов’язано з тим, що у вас новіша версія appindicator, у такому випадку перейдіть до / usr / share / vala / vapi, і ви побачите, яка ваша версія.

Захоплення з 2014-02-23 15:30:57

Ми можемо знайти приклад у Веб-сайт розробки Ubuntu.

Невеликий приклад:

Захоплення з 2014-02-23 17:04:52

індикатор var = новий Індикатор ("win.title", "office-address-book", IndicatorCategory.APPLICATION_STATUS); indicator.set_status (IndicatorStatus.ACTIVE); var menu = новий Gtk.Menu (); var item = new Gtk.MenuItem.with_label ("Додати новий контакт"); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // CreateContact ();}); item.show (); menu.append (пункт); item = new Gtk.MenuItem.with_label ("Видалити контакт"); item.show (); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // DeleteContact ();}); menu.append (пункт); indikator.set_menu (меню);

Образність

Помістіть іконку в наш додаток:

Починаємо з конструктора класу Gtk.Window:

спробуйте {// Каталог зображення this.icon = new Gdk.Pixbuf.from_file ("fcbb.png"); } catch (Помилка e) {stderr.printf ("помилка:% s \ n", е. повідомлення); }

Захоплення з 2014-02-23 15:44:00

Проста картинка

Просте зображення у Валі, яке ми можемо помістити, наприклад, у макет.

image = новий Gtk.Image (); image.set_from_file ("fcb.png");

FCB

Думка

Використовувати vala та gtk для клієнтів? ні, з моєї точки зору, набагато краще та простіше використовувати c ++ та Qt (QML), очікується зробити статтю для створення клієнтів у QML.


Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.

  1.   Маркос - сказав він

    дякую плотському 😀, чудово бачити, що можуть зробити "кілька рядків коду", коли ти маєш знання. приклад дає багато ідей щодо інших речей 😀

  2.   eliotime3000 - сказав він

    Дуже хороші поради, брате.

    Подивись, чи зможу я його зробити.