创建客户[Vala和Gtk 3]

通常,在Linux中,我们会错过很多应用程序或某些服务的客户端,而这些应用程序早于其他平台推出,因为在本教程中,我们将了解如何通过使用来创建客户端(这是远景)。带有值的REST API(和gtk 3)。

API

我不会解释什么是API,或者什么是REST API(您可以在google中找到很多信息),我只是说大概我们会发出一些请求(GET或POST),它将返回JSON格式的响应。

对于本教程,我决定使用它提供给我们的API 奇迹 (请参阅api文档),它为我们提供了有关漫画,角色的一系列信息...

要访问它,我们需要一个可以通过注册获得的密钥,一旦获得,我们将限制3000个请求。

让我们看一下API的示例,要调用此api,我们必须使用我们的密钥(我们有一个公共密钥和一个私有密钥):

m

为了看到这个简单的例子,我们可以使用 md5.net 我们在其中放置1个“ +” keyprivate“ +” keypublic并生成哈希值,我们可以像在图像中一样调用它。 我们将得到答案(在这种情况下,是看到字符):

图片中有错误,调用将为http://gateway.marvel.com/v1/国家/漫画...

mm

浏览器有一些程序和插件可以简化json的查看:

m1

我们可以看到它为我们提供了名称,描述,缩略图(字符的图像)...

出色的网页开发

用vala处理JSON(Parseando)。

我也不会解释什么格式 JSON,您可以在线查找信息。 我们可以找到一个用Vala制造的简单示例 信息.

首先,如果没有安装json-glib库,请安装它:

须藤apt-get install libjson-glib-1.0-0 libjson-glib-1.0-0-dev

我们还将安装libsoup:

须藤apt-get install libsoup-2.4 libsoup2.4-dev
我既不会将公钥也不会将哈希添加到请求中

首先,我们导入将要使用的库:

用汤使用杰森; 使用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(消息);

该网址最多可以向我们显示在10个日期之间(2-00-03,2014-16-03)发行的2014部漫画。
首先,我们创建一个会话,然后构建并发送GET类型的请求。

解析json:

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

获取主要对象,即所有json代码。

var response = root_object.get_object_member(“ data”); var results = response.get_array_member(“ results”);

我们可以抓住

处理代码:

foreach(results.get_elements()中的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(“ name”),geoname.get_double_member(“ description”))); }

你可以看例子 信息.

显示信息:

在这里,我们已经按照自己的喜好输入了如何显示信息,下载图像的方法:

公共静态异步Gdk.Pixbuf? get_img(字符串网址){Gdk.Pixbuf? pix = null; 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是我们从json获得的图像的URL。

编译aremos:

valac --pkg gtk + -3.0 --pkg libsoup-2.4 --pkg json-glib-1.0 customername.vala
我们可以找到json-glib的文档 信息.

Tips

可以帮助我们创建客户/应用程序的一些技巧:

应用指标

AppIndicator是一个库,通过它我们可以将程序作为指示符显示在上部面板中(在Elementary os和Ubuntu中)。

安装appindicator3-0.1

须藤apt-get install 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 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类的构造函数开始:

尝试{//图片目录this.icon = new Gdk.Pixbuf.from_file(“ fcbb.png”); } catch(错误e){stderr.printf(“错误:%s \ n”,e.message); }

从2014-02-23 15:44:00捕获

简单图片

vala中的一个简单图像,我们可以将其放置在布局中。

图片=新的Gtk.Image(); image.set_from_file(“ fcb.png”);

fcb

视图

对客户使用vala和gtk? 不,从我的角度来看,使用c ++和Qt(QML)会更好,更容易,有待撰写一篇文章来介绍如何使用QML进行客户端开发。


2条评论,留下您的评论

发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   框架

    谢谢carnal😀,很高兴看到有知识的人可以做几行代码。 这个例子为其他事情提供了很多想法

  2.   埃利奥时间3000

    很好的提示,兄弟。

    看看我能不能做一个。