تكوين العملاء [Vala و Gtk 3]

عادةً ما نفتقد في Linux عددًا قليلاً جدًا من التطبيقات أو عملاء بعض الخدمات التي ظهرت في وقت مبكر جدًا للأنظمة الأساسية الأخرى ، لأنه في هذا البرنامج التعليمي سنرى كيفية إنشاء عميل (ستكون رؤية أعلى بكثير) ، باستخدام REST API ذات قيمة (و gtk 3).

API

لن أشرح ما هي واجهة برمجة التطبيقات ، أو ما هي واجهة برمجة تطبيقات REST (يمكنك العثور على الكثير من المعلومات في google) ، سأقول فقط أننا سنقدم بعض الطلبات تقريبًا (GET أو POST) وسيعيد الرد بتنسيق JSON.

بالنسبة للبرنامج التعليمي ، فقد قررت استخدام واجهة برمجة التطبيقات التي توفرها لنا مارفيل (راجع وثائق API) ، والتي تزودنا بسلسلة من المعلومات حول الرسوم الهزلية والشخصيات ...

للوصول إليه ، نحتاج إلى مفتاح ، يمكننا الحصول عليه من خلال التسجيل ، بمجرد الحصول عليه ، لدينا حد 3000 طلب.

دعونا نرى مثالاً لواجهة برمجة التطبيقات ، لاستدعاء هذا API ، يتعين علينا استخدام مفاتيحنا (لدينا مفتاح عام وآخر خاص):

m

لرؤية هذا المثال البسيط يمكننا استخدامه www.md5.net حيث نضع 1 "+" keyprivate "+" keypublic وهذا يولد التجزئة ، يمكننا تسميته كما هو موضح في الصورة. سنحصل على الجواب (في هذه الحالة هو رؤية الأحرف):

يوجد خطأ في الصورة ستكون المكالمة http://gateway.marvel.com/v1/جمهور/ كاريكاتير ...

mm

هناك برامج وإضافات للمتصفحات من شأنها تسهيل عرض json:

m1

يمكننا أن نرى أنه يعطينا الاسم والوصف والصورة المصغرة (صورة الشخصية) ...

أعجوبة تطوير الويب

علاج JSON مع vala (Parseando).

ولن أشرح ما هي التنسيقات جسون، يمكنك العثور على المعلومات عبر الإنترنت. يمكننا العثور على مثال بسيط صنع في فالا هنا.

بادئ ذي بدء ، نقوم بتثبيت مكتبة json-glib في حالة عدم تثبيتها:

sudo apt-get install libjson-glib-1.0-0 libjson-glib-1.0-0-dev

سنقوم أيضًا بتثبيت libsoup:

sudo apt-get install 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 ("GET" ، uri) ؛ session.send_message (رسالة) ؛

سيظهر لنا عنوان url بحد أقصى 10 رسوم هزلية ظهرت بين تاريخين (2-00 ، 03-2014-16).
بادئ ذي بدء ، نقوم بإنشاء جلسة ، ثم نقوم ببناء طلب من نوع 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 ("النتائج") ؛

يمكننا اللحاق

معالجة الكود:

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"))؛ }

تستطيع أن ترى أمثلة هنا.

عرض المعلومات:

هنا ندخل بالفعل كيف نعرض المعلومات ، لتنزيل الصور يمكننا استخدام هذه الطريقة:

عام ثابت غير متزامن Gdk.Pixbuf؟ get_img (سلسلة url) {Gdk.Pixbuf؟ بيكسل = خالية ؛ var file = File.new_for_uri (url) ، جرب {GLib.InputStreaminput_stream = إنتاج ملف .read_async (Priority.DEFAULT، null) ؛ pix = إنتاج جديد Gdk.Pixbuf.from_stream_at_scale_async (input_stream، 800، 600، true، null) ؛ } catch (Error e) {warning (e.message)؛ } عودة بيكسل؛ }

لكونها طريقة يتم تنفيذها في مؤشر ترابط آخر (غير متزامن) عند استدعائها ، يتعين علينا القيام بذلك بهذه الطريقة:

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 customername.vala
يمكننا العثور على وثائق لـ json-glib هنا.

تنويهات

بعض النصائح التي يمكن أن تساعدنا في إنشاء عميل / تطبيق خاص بنا:

AppIndicator

AppIndicator هي مكتبة تسمح لنا بوضع برنامجنا كمؤشر في اللوحة العلوية (في كل من Elementary و Ubuntu).

تثبيت appindicator3-0.1

sudo apt-get install libappindicator3-dev

تجميع:

فالاك - pkg gtk + -3.0 - appindicator3-0.1 program.vala

في حالة ظهور خطأ ، فقد يكون ذلك بسبب وجود إصدار أحدث من appindicator ، في هذه الحالة انتقل إلى / usr / share / vala / vapi وسترى ما هو إصدارك.

لقطة من 2014/02/23 15:30:57

يمكننا العثور على مثال في موقع تطوير أوبونتو.

مثال صغير:

لقطة من 2014/02/23 17:04:52

var index = مؤشر جديد ("win.title"، "office-address-book"، IndicatorCategory.APPLICATION_STATUS) ؛ index.set_status (IndicatorStatus.ACTIVE) ؛ قائمة var = 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 (عنصر) ؛ index.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 يمكننا وضعها على سبيل المثال في التخطيط.

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

نادي برشلونة

رأي

استخدام vala و gtk للعملاء؟ لا ، من وجهة نظري ، من الأفضل والأسهل استخدام c ++ و Qt (QML) ، من المعلق عمل مقال لجعل العملاء في QML.


اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   ماركوس قال

    شكرًا جسديًا 😀 ، إنه لأمر رائع أن ترى ما يمكن أن تفعله "بضعة أسطر من التعليمات البرمجية" عندما تكون لديك معرفة. يعطي المثال العديد من الأفكار لأشياء أخرى 😀

  2.   إليوتيمي 3000 قال

    نصائح جيدة جدا يا أخي.

    انظر إذا كان بإمكاني صنع واحدة.