ایجاد مشتری [والا و Gtk 3]

به طور معمول در لینوکس ، تعداد کمی از برنامه ها یا سرویس گیرنده های برخی سرویس ها را که خیلی زودتر برای سیستم عامل های دیگر ارائه می شوند ، از دست می دهیم ، زیرا در این مقاله آموزشی ، نحوه ایجاد سرویس گیرنده (این یک چشم انداز بسیار بالاتر است) ، با استفاده از REST API با ارزش (و 3)

API

من نمی خواهم توضیح دهم که API چیست ، یا REST API چیست (شما می توانید بسیاری از اطلاعات را در google پیدا کنید) ، فقط می گویم که تقریباً برخی از درخواست ها را خواهیم کرد (GET یا POST) و پاسخ شما را در قالب JSON برمی گرداند.

برای آموزش تصمیم گرفته ام از api که در اختیار ما قرار می دهد استفاده کنم تعجب (به اسناد api مراجعه کنید) ، که یک سری اطلاعات در مورد کمیک ، شخصیت ها به ما ارائه می دهد ...

برای دسترسی به آن به یک کلید احتیاج داریم که می توانیم با ثبت نام آن را بدست آوریم ، پس از بدست آوردن محدودیت 3000 درخواست.

ما می خواهیم نمونه ای از API را ببینیم ، برای فراخوانی این api باید از کلیدهای خود استفاده کنیم (یک کلید عمومی و خصوصی داریم):

m

برای دیدن این مثال ساده می توانیم استفاده کنیم www.md5.net جایی که ما 1 "+" keyprivate "+" keypublic قرار می دهیم و هش تولید می کند ، می توانیم همانطور که در تصویر قرار می گیرد فراخوانی کنیم. ما جواب خواهیم گرفت (در این حالت دیدن شخصیت ها است):

خطایی در تصویر وجود دارد: http://gateway.marvel.com/v1/عمومی/ طنز ...

mm

برنامه ها و افزونه هایی برای مرورگرها وجود دارد که مشاهده json را تسهیل می کند:

m1 می توانیم ببینیم که این نام ، توضیحات ، تصویر کوچک (تصویر شخصیت) را به ما می دهد ...

توسعه وب شگفت انگیز

درمان JSON با vala (پارساندو).

و همچنین توضیح نمی دهم که قالب ها چیست 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 = 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.

پاسخ = root_object.get_object_member ("داده")؛ 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 ("توضیحات"))؛ }

نمونه هایی از آن را مشاهده می کنید اینجا.

نمایش اطلاعات:

در اینجا ما قبلاً مطابق میل خود نحوه نمایش اطلاعات را برای بارگیری تصاویری که می توانیم از این روش استفاده کنیم ، وارد می کنیم:

عمومی استاتیک async Gdk.Pixbuf؟ get_img (آدرس رشته) {Gdk.Pixbuf؟ pix = null ؛ پرونده var = File.new_for_uri (url)؛ سعی کنید {GLib.InputStreaminput_stream = yield file.read_async (Priority.DEFAULT ، null)؛ pix = عملکرد جدید Gdk.Pixbuf.from_stream_at_scale_async (ورودی_استریم ، 800 ، 600 ، درست ، تهی)؛ } گرفتن (خطای e) {هشدار (e.message)؛ } پیکسل بازگشتی؛ }

به عنوان یک روش که در هنگام فراخوانی در یک موضوع دیگر (ناهمزمان) اجرا می شود ، باید این روش را انجام دهیم:

get_img.begin (img_url، (obj، res) => {var pix = get_img.end (res)؛})؛

جایی که img_url آدرس تصویری است که از json می گیریم.

برای کامپایل aremos:

valac --pkg gtk + -3.0 - pkg libsoup-2.4 - pkg json-glib-1.0 نام سفارشی. vala
ما می توانیم اسنادی را برای json-glib پیدا کنیم اینجا.

نکات

نکاتی که می توانند به ما در ایجاد مشتری / برنامه خود کمک کنند:

AppIndicator

AppIndicator کتابخانه ای است که به ما امکان می دهد برنامه خود را به عنوان شاخص در پانل بالا (هم در Elementary os و هم در Ubuntu) قرار دهیم.

نصب appindicator3-0.1

sudo apt-get نصب libappindicator3-dev

تدوین:

valac - pkg gtk + -3.0 --pkg appindicator3-0.1 برنامه والا

در صورت خطا ، ممکن است به این دلیل باشد که نسخه جدیدتری از appindicator را در اختیار دارید ، در این حالت به / usr / share / vala / vapi بروید و خواهید دید که نسخه شما چیست.

گرفتن از 2014-02-23 15:30:57

ما می توانیم یک مثال در وب سایت توسعه اوبونتو.

یک مثال کوچک:

گرفتن از 2014-02-23 17:04:52

 

var treg = شاخص جدید ("win.title" ، "office-address-book"، IndicatorCategory.APPLICATION_STATUS)؛ indicator.set_status (IndicatorStatus.ACTIVE)؛ var menu = Gtk.Menu جدید ()؛ var item = new Gtk.MenuItem.with_label ("افزودن مخاطب جدید")؛ item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION)؛ // CreateContact ()؛})؛ item.show ()؛ menu.append (مورد)؛ مورد = Gtk.MenuItem.with_label جدید ("حذف مخاطب")؛ item.show ()؛ item.activate.connect (() => {//indicator.set_status(IndicatorStatus.ATTENTION)؛ // DeleteContact ()؛})؛ menu.append (مورد)؛ menu.set_menu (فهرست)؛

شبیه سازی

یک نماد در برنامه ما قرار دهید:

ما از سازنده کلاس Gtk.Window شروع می کنیم:

سعی کنید {// فهرست تصویر this.icon = new Gdk.Pixbuf.from_file ("fcbb.png")؛ } catch (Error 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. مسئول داده ها: میگل آنخل گاتون
  2. هدف از داده ها: کنترل هرزنامه ، مدیریت نظرات.
  3. مشروعیت: رضایت شما
  4. ارتباط داده ها: داده ها به اشخاص ثالث منتقل نمی شوند مگر با تعهد قانونی.
  5. ذخیره سازی داده ها: پایگاه داده به میزبانی شبکه های Occentus (EU)
  6. حقوق: در هر زمان می توانید اطلاعات خود را محدود ، بازیابی و حذف کنید.

  1.   مارکوس dijo

    با تشکر از نفس 😀 ، دیدن اینکه "چند خط کد" وقتی دانش دارید چه کاری می تواند انجام دهد بسیار عالی است. مثال ایده های زیادی برای چیزهای دیگر می دهد ...

  2.   eliotime3000 dijo

    نکات خیلی خوبی ، داداش

    ببینید آیا می توانم یکی درست کنم؟