Tạo khách hàng [Vala và Gtk 3]

Thông thường trong Linux, chúng tôi bỏ lỡ khá nhiều ứng dụng hoặc ứng dụng khách của một số dịch vụ ra mắt sớm hơn nhiều cho các nền tảng khác, bởi vì trong hướng dẫn này, chúng ta sẽ thấy cách tạo ứng dụng khách (sẽ là một tầm nhìn xa hơn), bằng cách sử dụng API REST với giá trị (và gtk 3).

API

Tôi sẽ không giải thích API là gì hay API REST là gì (bạn có thể tìm thấy rất nhiều thông tin trên google), tôi chỉ nói rằng đại khái là chúng tôi sẽ đưa ra một số yêu cầu (GET hoặc POST) và nó sẽ trả lại phản hồi ở định dạng JSON.

Đối với hướng dẫn, tôi đã quyết định sử dụng api mà nó cung cấp cho chúng tôi kỳ diệu (xem tài liệu api), nơi cung cấp cho chúng ta hàng loạt thông tin về truyện tranh, nhân vật ...

Để truy cập nó, chúng tôi cần một khóa, chúng tôi có thể nhận được bằng cách đăng ký, sau khi có được, chúng tôi có giới hạn 3000 yêu cầu.

Chúng ta sẽ xem một ví dụ về API, để gọi api này, chúng ta phải sử dụng các khóa của mình (chúng ta có một khóa công khai và riêng tư):

m

Để xem ví dụ đơn giản này, chúng ta có thể sử dụng www.md5.net nơi chúng ta đặt 1 keypublic "+" keyprivate "+" và điều đó tạo ra hàm băm, chúng ta có thể gọi nó như trong hình ảnh. Chúng tôi sẽ nhận được câu trả lời (trong trường hợp này là để xem các ký tự):

có lỗi trong hình ảnh cuộc gọi sẽ là http://gateway.marvel.com/v1/công khai/ truyện tranh ...

mm

Có các chương trình và plugin cho các trình duyệt sẽ tạo điều kiện thuận lợi cho việc xem json:

m1

Chúng ta có thể thấy rằng nó cung cấp cho chúng ta tên, mô tả, hình thu nhỏ (hình ảnh của nhân vật) ...

phát triển web kỳ diệu

Xử lý JSON bằng vala (Parseando).

Tôi cũng sẽ không giải thích các định dạng là gì json, bạn có thể tìm thông tin trực tuyến. Chúng ta có thể tìm thấy một ví dụ đơn giản được thực hiện ở Vala đây.

Trước hết, chúng tôi cài đặt thư viện json-glib trong trường hợp chúng tôi chưa cài đặt nó:

sudo apt-get cài đặt libjson-glib-1.0-0 libjson-glib-1.0-0-dev

Chúng tôi cũng sẽ cài đặt libsoup:

sudo apt-get cài đặt libsoup-2.4 libsoup2.4-dev
Tôi sẽ không đặt cả khóa công khai và mã băm cho các yêu cầu

Trước hết, chúng tôi nhập các thư viện mà chúng tôi sẽ sử dụng:

sử dụng Soup; sử dụng Json; sử dụng Gtk;

Gửi yêu cầu:

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 (tin nhắn);

Url sẽ hiển thị cho chúng ta tối đa 10 truyện tranh được phát hành trong khoảng thời gian từ 2 ngày (00-03-2014, 16-03-2014).
Trước hết, chúng tôi tạo một phiên, sau đó chúng tôi xây dựng yêu cầu của loại GET và gửi nó.

Phân tích cú pháp json:

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

lấy đối tượng chính, tức là tất cả mã json.

var response = root_object.get_object_member ("dữ liệu"); var results = response.get_array_member ("kết quả");

Chúng ta có thể bắt

Xử lý mã:

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

Bạn có thể xem các ví dụ đây.

Hiển thị thông tin:

Ở đây, chúng tôi đã nhập cách chúng tôi muốn hiển thị thông tin, để tải xuống hình ảnh, chúng tôi có thể sử dụng phương pháp này:

public static async Gdk.Pixbuf? get_img (url chuỗi) {Gdk.Pixbuf? pix = null; var file = File.new_for_uri (url); thử {GLib.InputStream @input_stream = yiu file.read_async (Priority.DEFAULT, null); pix = tạo ra Gdk mới.Pixbuf.from_stream_at_scale_async (input_stream, 800, 600, true, null); } catch (Error e) {warning (e.message); } trả về pix; }

Là một phương thức được thực thi trong một luồng khác (không đồng bộ) khi gọi nó, chúng ta phải thực hiện theo cách này:

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

Trong đó img_url là url của hình ảnh mà chúng ta lấy từ json.

Để biên dịch aremos:

valac --pkg gtk + -3.0 --pkg libsoup-2.4 --pkg json-glib-1.0 customername.vala
Chúng tôi có thể tìm tài liệu cho json-glib đây.

Lời khuyên

Một số Mẹo có thể giúp chúng tôi tạo ứng dụng / khách hàng của mình:

Chỉ báo ứng dụng

AppIndicator là một thư viện cho phép chúng tôi đặt chương trình của mình như một chỉ báo trong bảng điều khiển phía trên (cả trong Elementary os và Ubuntu).

Cài đặt appindicator3-0.1

Sudo apt-get cài đặt libappindicator3-dev

Biên dịch:

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

Trong trường hợp bạn gặp lỗi, có thể do bạn có phiên bản ứng dụng mới hơn, trong trường hợp đó, hãy truy cập / usr / share / vala / vapi và bạn sẽ thấy phiên bản của mình là gì.

Chụp từ 2014-02-23 15:30:57

Chúng ta có thể tìm thấy một ví dụ trong Trang web phát triển Ubuntu.

Một ví dụ nhỏ:

Chụp từ 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 ("Thêm liên hệ mới"); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // CreateContact ();}); item.show (); menu.append (item); item = new Gtk.MenuItem.with_label ("Xóa liên hệ"); item.show (); item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION); // DeleteContact ();}); menu.append (item); indicator.set_menu (menu);

Hình ảnh

Đặt một biểu tượng trong ứng dụng của chúng tôi:

Chúng ta bắt đầu từ hàm tạo của lớp Gtk.Window:

try {// Thư mục hình ảnh this.icon = new Gdk.Pixbuf.from_file ("fcbb.png"); } catch (Lỗi e) {stderr.printf ("error:% s \ n", e.message); }

Chụp từ 2014-02-23 15:44:00

Hình ảnh đơn giản

Một hình ảnh đơn giản trong vala mà chúng ta có thể đặt ví dụ trong bố cục.

image = new Gtk.Image (); image.set_from_file ("fcb.png");

fcb

Ý kiến

Sử dụng vala và gtk cho khách hàng? không, theo quan điểm của tôi thì việc sử dụng c ++ và Qt (QML) sẽ tốt hơn và dễ dàng hơn nhiều, việc tạo client trong QML đang chờ xử lý.


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   marcos dijo

    cảm ơn carnal 😀, thật tuyệt khi bạn có kiến ​​thức "vài dòng mã" có thể làm được gì. ví dụ cho nhiều ý tưởng về những thứ khác 😀

  2.   eliotime3000 dijo

    Mẹo hay lắm anh em ơi.

    Xem nếu tôi có thể làm một cái.