placla · API v1 · návody

Návody krok za krokem

Hotové skripty pro blogery, kteří nechtějí programovat — jen zkopírovat, doplnit klíč a nahrát na svůj hosting. Technickou referenci všech funkcí najdete v dokumentaci API.

0. Co potřebujete

  1. Webhosting s PHP — stačí ten, na kterém běží váš blog. Nic se neinstaluje, každý návod je jeden soubor.
  2. API klíč — na PlaCle v nastavení účtu, sekce API klíče. Klikněte na „vytvořit", zvolte oprávnění (pro návody 1 a 5 stačí čtení, návody 2–4 chtějí čtení + zápis) a klíč si hned zkopírujte — zobrazí se jen jednou.
  3. FTP / správce souborů — cokoliv, čím na hosting nahráváte soubory.

Postup je u všech návodů stejný: zkopírujte skript do souboru, nahoře doplňte svůj klíč (a případně e-mail), nahrajte na hosting a otevřete v prohlížeči. Když má běžet opakovaně, nastavíte na hostingu „cron" — návod, jak na to, má každý hosting v nápovědě (v cPanelu je to Cron Jobs / Naplánované úlohy).

Klíč je jako heslo. Nedávejte skripty s klíčem do veřejného git repozitáře a nikomu klíč neposílejte. Kdyby unikl, v nastavení účtu ho jedním klikem zneplatníte a vytvoříte nový.

1. Hlídač poptávek — nové poptávky e-mailem

Co to dělá: každých pár minut se podívá, jestli pro vaše blogy nejsou nové poptávky, a pošle vám je e-mailem. Žádná propásnutá zakázka, žádné obcházení webu.

Potřebujete: klíč s oprávněním čtení.

Krok 1: uložte tento skript jako placla-hlidac.php

<?php
// ============ DOPLŇTE SVOJE ÚDAJE ============
$KLIC  = 'SEM-VLOZTE-SVUJ-API-KLIC';
$EMAIL = '[email protected]';
// =============================================

// pomocná funkce: zavolá PlaCla API
function placla($cesta) {
    global $KLIC;
    $ctx = stream_context_create(['http' => [
        'header' => "Authorization: Bearer {$KLIC}\r\n",
        'ignore_errors' => true, 'timeout' => 20,
    ]]);
    $telo = file_get_contents('https://api.placla.cz/v1' . $cesta, false, $ctx);
    return json_decode((string)$telo, true);
}

// které poptávky už jsme viděli (pamatuje si soubor vedle skriptu)
$pametSoubor = __DIR__ . '/placla-hlidac-pamet.json';
$videno = is_file($pametSoubor) ? (array)json_decode(file_get_contents($pametSoubor), true) : [];

// projít všechny blogy a posbírat nové poptávky
$blogy = placla('/blogs');
$nove = [];
foreach (($blogy['data'] ?? []) as $blog) {
    $poptavky = placla('/blogs/' . $blog['id'] . '/demands');
    if (isset($poptavky['error'])) continue;   // např. blog bez vyplněné ceny se přeskočí
    foreach (($poptavky['data'] ?? []) as $p) {
        if (in_array($p['id'], $videno)) continue;
        $videno[] = $p['id'];
        $nove[] = "• {$p['name']}\n  odměna: {$p['reward']} Kč, rozsah: {$p['ns']} NS"
            . ($p['vip'] ? ' (VIP)' : '')
            . "\n  blog: {$blog['name']}"
            . "\n  klíčová slova: {$p['keywords']}\n";
    }
}
file_put_contents($pametSoubor, json_encode($videno));

// poslat mail (jen když něco nového je)
if ($nove) {
    $text = "Nové poptávky na PlaCle:\n\n" . implode("\n", $nove)
        . "\nNabídnout je můžete na https://sluzba.placla.cz/bloger/\n";
    mail($EMAIL, 'PlaCla: ' . count($nove) . ' nových poptávek', $text,
        "Content-Type: text/plain; charset=UTF-8\r\n");
    echo 'Posláno: ' . count($nove) . " nových poptávek\n";
} else {
    echo "Nic nového.\n";
}

Krok 2: nahrajte a vyzkoušejte

