navigation

О сервисе

Сервис для рендеринга html или url сайтов. Использует PhantomJS для рендеринга html.

Форматы входных и выходных

Поддерживается несколько источников данных для рендеринга:

  • url
  • custom html
  • handlebars template

Результат может быть возвращен в форматах:

  • HTML (например чтобы отработал angularjs шаблон)
  • PDF
  • PNG / JPG

Запросы

Нужно сделать POST запрос на url http://apis.garpun.com/sitepreview/v1/render

Content-Type: application/json Тело запроса должно быть json формата

Для рендеринга url

{
    "dataProvider": {
        "type": "url",
        "source": "http://ya.ru"
    },
    "timeout": 1000,
    "format": "png",
    "zoomFactor": 1,
    "viewportSize": {
        "width": 240,
        "height": 400,
    },
    "clipRect": {
        "left": 0,
        "top": 0,
        "width": 240,
        "height": 400,
    }
}

Для рендеринга html

{
    "dataProvider": {
        "type": "html",
        "source": "<h1>My super HTML</h1>"
    },
    "timeout": 1000,
    "format": "png",
    "zoomFactor": 1,
    "viewportSize": {
        "width": 240,
        "height": 400,
    },
    "clipRect": {
        "left": 0,
        "top": 0,
        "width": 240,
        "height": 400,
    }
}

Для рендеринга template

{
    "dataProvider": {
        "type": "template",
        "source": "<h1>{{my_var}} - {{first.test_passed}}</h1>",
        "context": {
            "my_var": "123",
            "first": {
                "test_passed": "Test Passed!"
            }
        }
    },
    "timeout": 1000,
    "format": "png",
    "zoomFactor": 1,
    "viewportSize": {
        "width": 240,
        "height": 400,
    },
    "clipRect": {
        "left": 0,
        "top": 0,
        "width": 240,
        "height": 400,
    }
}

Пример кода на Python3

import base64
import json
import os

import requests

dir_path = os.path.dirname(os.path.realpath(__file__)) + "/"

w = 240
h = 400

zoomFactor = 1
w *= zoomFactor
h *= zoomFactor
img_format = "png"
resp = requests.post('http://apis.garpun.com/sitepreview/v1/render', json.dumps({
    "dataProvider": {
        "type": "url",
        "source": "http://ya.ru",
    },
    "timeout": 1000,
    "format": img_format,
    "zoomFactor": zoomFactor,
    "viewportSize": {
        "width": w,
        "height": h,
    },
    "clipRect": {
        "left": 0,
        "top": 0,
        "width": w,
        "height": h,
    }
}))

api_resp = resp.json()

for k, v in api_resp.items():
    print("%s = %s" % (k, v))

load_success = api_resp['base64Content']
bytes_ = base64.b64decode(load_success)

f = open(dir_path + "load_success_output_img." + img_format, "wb")
f.write(bytes_)
f.close()