Создание клиентов [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 с помощью vala (Parseando).

Я также не буду объяснять, что это за форматы JSON, вы можете найти информацию в Интернете. Мы можем найти простой пример, сделанный на Вале. здесь.

Первым делом мы устанавливаем библиотеку json-glib, если она еще не установлена:

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

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

sudo apt-get установить 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 ("ПОЛУЧИТЬ", uri); session.send_message (сообщение);

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

Парсинг json:

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

получает основной объект, то есть весь код json.

var response = root_object.get_object_member («данные»); var results = 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 = File.new_for_uri (url); попробуйте {GLib.InputStream @input_stream = yield file.read_async (Priority.DEFAULT, null); pix = вывести новый Gdk.Pixbuf.from_stream_at_scale_async (input_stream, 800, 600, true, null); } catch (Ошибка e) {предупреждение (e.message); } return pix; }

Поскольку при вызове метода выполняется в другом потоке (асинхронно), мы должны сделать это следующим образом:

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 здесь.

Советы

Несколько советов, которые могут помочь нам в создании нашего клиента / приложения:

Индикатор приложения

AppIndicator - это библиотека, которая позволяет нам размещать нашу программу в качестве индикатора на верхней панели (как в Elementary os, так и в Ubuntu).

Установка appindicator3-0.1

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

Компиляция:

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

Если вы получили сообщение об ошибке, это может быть связано с тем, что у вас более новая версия appindicator. В этом случае перейдите в / usr / share / vala / vapi, и вы увидите, какая у вас версия.

Захват от 2014 02:23:15

Мы можем найти пример в Сайт разработки Ubuntu.

Небольшой пример:

Захват от 2014 02:23:17

var indicator = new Indicator ("win.title", "office-address-book", IndicatorCategory.APPLICATION_STATUS); indicator.set_status (IndicatorStatus.ACTIVE); var menu = new 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 (элемент); indicator.set_menu (меню);

образность

Поместите иконку в наше приложение:

Начнем с конструктора класса Gtk.Window:

try {// Каталог изображения this.icon = new Gdk.Pixbuf.from_file ("fcbb.png"); } catch (Ошибка e) {stderr.printf ("error:% s \ n", e.message); }

Захват от 2014 02:23:15

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

Простое изображение в vala, которое мы можем поместить, например, в макет.

изображение = новый Gtk.Image (); image.set_from_file ("fcb.png");

FCB

вид

Использовать vala и gtk для клиентов? нет, с моей точки зрения, намного лучше и проще использовать C ++ и Qt (QML), ожидается публикация статьи по созданию клиентов на QML.


Оставьте свой комментарий

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

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.

  1.   рамки сказал

    спасибо carnal 😀, приятно видеть, на что способны «несколько строк кода», когда у вас есть знания. пример дает много идей для других вещей 😀

  2.   элиотайм3000 сказал

    Очень хорошие советы, братан.

    Посмотрим, смогу ли я сделать такой.