יצירת לקוחות [Vala ו- Gtk 3]

בדרך כלל בלינוקס אנחנו מתגעגעים לא מעט יישומים, או לקוחות של כמה שירותים שיוצאים הרבה יותר מוקדם לפלטפורמות אחרות, מכיוון שבמדריך זה נראה כיצד ליצור לקוח (זה יהיה חזון הרבה למעלה), באמצעות REST API עם ערך (ו- gtk 3).

API

אני לא מתכוון להסביר מהו API, או מהו ה- API של REST (אתה יכול למצוא מידע רב בגוגל), אני רק אומר שכבערך נגיע לבקשות מסוימות (GET או POST) והוא יחזיר תגובה בפורמט JSON.

לצורך ההדרכה החלטתי להשתמש ב- API שהוא מספק לנו מארוול (ראה תיעוד ה- API), המספק לנו סדרת מידע על קומיקס, דמויות ...

כדי לגשת אליו אנו זקוקים למפתח, אותו אנו יכולים להשיג באמצעות רישום, לאחר שהושג יש לנו מגבלה של 3000 בקשות.

בואו נראה דוגמה ל- API, כדי לקרוא ל- API הזה עלינו להשתמש במפתחות שלנו (יש לנו ציבורי ופרטי):

m

כדי לראות את הדוגמה הפשוטה הזו נוכל להשתמש www.md5.net כאשר אנו שמים 1 "+" keyprivate "+" keypublic וזה מייצר את החשיש, אנחנו יכולים לקרוא לזה כמו שאומר בתמונה. נקבל את התשובה (במקרה זה לראות את הדמויות):

יש שגיאה בתמונה השיחה תהיה http://gateway.marvel.com/v1/ציבורי/ קומיקס ...

mm

ישנן תוכניות ותוספים לדפדפנים אשר יקלו על הצגתו של json:

m1

אנו יכולים לראות שזה נותן לנו את השם, את התיאור, תמונה ממוזערת (תמונה של הדמות) ...

פלא פלאפון

טיפול ב- JSON בוואלה (Parseando).

אני גם לא אסביר מהם הפורמטים ג'סון, תוכל למצוא מידע באופן מקוון. אנו יכולים למצוא דוגמה פשוטה המיוצרת בוואלה כאן.

קודם כל אנו מתקינים את ספריית json-glib למקרה שלא מותקנת בה:

sudo apt-get install 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 = Soup.Message חדש ("GET", uri); session.send_message (הודעה);

כתובת האתר תציג לנו מקסימום 10 קומיקס שהופיעו בין שני תאריכים (2-00-03, 2014-16-03).
קודם כל אנו יוצרים הפעלה, ואז בונים את הבקשה מסוג GET ושולחים אותה.

גניבת ג'ונסון:

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

מקבל את האובייקט הראשי כלומר את כל קוד ה- json.

var response = 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 ("תיאור")); }

אתה יכול לראות דוגמאות כאן.

הצגת המידע:

כאן אנו יכולים לבחור כיצד להציג את המידע ולהוריד את התמונות באמצעות שיטה זו:

אסינכרון סטטי ציבורי Gdk.Pixbuf? get_img (url מחרוזת) {Gdk.Pixbuf? pix = null; קובץ var = File.new_for_uri (url); נסה את {GLib.InputStream @input_stream = file.read_async (Priority.DEFAULT, null); pix = תשואה Gdk.Pixbuf.from_stream_at_scale_async חדש (input_stream, 800, 600, true, null); } לתפוס (שגיאה ה) {אזהרה (למשל. הודעה); } להחזיר פיקס; }

בהיותנו שיטה שמבוצעת בשרשור אחר (אסינכרוני) כשקוראים לזה עלינו לעשות זאת כך:

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

איפה img_url הוא כתובת האתר של התמונה שאנו מקבלים מה- json.

להרכבת ארמוסים:

valac --pkg gtk + -3.0 --pkg libsoup-2.4 --pkg json-glib-1.0 שם מותאם אישית.
אנו יכולים למצוא תיעוד ל- json-glib כאן.

טיפים

כמה טיפים שיכולים לעזור לנו ליצור את הלקוח / היישום שלנו:

AppIndicator

AppIndicator היא ספרייה שמאפשרת לנו לשים את התוכנית שלנו כמדד בחלונית העליונה (גם ביסודי וגם באובונטו).

התקנת appindicator3-0.1

sudo apt-get התקנת libappindicator3-dev

קומפילציה:

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

אם אתה מקבל שגיאה, ייתכן כי יש לך גרסה חדשה יותר של appindicator, במקרה זה עבור אל / usr / share / vala / vapi ותראה מהי הגרסה שלך.

לכידה מ 2014-02-23 15:30:57

אנו יכולים למצוא דוגמה ב- אתר הפיתוח של אובונטו.

דוגמה קטנה:

לכידה מ 2014-02-23 17:04:52

מחוון var = מחוון חדש ("win.title", "פנקס כתובות משרד", IndicatorCategory.APPLICATION_STATUS); indicator.set_status (IndicatorStatus.ACTIVE); תפריט var = Gtk.Menu חדש (); var item = 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 (פריט); indicator.set_menu (תפריט);

תמונות

הכניסו אייקון ליישום שלנו:

אנחנו מתחילים מהבנאי של הכיתה Gtk.Window:

נסה את {// ספריית התמונות this.icon = new Gdk.Pixbuf.from_file ("fcbb.png"); } לתפוס (שגיאה e) {stderr.printf ("שגיאה:% s \ n", e.message); }

לכידה מ 2014-02-23 15:44:00

תמונה פשוטה

תמונה פשוטה בוואלה שנוכל להכניס למשל לפריסה.

תמונה = Gtk.Image חדש (); image.set_from_file ("fcb.png");

fcb

חוות דעת

להשתמש בוואלה ו- gtk עבור לקוחות? לא, מנקודת דעתי זה הרבה יותר טוב וקל יותר להשתמש ב- c ++ ו- Qt (QML), זה ממתין לעשות מאמר כדי להפוך לקוחות ל QML.


השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   מרקוס דיג'ו

    תודה גשמית 😀, נהדר לראות מה יכול לעשות "כמה שורות קוד" כשיש לך ידע. הדוגמה נותנת רעיונות רבים לדברים אחרים 😀

  2.   אליוטיים 3000 דיג'ו

    טיפים טובים מאוד, אחי.

    תבדוק אם אוכל להכין כזה.