به طور معمول در لینوکس ، تعداد کمی از برنامه ها یا سرویس گیرنده های برخی سرویس ها را که خیلی زودتر برای سیستم عامل های دیگر ارائه می شوند ، از دست می دهیم ، زیرا در این مقاله آموزشی ، نحوه ایجاد سرویس گیرنده (این یک چشم انداز بسیار بالاتر است) ، با استفاده از REST API با ارزش (و 3)
API
من نمی خواهم توضیح دهم که API چیست ، یا REST API چیست (شما می توانید بسیاری از اطلاعات را در google پیدا کنید) ، فقط می گویم که تقریباً برخی از درخواست ها را خواهیم کرد (GET یا POST) و پاسخ شما را در قالب JSON برمی گرداند.
برای آموزش تصمیم گرفته ام از api که در اختیار ما قرار می دهد استفاده کنم تعجب (به اسناد api مراجعه کنید) ، که یک سری اطلاعات در مورد کمیک ، شخصیت ها به ما ارائه می دهد ...
برای دسترسی به آن به یک کلید احتیاج داریم که می توانیم با ثبت نام آن را بدست آوریم ، پس از بدست آوردن محدودیت 3000 درخواست.
ما می خواهیم نمونه ای از API را ببینیم ، برای فراخوانی این api باید از کلیدهای خود استفاده کنیم (یک کلید عمومی و خصوصی داریم):
برای دیدن این مثال ساده می توانیم استفاده کنیم www.md5.net جایی که ما 1 "+" keyprivate "+" keypublic قرار می دهیم و هش تولید می کند ، می توانیم همانطور که در تصویر قرار می گیرد فراخوانی کنیم. ما جواب خواهیم گرفت (در این حالت دیدن شخصیت ها است):
برنامه ها و افزونه هایی برای مرورگرها وجود دارد که مشاهده json را تسهیل می کند:
درمان 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
نکات
نکاتی که می توانند به ما در ایجاد مشتری / برنامه خود کمک کنند:
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 بروید و خواهید دید که نسخه شما چیست.
ما می توانیم یک مثال در وب سایت توسعه اوبونتو.
یک مثال کوچک:
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)؛ }
تصویر ساده
یک تصویر ساده در vala که می توانیم برای مثال در یک طرح قرار دهیم.
تصویر = Gtk.Image جدید ()؛ image.set_from_file ("fcb.png") ؛
نظر
از vala و gtk برای مشتری استفاده می کنید؟ خیر ، از نظر من استفاده از c ++ و Qt (QML) بسیار بهتر و آسان تر است ، در انتظار انجام مقاله ای برای ایجاد مشتری در QML است.
2 نظر ، نظر خود را بگذارید
با تشکر از نفس 😀 ، دیدن اینکه "چند خط کد" وقتی دانش دارید چه کاری می تواند انجام دهد بسیار عالی است. مثال ایده های زیادی برای چیزهای دیگر می دهد ...
نکات خیلی خوبی ، داداش
ببینید آیا می توانم یکی درست کنم؟