클라이언트 생성 [Vala 및 Gtk 3]

일반적으로 Linux에서는 상당수의 애플리케이션 또는 다른 플랫폼에 대해 훨씬 일찍 나온 일부 서비스의 클라이언트가 누락됩니다.이 자습서에서는 가치가있는 REST API를 사용하여 클라이언트를 만드는 방법 (훨씬 위의 비전)을 볼 수 있기 때문입니다 (그리고 gtk 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

이름, 설명, 썸네일 (캐릭터 이미지)을 제공하는 것을 볼 수 있습니다.

놀라운 웹 개발

vala (Parseando)로 JSON 처리.

형식이 무엇인지 설명하지 않습니다. JSON, 온라인으로 정보를 찾을 수 있습니다. Vala에서 만든 간단한 예를 찾을 수 있습니다. 여기에.

우선 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 = new Soup.SessionSync (); var message = new Soup.Message ( "GET", uri); session.send_message (메시지);

URL은 10 일 (2-00-03, 2014-16-03) 사이에 나온 만화를 최대 2014 개까지 표시합니다.
먼저 세션을 생성 한 다음 GET 유형의 요청을 작성하여 전송합니다.

Parseying json :

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

주요 객체, 즉 모든 json 코드를 가져옵니다.

var response = root_object.get_object_member ( "데이터"); var results = response.get_array_member ( "results");

우리는 잡을 수 있습니다

코드 처리 :

foreach (results.get_elements ()의 var geonode) {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? pix = null; var file = File.new_for_uri (URL); {GLib.InputStream @input_stream = yield file.read_async (Priority.DEFAULT, null); pix = 새 Gdk.Pixbuf.from_stream_at_scale_async 생성 (input_stream, 800, 600, true, null); } catch (오류 e) {경고 (e.message); } return pix; }

호출 할 때 다른 스레드 (비동기)에서 실행되는 메서드이기 때문에 다음과 같이해야합니다.

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

여기서 img_url은 json에서 가져온 이미지의 URL입니다.

aremos를 컴파일하려면 :

valac --pkg gtk + -3.0 --pkg libsoup-2.4 --pkg json-glib-1.0 customername.vala
json-glib에 대한 문서를 찾을 수 있습니다. 여기에.

방문 꿀팁

클라이언트 / 애플리케이션을 만드는 데 도움이되는 몇 가지 팁 :

AppIndicator

AppIndicator는 프로그램을 상단 패널 (Elementary os 및 Ubuntu 모두)에 표시기로 넣을 수있는 라이브러리입니다.

appindicator3-0.1 설치

sudo apt-get 설치 libappindicator3-dev

컴파일 :

발락 -pkg gtk + -3.0 --pkg 표시기3-0.1 program.vala

오류가 발생하는 경우 최신 버전의 appindicator가 있기 때문일 수 있습니다.이 경우 / usr / share / vala / vapi로 이동하면 버전이 무엇인지 확인할 수 있습니다.

2014-02-23 15:30:57 캡처

우리는 다음에서 예를 찾을 수 있습니다. Ubuntu 개발 웹 사이트.

약간의 예 :

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 ( "새 연락처 추가"); 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 (항목); indicator.set_menu (메뉴);

형상

응용 프로그램에 아이콘을 넣으십시오.

Gtk.Window 클래스의 생성자에서 시작합니다.

try {// 이미지 디렉토리 this.icon = new Gdk.Pixbuf.from_file ( "fcbb.png"); } catch (오류 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에서 클라이언트를 만드는 기사를 작성하는 것이 보류 중입니다.


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   마르코스

    고맙습니다 😀, 지식이있을 때 "몇 줄의 코드"가 무엇을 할 수 있는지 보는 것은 좋습니다. 이 예는 다른 것들에 대한 많은 아이디어를 제공합니다 😀

  2.   엘리오타임3000

    아주 좋은 팁, 친구.

    내가 만들 수 있는지 확인하십시오.