Обычно в Linux мы пропускаем довольно много приложений или клиентов некоторых служб, которые появляются намного раньше для других платформ, потому что в этом руководстве мы увидим, как создать клиента (это будет видение намного выше) с помощью REST API. со значением (и gtk 3).
API
Я не собираюсь объяснять, что такое API или что такое REST API (вы можете найти много информации в Google), я просто скажу, что примерно мы сделаем несколько запросов (GET или POST), и он вернуть ответ в формате JSON.
Для учебника я решил использовать API, который он нам предоставляет Marvel (см. документацию по API), которая предоставляет нам серию информации о комиксах, персонажах ...
Для доступа к нему нам нужен ключ, который мы можем получить, зарегистрировавшись, после получения у нас есть ограничение в 3000 запросов.
Давайте посмотрим на пример API, чтобы вызвать этот api, мы должны использовать наши ключи (у нас есть публичный и частный):
Чтобы увидеть этот простой пример, мы можем использовать www.md5.net где мы помещаем 1 "+" keyprivate "+" keypublic и который генерирует хэш, который мы можем вызывать, когда он помещается в изображение. Получим ответ (в данном случае - увидеть персонажей):
Существуют программы и плагины для браузеров, которые облегчат просмотр json:
Мы видим, что он дает нам имя, описание, миниатюру (изображение персонажа) ...
Обработка 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
Советы
Несколько советов, которые могут помочь нам в создании нашего клиента / приложения:
Индикатор приложения
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, и вы увидите, какая у вас версия.
Мы можем найти пример в Сайт разработки Ubuntu.
Небольшой пример:
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); }
Простая картинка
Простое изображение в vala, которое мы можем поместить, например, в макет.
изображение = новый Gtk.Image (); image.set_from_file ("fcb.png");
вид
Использовать vala и gtk для клиентов? нет, с моей точки зрения, намного лучше и проще использовать C ++ и Qt (QML), ожидается публикация статьи по созданию клиентов на QML.
спасибо carnal 😀, приятно видеть, на что способны «несколько строк кода», когда у вас есть знания. пример дает много идей для других вещей 😀
Очень хорошие советы, братан.
Посмотрим, смогу ли я сделать такой.