Библиотеки


Garpun DataHub Python Library

Если вы программируете на языке Python, то существует python-библиотека

Библиотека работает на основе google-api-python-client. Это позволяет нам не думать о реализациях авторизации и работе с http, а заниматься бизнес инструментарием.

Вариант вызова через Google Lib Python

GitHub google-api-python-client

import os
import json

DATA_DIR = os.path.join(os.path.dirname(__file__), "data")
AUTHORIZED_USER_FILE = os.path.join(DATA_DIR, "./creds.json") // CHANGE TO YOU PATH

from google.auth.transport.requests import AuthorizedSession
from google.oauth2 import service_account as SA
from metasdk.utils import pretty_json

creds: SA.Credentials = SA.Credentials.from_service_account_file(
  AUTHORIZED_USER_FILE,
  scopes=["datahub"],
)

API_URL = "https://datahub-api.garpun.com/v1/metaql/query"


def do_query(query: str, shard_key: str = None):
  session: AuthorizedSession = AuthorizedSession(credentials=creds)
  resp = session.post(API_URL, json={
    "query": query,
    "shardKey": shard_key
  })

  print("resp = %s" % str(resp))
  print("resp.headers = %s" % str(resp.headers))

  returned_rows = None
  error = None

  if resp.ok:
    returned_rows = 0
    for line in resp.iter_lines():
      returned_rows += 1
      row = json.loads(line)
      print("row = %s" % str(row))
    print("returned_rows = %s" % str(returned_rows))
  else:
    error = resp.json()
    print(pretty_json(error))

  return {"returned_rows": returned_rows, "error": error}

query = """
select id, name from adplatform.client
"""
res = do_query(query)

Вариант вызова через Google Lib Java

GitHub google-auth-library-java

import com.google.api.client.http.*;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.http.json.JsonHttpContent;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.common.collect.ImmutableMap;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Collections;

public class Main {

  public static void main(String[] args) throws Exception {
    String credFilename = "./creds.json"; // CHANGE TO YOU PATH
    GoogleCredentials credentials = GoogleCredentials.fromStream(
        new FileInputStream(credFilename)
    );
    if (credentials.createScopedRequired()) {
      credentials = credentials.createScoped(Collections.singletonList("datahub"));
    }
    credentials.refreshIfExpired();

    HttpTransport transport = new NetHttpTransport();
    HttpCredentialsAdapter httpCredsAdapter = new HttpCredentialsAdapter(credentials);
    HttpRequestFactory requestFactory = transport.createRequestFactory(httpCredsAdapter);

    ImmutableMap<String, String> queryBody = ImmutableMap.of(
        "query", "select id, name from adplatform.client limit 10",
        // "shardKey: "" // Нужно ли вам получать shardKey и как это сделать ищите в документации к методу 
    );

    JsonHttpContent postContent = new JsonHttpContent(new JacksonFactory(), queryBody);
    GenericUrl url = new GenericUrl("https://datahub-api.garpun.com/v1/metaql/query");
    HttpRequest request = requestFactory.buildPostRequest(url, postContent);

    HttpResponse response = request.execute();

    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getContent()));

    while(reader.ready()) {
      String line = reader.readLine();
      System.out.println("line = " + line);
    }
  }
}

Вариант вызова через Google Lib PHP

Важно! Используйте библиотеку версии >= 1.9.0

Работает с использованием Guzzle

GitHub google-auth-library-php

https://github.com/garpun/examples-php

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Google\Auth\Middleware\AuthTokenMiddleware;
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;

$credFileName = "./creds.json"; // CHANGE TO YOU PATH
$jsonKey = json_decode(file_get_contents($credFileName), true);

$creds = new \Google\Auth\OAuth2([
    'audience' => $jsonKey['token_uri'],
    'issuer' => $jsonKey['client_email'],
    'scope' => ['account-management'],
    'signingAlgorithm' => 'RS256',
    'signingKey' => $jsonKey['private_key'],
    'signingKeyId' => $jsonKey['private_key_id'],
    'sub' => null,
    'tokenCredentialUri' => $jsonKey['token_uri'],
]);

$middleware = new AuthTokenMiddleware($creds);
$stack = HandlerStack::create();
$stack->push($middleware);

$client = new Client([
    'handler' => $stack,
    'base_uri' => 'https://datahub-api.garpun.com',
    'auth' => 'google_auth'
]);

$response = $client->post('v1/metaql/query', [
    'json' => [
        "query" => "select id, name from adplatform.client where name is not null",
        "shardKey" => null
    ]
]);

print_r((string)$response->getBody());