HTTPによるJSONデータの読み込み

HTTPレスポンスの結果を、構造化されたデータとして受け取れるとアプリケーションとしての利用が容易になります。 構造化されたデータをテキストやバイト列に変換することを シリアライゼーション と呼びます。 JSON は構造化データの通信で広く利用されるシリアライゼーション形式の1つです。 JSONは、元々はJavaScriptでのオブジェクトを表記するための形式でしたが、現在では言語を問わずに多くの場面で利用されています。

shibe.online では、画像のURLの情報をJSON形式で取得することができます。 例えば以下のURLにアクセスすると、10枚の画像のURLを、文字列の配列構造をしたJSON形式で取得することができます。

http://shibe.online/api/shibes?count=10&urls=true&httpsUrls=false

以下は、shibe.online から画像のURLを取得してコンソールに表示するプログラムです。

import processing.net.*;

size(400, 400);

Client client = new Client(this, "shibe.online", 80);
client.write("GET /api/shibes?count=10&urls=true&httpsUrls=false HTTP/1.1\r\n");
client.write("Host: shibe.online\r\n");
client.write("\r\n");

while (client.active()) {
  if (client.available() > 0) {
    String line = client.readStringUntil('\n');
    print(line);
    if (line != null && line.length() == 2) {
      break;
    }
  }
}

int bufferIndex = 0;
byte[] buffer = new byte[1000000];
while (client.active()) {
  String line = client.readStringUntil('\n');
  int size = unhex(trim(line));
  if (size == 0) {
    break;
  }
  for (int i = 0; i < size; ++i) {
    buffer[bufferIndex++] = (byte)client.read();
  }
  client.readStringUntil('\n');
}
String body = new String(buffer, 0, bufferIndex);

JSONArray json = parseJSONArray(body);
for (int i = 0; i < json.size(); ++i) {
  String url = json.getString(i);
  println(url);
}

このサイトでは、HTTP/1.1のChunked Transfer形式でJSONデータのレスポンスが行われます。 Chunked Transfer形式では、メッセージボディがいくつかのChunk(かたまり)に分割されます。 各チャンクは、チャンクのサイズを16進数で表した行と、チャンクの中身から構成されます。

results matching ""

    No results matching ""