Nahrajte soubor na hosting a otevřete ho v prohlížeči (https://vas-web.cz/placla-hlidac.php). Poprvé napíše „Posláno" a přijde vám e-mail se všemi aktuálními poptávkami — to je v pořádku, skript se je právě naučil. Od té doby hlásí jen nové.

Krok 3: nastavte cron

V administraci hostingu nastavte, aby se skript spouštěl třeba každých 15 minut. Příkaz do cronu (cestu upravte podle svého hostingu):

php /cesta/k/vasemu/webu/placla-hlidac.php

Pokud hosting umí jen „volat URL", zadejte adresu skriptu — funguje to stejně.

Hotovo. Nic dalšího není potřeba — tenhle jeden soubor je celá integrace. Kdo chce upozornění okamžitě (ne až za 15 minut), pokračuje návodem 2.

2. Webhook — upozornění bez čekání

Co to dělá: místo aby se váš skript ptal, PlaCla sama zavolá vaši adresu ve chvíli, kdy se objeví nová poptávka vhodná pro vaše blogy. V tomto návodu vám nová poptávka přijde e-mailem; v návodu 3 na ni skript rovnou nabídne. Kromě nových poptávek chodí i další události (akceptace, proplacení, zpráva, reklamace — přehled v referenci); tento přijímač je v klidu ignoruje a klidně si ho o ně později rozšíříte.

Potřebujete: klíč s oprávněním čtení + zápis.

Krok 1: uložte tento skript jako placla-webhook.php a nahrajte na hosting

<?php
// ============ DOPLŇTE SVOJE ÚDAJE ============
$SECRET = 'SEM-PRIJDE-SECRET-Z-KROKU-2';
$EMAIL  = '[email protected]';
// =============================================

// přečíst zprávu a ověřit podpis (ochrana: zprávu opravdu poslala PlaCla)
$telo = file_get_contents('php://input');
$podpis = $_SERVER['HTTP_X_PLACLA_SIGNATURE'] ?? '';
if (!hash_equals(hash_hmac('sha256', $telo, $SECRET), $podpis)) {
    http_response_code(403);
    exit('spatny podpis');
}
$data = json_decode($telo, true);

if (($data['event'] ?? '') === 'demand.created') {
    $p = $data['demand'];
    $blogy = implode(', ', array_map(fn($b) => $b['name'], $data['blogs'] ?? []));
    $text = "Nová poptávka na PlaCle:\n\n"
        . "{$p['name']}\nodměna: {$p['reward']} Kč, rozsah: {$p['ns']} NS\n"
        . "klíčová slova: {$p['keywords']}\nvhodná pro blogy: {$blogy}\n\n"
        . "Nabídnout: https://sluzba.placla.cz/bloger/\n";
    mail($EMAIL, 'PlaCla: nová poptávka - ' . $p['name'], $text,
        "Content-Type: text/plain; charset=UTF-8\r\n");
}
// jiné (budoucí) události v klidu ignorujeme

http_response_code(200);   // říct PlaCle „doručeno", jinak to zkusí znovu
echo 'ok';

Krok 2: zaregistrujte adresu u PlaCly

Jediný příkaz — na počítači ho spustíte v terminálu (Windows: aplikace „Příkazový řádek", Mac: „Terminál"). Doplňte svůj klíč a adresu, kam jste soubor nahráli:

curl -X PUT -H "Authorization: Bearer VAS_KLIC" -H "Content-Type: application/json" -d "{\"url\": \"https://vas-web.cz/placla-webhook.php\"}" https://api.placla.cz/v1/webhook

Odpověď obsahuje secret — dlouhý řetězec, který zkopírujete do skriptu z kroku 1 (proměnná $SECRET) a znovu ho nahrajete. Secret se zobrazí jen teď.

Krok 3: otestujte

curl -X POST -H "Authorization: Bearer VAS_KLIC" https://api.placla.cz/v1/webhook/test

PlaCla hned pošle zkušební zprávu a odpoví vám, jak váš server zareagoval: {"delivered": true, "status": 200, ...} znamená, že vše funguje. Když ne, podívejte se do Když něco nefunguje — a historii všech doručení kdykoli vypíše curl -H "Authorization: Bearer VAS_KLIC" https://api.placla.cz/v1/webhook/deliveries.

Ostrá upozornění chodí po zpracování nových poptávek, typicky do 5 minut od vypsání. Když váš server zrovna neběží, PlaCla doručení opakuje (za 5, 10, 20 a 40 minut).

3. Automatická nabídka

Co to dělá: rozšíření návodu 2 — na novou poptávku skript rovnou podá nabídku za základní cenu a pošle vám o tom e-mail. Vy už jen čekáte, jestli inzerent akceptuje.

Potřebujete: hotový návod 2 a klíč s oprávněním čtení + zápis.

Rozmyslete si, jestli to chcete. Automat nabídne každou poptávku, která pro váš blog projde — i tu, kterou byste ručně přeskočili. Inzerenti navíc poznají nabídku „od robota" podle rychlosti; bez osobní poznámky mívá menší šanci. Dobrý kompromis: nechat automat jen na vybraných blozích (v kódu je na to seznam), zbytek nabízet ručně z e-mailu.

Do placla-webhook.php z návodu 2 přidejte za řádek s $EMAIL:

$KLIC = 'SEM-VLOZTE-SVUJ-API-KLIC';
// nabízet automaticky JEN tyto blogy (ID najdete v adrese blogu na PlaCle,
// nebo příkazem: curl -H "Authorization: Bearer VAS_KLIC" https://api.placla.cz/v1/blogs)
$AUTO_BLOGY = [123, 456];

…a do bloku if (($data['event'] ?? '') === 'demand.created') { před řádek s mail(:

    $vysledky = [];
    foreach (($data['blogs'] ?? []) as $b) {
        if (!in_array($b['id'], $AUTO_BLOGY)) continue;
        $ctx = stream_context_create(['http' => [
            'method' => 'POST',
            'header' => "Authorization: Bearer {$KLIC}\r\nContent-Type: application/json\r\n",
            'content' => json_encode(['demand_id' => $p['id']]),
            'ignore_errors' => true, 'timeout' => 20,
        ]]);
        $odpoved = json_decode((string)file_get_contents(
            'https://api.placla.cz/v1/blogs/' . $b['id'] . '/offers', false, $ctx), true);
        $vysledky[] = $b['name'] . ': '
            . (isset($odpoved['error']) ? 'NEPODÁNO (' . $odpoved['error']['message'] . ')' : 'nabídnuto');
    }
    if ($vysledky) $text .= "\nAutomatické nabídky:\n" . implode("\n", $vysledky) . "\n";

Nabídka se podává za základní cenu poptávky. Chcete-li automaticky nabízet vyšší částku, přidejte do těla požadavku pole reward (vaše požadovaná odměna v Kč) a případně note s poznámkou pro inzerenta — podrobnosti v referenci.

4. Stažení textu od redakce (i do WordPressu)

Co to dělá: když si u zakázky objednáte napsání textu redakcí PlaCly, tenhle skript hotový text stáhne — vypíše ho, nebo z něj ve WordPressu rovnou udělá koncept článku.

Potřebujete: klíč s oprávněním čtení; číslo zakázky (deal) zjistíte z výpisu /v1/deals nebo z adresy zakázky na webu.

Varianta A: jen stáhnout a zobrazit (placla-text.php)

<?php
// ============ DOPLŇTE SVOJE ÚDAJE ============
$KLIC = 'SEM-VLOZTE-SVUJ-API-KLIC';
// =============================================
$deal = (int)($_GET['deal'] ?? 0);
if (!$deal) exit('Použití: placla-text.php?deal=CISLO_ZAKAZKY');

$ctx = stream_context_create(['http' => [
    'header' => "Authorization: Bearer {$KLIC}\r\n",
    'ignore_errors' => true, 'timeout' => 20,
]]);
$odpoved = json_decode((string)file_get_contents(
    "https://api.placla.cz/v1/deals/{$deal}/text", false, $ctx), true);

header('Content-Type: text/plain; charset=UTF-8');
if (isset($odpoved['error'])) exit('Chyba: ' . $odpoved['error']['message']);
echo $odpoved['text'];

Otevřete https://vas-web.cz/placla-text.php?deal=12345678 a text si zkopírujete. Pozor: text, který musí nejdřív schválit inzerent, API před schválením nevydá (dostanete srozumitelnou chybu) — to je záměr, nepublikujte ho dřív.

Varianta B: rovnou jako koncept ve WordPressu

Stejný skript nahrajte do kořenové složky WordPressu (tam, kde je wp-config.php) a místo posledních tří řádků (od header() dejte:

if (isset($odpoved['error'])) exit('Chyba: ' . $odpoved['error']['message']);
require __DIR__ . '/wp-load.php';
$id = wp_insert_post([
    'post_title'   => 'PlaCla - text k zakázce ' . $deal,
    'post_content' => $odpoved['text'],
    'post_status'  => 'draft',
]);
echo 'Koncept vytvořen, upravíte ho v administraci: příspěvek č. ' . $id;

Po otevření s číslem zakázky se v administraci WordPressu objeví koncept s textem — doladíte titulek a obrázky a publikujete jako obvykle. Po použití skript z webu smažte, nebo si do něj přidejte vlastní tajný parametr; vytvářet koncepty by neměl umět každý, kdo zná adresu.

5. Přehled výdělků

Co to dělá: vypíše, co čeká na proplacení, a výdělky po měsících.

Potřebujete: klíč s oprávněním čtení.

Uložte jako placla-vydelky.php, nahrajte, otevřete v prohlížeči

<?php
// ============ DOPLŇTE SVOJE ÚDAJE ============
$KLIC = 'SEM-VLOZTE-SVUJ-API-KLIC';
// =============================================
$ctx = stream_context_create(['http' => [
    'header' => "Authorization: Bearer {$KLIC}\r\n",
    'ignore_errors' => true, 'timeout' => 20,
]]);
$v = json_decode((string)file_get_contents('https://api.placla.cz/v1/payouts', false, $ctx), true);

header('Content-Type: text/plain; charset=UTF-8');
if (isset($v['error'])) exit('Chyba: ' . $v['error']['message']);

echo "ČEKÁ NA PROPLACENÍ\n==================\n";
$suma = 0;
foreach ($v['pending'] as $p) {
    $suma += $p['reward'];
    echo "{$p['reward']} Kč  {$p['blog']} - {$p['demand']}"
        . ($p['in_arbitration'] ? ' (v arbitráži)' : '') . "\n";
}
echo "celkem: {$suma} Kč\n\nPROPLACENO PO MĚSÍCÍCH\n======================\n";
foreach ($v['paid_monthly'] as $m) {
    echo "{$m['month']}  {$m['amount']} Kč ({$m['count']} článků)\n";
}

Jen za konkrétní rok: na konec adresy API přidejte ?rok=2026.

Když něco nefunguje

Co vidíteCo to znamená a co s tím
chybi_klic (401)Skript neposílá klíč — zkontrolujte, že jste ho vložili do proměnné $KLIC celý a bez mezer navíc.
neplatny_klic (401)Klíč je špatně zkopírovaný, zneplatněný, nebo účet není aktivní. Nejjistější je vytvořit si v nastavení nový klíč.
chybi_scope (403)Klíč má jen oprávnění čtení, ale skript potřebuje i zápis (nabídky, webhook). Vytvořte klíč s oprávněním čtení + zápis.
blog_neuplny (422)Blog nemá vyplněnou minimální cenu, nebo je návštěvnost starší než měsíc — doplňte v nastavení blogu na webu (nebo přes PATCH v API). Hlídač z návodu 1 takový blog tiše přeskakuje.
rate_limit (429)Moc požadavků za minutu. U návodů z této stránky se to běžně nestane; když ano, prodlužte interval cronu.
webhook test: status 0Váš server neodpověděl — překlep v adrese, skript na jiném místě, nebo hosting blokuje příchozí požadavky. Otevřete adresu webhooku v prohlížeči: má vypsat „spatny podpis" (to je správně — prohlížeč podpis nemá).
webhook test: status 403Skript běží, ale nesedí $SECRET — zkopírujte ho znovu z odpovědi registrace, případně si vygenerujte nový: POST /v1/webhook/rotate-secret.
nechodí e-mailyFunkce mail() bývá na hostingu omezená — zkontrolujte spam a nápovědu hostingu k odesílání pošty z PHP.
jiná chyba s kódem PC-…Napište nám na [email protected] a kód PC-XXXXXX přiložte — podle něj chybu dohledáme.

PlaCla API v1 · technická reference · dotazy: [email protected]