通常,在Linux中,我们会错过很多应用程序或某些服务的客户端,而这些应用程序早于其他平台推出,因为在本教程中,我们将了解如何通过使用来创建客户端(这是远景)。带有值的REST API(和gtk 3)。
API
我不会解释什么是API,或者什么是REST API(您可以在google中找到很多信息),我只是说大概我们会发出一些请求(GET或POST),它将返回JSON格式的响应。
对于本教程,我决定使用它提供给我们的API 奇迹 (请参阅api文档),它为我们提供了有关漫画,角色的一系列信息...
要访问它,我们需要一个可以通过注册获得的密钥,一旦获得,我们将限制3000个请求。
让我们看一下API的示例,要调用此api,我们必须使用我们的密钥(我们有一个公共密钥和一个私有密钥):
为了看到这个简单的例子,我们可以使用 md5.net 我们在其中放置1个“ +” keyprivate“ +” keypublic并生成哈希值,我们可以像在图像中一样调用它。 我们将得到答案(在这种情况下,是看到字符):
浏览器有一些程序和插件可以简化json的查看:
我们可以看到它为我们提供了名称,描述,缩略图(字符的图像)...
用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
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,您将看到您的版本。
我们可以在 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类的构造函数开始:
尝试{//图片目录this.icon = new Gdk.Pixbuf.from_file(“ fcbb.png”); } catch(错误e){stderr.printf(“错误:%s \ n”,e.message); }
简单图片
vala中的一个简单图像,我们可以将其放置在布局中。
图片=新的Gtk.Image(); image.set_from_file(“ fcb.png”);
视图
对客户使用vala和gtk? 不,从我的角度来看,使用c ++和Qt(QML)会更好,更容易,有待撰写一篇文章来介绍如何使用QML进行客户端开发。
谢谢carnal😀,很高兴看到有知识的人可以做几行代码。 这个例子为其他事情提供了很多想法
很好的提示,兄弟。
看看我能不能做一个。