RSS kanály

RSS je nejstarší a stále nejspolehlivější způsob, jak sledovat nový obsah — bez algoritmu, bez účtu a bez toho, aby vám někdo rozhodoval, co uvidíte. Stačí adresu kanálu vložit do čtečky. Kromě hlavního kanálu nabízíme i samostatné kanály k jednotlivým osobnostem a hotové šablony, kterými si výpis článků vložíte na vlastní web.

Hlavní kanál

Všechny nově publikované články, nejnovější nahoře.

https://rubriky.cz/rss.xml

Adresu vložte do libovolné čtečky — například Feedly, Inoreader, NetNewsWire nebo Mozilla Thunderbird. Kanál se obnovuje průběžně, změny se v něm projeví do 15 minut.

Kanály k osobnostem

Zajímá vás jen konkrétní člověk? Každá osobnost má vlastní kanál, který obsahuje pouze články, kde se o ní mluví. Adresa má vždy stejný tvar:

https://rubriky.cz/rss/slug-osobnosti.xml
Petr Pavel 122 článků
https://rubriky.cz/rss/petr-pavel.xml
Donald Trump 80 článků
https://rubriky.cz/rss/donald-trump.xml
Andrej Babiš 76 článků
https://rubriky.cz/rss/andrej-babis.xml
Filip Turek 37 článků
https://rubriky.cz/rss/filip-turek.xml
Tucker Carlson 25 článků
https://rubriky.cz/rss/tucker-carlson.xml
Petr Macinka 21 článků
https://rubriky.cz/rss/petr-macinka.xml
Alena Schillerová 14 článků
https://rubriky.cz/rss/alena-schillerova.xml
Petr Fiala 10 článků
https://rubriky.cz/rss/petr-fiala.xml
Viktor Orbán 9 článků
https://rubriky.cz/rss/viktor-orban.xml
Benjamin Netanjahu 8 článků
https://rubriky.cz/rss/benjamin-netanjahu.xml
Charlie Kirk 8 článků
https://rubriky.cz/rss/charlie-kirk.xml
Jeffrey Epstein 8 článků
https://rubriky.cz/rss/epstein.xml
Miloš Vystrčil 8 článků
https://rubriky.cz/rss/milos-vystrcil.xml
Petr Drulák 8 článků
https://rubriky.cz/rss/petr-drulak.xml
Tomio Okamura 8 článků
https://rubriky.cz/rss/tomio-okamura.xml
Václav Klaus 8 článků
https://rubriky.cz/rss/vaclav-klaus.xml
Bernd Posselt 7 článků
https://rubriky.cz/rss/bernd-posselt.xml
Chase Hughes 7 článků
https://rubriky.cz/rss/chase-hughes.xml
Igor Chaun 7 článků
https://rubriky.cz/rss/igor-chaun.xml
JD Vance 7 článků
https://rubriky.cz/rss/jd-vance.xml
Jindřich Rajchl 7 článků
https://rubriky.cz/rss/jindrich-rajchl.xml
Vít Rakušan 7 článků
https://rubriky.cz/rss/vit-rakusan.xml
Adam Šejna 6 článků
https://rubriky.cz/rss/adam-sejna.xml
Anthony Fauci 6 článků
https://rubriky.cz/rss/anthony-fauci.xml
Petr Holec 6 článků
https://rubriky.cz/rss/petr-holec.xml
Václav Moravec 6 článků
https://rubriky.cz/rss/vaclav-moravec.xml
Daniel Davis 5 článků
https://rubriky.cz/rss/daniel-davis.xml
Elon Musk 5 článků
https://rubriky.cz/rss/elon-musk.xml
Lubomír Zaorálek 5 článků
https://rubriky.cz/rss/lubomir-zaoralek.xml
Mikuláš Minář 5 článků
https://rubriky.cz/rss/mikulas-minar.xml
Václav Havel 5 článků
https://rubriky.cz/rss/vaclav-havel.xml
Keir Starmer 4 články
https://rubriky.cz/rss/keir-starmer.xml
Ladislav Jakl 4 články
https://rubriky.cz/rss/ladislav-jakl.xml
Libor Vondráček 4 články
https://rubriky.cz/rss/libor-vondracek.xml
Miloš Zeman 4 články
https://rubriky.cz/rss/milos-zeman.xml
Christopher Nolan 3 články
https://rubriky.cz/rss/christopher-nolan.xml
Ivan Fíla 3 články
https://rubriky.cz/rss/ivan-fila.xml
Jan Lipavský 3 články
https://rubriky.cz/rss/jan-lipavsky.xml
Karel Havlíček 3 články
https://rubriky.cz/rss/karel-havlicek.xml
Ondřej Prokop 3 články
https://rubriky.cz/rss/ondrej-prokop.xml
Patrik Nacher 3 články
https://rubriky.cz/rss/patrik-nacher.xml
Petr Kolář 3 články
https://rubriky.cz/rss/petr-kolar.xml
Petr Žantovský 3 články
https://rubriky.cz/rss/petr-zantovsky.xml
Radim Fiala 3 články
https://rubriky.cz/rss/radim-fiala.xml
Zuzana Mrázová 3 články
https://rubriky.cz/rss/zuzana-mrazova.xml

Kanál si takto můžete sestavit i pro libovolné jiné téma, nejen pro osobnosti. Potřebný slug najdete v adrese stránky štítku — u adresy rubriky.cz/tag/energetika je to energetika, kanál tedy vede na rubriky.cz/rss/energetika.xml.

Nastavení počtu článků

Kanály standardně vracejí 25 nejnovějších článků. Kratší výpis získáte parametrem limit:

ParametrPovolené hodnotyPříklad
limit 3, 5, 10, 15, 20, 25 (výchozí 25) rubriky.cz/rss/petr-pavel.xml?limit=3

Jiná hodnota než povolená se automaticky zaokrouhlí na nejbližší z nich — kanál kvůli překlepu nikdy neselže.

Widget na váš web

Chcete na svém webu ukazovat nejnovější články k určité osobnosti? Zkopírujte si jednu z hotových šablon. Obě jsou bez knihoven a závislostí, obě si výsledek ukládají do vlastní cache na 15 minut a obě mají v patičce uvedený zdroj.

Jak to vypadá

Načítám ukázku…

Šablona pro PHP doporučeno

Funkci vložte do svého projektu a zavolejte ji tam, kde má být výpis. Cache se ukládá do dočasného adresáře serveru, takže návštěvnost vašeho webu nezatíží ani nás, ani vás. Výpis vzniká na serveru, takže ho vidí i vyhledávače a AI asistenti — na rozdíl od varianty v JavaScriptu, kterou roboti nespouštějí.

<?php
/**
 * RSS widget Rubriky.cz — vrátí HTML se seznamem nejnovějších článků.
 * Použití:  echo rubriky_rss_widget('petr-pavel', 3);
 *           echo rubriky_rss_widget();            // hlavní feed
 */
function rubriky_rss_widget($tag = '', $limit = 3) {
    $ttl = 900;  // 15 min serverové cache — bez ní by každé zobrazení stránky
                 // znamenalo dotaz na rubriky.cz; prosíme neponižovat

    $url = $tag !== ''
        ? 'https://rubriky.cz/rss/' . rawurlencode($tag) . '.xml?limit=' . (int) $limit
        : 'https://rubriky.cz/rss.xml?limit=' . (int) $limit;
    $cache = sys_get_temp_dir() . '/rubriky-rss-' . md5($url) . '.xml';

    $xml = '';
    if (is_file($cache) && filemtime($cache) > time() - $ttl) {
        $xml = (string) file_get_contents($cache);
    } else {
        $ctx = stream_context_create(array('http' => array(
            'timeout' => 5,
            'header'  => "User-Agent: rubriky-widget-php\r\n",
        )));
        $fresh = @file_get_contents($url, false, $ctx);
        if ($fresh !== false && $fresh !== '') {
            $xml = $fresh;
            @file_put_contents($cache, $fresh, LOCK_EX);
        } elseif (is_file($cache)) {
            $xml = (string) file_get_contents($cache);  // výpadek → prošlá cache
        }
    }
    if ($xml === '') return '';

    libxml_use_internal_errors(true);
    $rss = simplexml_load_string($xml);
    libxml_clear_errors();
    if (!$rss || !isset($rss->channel)) return '';

    $title = str_replace('Rubriky.cz', 'Rubriky', (string) $rss->channel->title);

    $out  = '<div class="rubriky-widget">';
    $out .= '<h3>' . htmlspecialchars($title, ENT_QUOTES, 'UTF-8') . '</h3>';
    $out .= '<ul>';
    foreach ($rss->channel->item as $item) {
        $link = trim((string) $item->link);
        if (strpos($link, 'https://rubriky.cz/') !== 0) continue;  // jen odkazy na zdroj

        $out .= '<li><a href="' . htmlspecialchars($link, ENT_QUOTES, 'UTF-8')
              . '" target="_blank" rel="noopener">'
              . htmlspecialchars((string) $item->title, ENT_QUOTES, 'UTF-8') . '</a>';
        $ts = strtotime((string) $item->pubDate);
        if ($ts) {
            $out .= '<span class="rubriky-widget__date">' . date('j. n. Y', $ts) . '</span>';
        }
        $out .= '</li>';
    }
    $out .= '</ul>';

    /* Patička s uvedením zdroje je podmínkou užití widgetu — ponechte ji, prosím. */
    $out .= '<div class="rubriky-widget__footer">Zdroj: rubriky.cz/rss</div>';
    $out .= '</div>';

    return $out;
}

Šablona pro JavaScript

Pro weby, kam vlastní PHP kód přidat nejde. Vložte na místo, kde má výpis být, a na začátku nastavte TAG (slug osobnosti, prázdné = hlavní kanál) a LIMIT. Obsah se doplní až v prohlížeči, takže se do indexu vyhledávačů nedostane.

<div id="rubriky-widget"></div>
<script>
(function () {
  var TAG    = 'petr-pavel';   // slug osobnosti; prázdný řetězec '' = hlavní feed
  var LIMIT  = 3;                  // 3, 5, 10, 15, 20 nebo 25
  var TARGET = 'rubriky-widget';   // id cílového elementu
  var TTL    = 15 * 60 * 1000;     // 15 min — prosíme neponižovat, šetří náš i váš server

  var url = TAG
    ? 'https://rubriky.cz/rss/' + TAG + '.xml?limit=' + LIMIT
    : 'https://rubriky.cz/rss.xml?limit=' + LIMIT;
  var key = 'rubriky-rss-' + TAG + '-' + LIMIT;

  function render(xml) {
    var box = document.getElementById(TARGET);
    if (!box) return;
    var doc = new DOMParser().parseFromString(xml, 'text/xml');
    var items = doc.querySelectorAll('item');
    if (!items.length) return;

    var wrap = document.createElement('div');
    wrap.className = 'rubriky-widget';

    var head = document.createElement('h3');
    var chTitle = doc.querySelector('channel > title');
    head.textContent = (chTitle ? chTitle.textContent : 'Rubriky').replace('Rubriky.cz', 'Rubriky');
    wrap.appendChild(head);

    var ul = document.createElement('ul');
    Array.prototype.forEach.call(items, function (item) {
      var linkEl = item.querySelector('link');
      var href = linkEl ? linkEl.textContent.trim() : '';
      if (href.indexOf('https://rubriky.cz/') !== 0) return;  // jen odkazy na zdroj

      var titleEl = item.querySelector('title');
      var li = document.createElement('li');
      var a = document.createElement('a');
      a.href = href;
      a.target = '_blank';
      a.rel = 'noopener';
      a.textContent = titleEl ? titleEl.textContent : href;   // textContent = žádné XSS
      li.appendChild(a);

      var dateEl = item.querySelector('pubDate');
      if (dateEl) {
        var d = new Date(dateEl.textContent);
        if (!isNaN(d.getTime())) {
          var span = document.createElement('span');
          span.className = 'rubriky-widget__date';
          span.textContent = d.toLocaleDateString('cs-CZ');
          li.appendChild(span);
        }
      }
      ul.appendChild(li);
    });
    wrap.appendChild(ul);

    /* Patička s uvedením zdroje je podmínkou užití widgetu — ponechte ji, prosím. */
    var foot = document.createElement('div');
    foot.className = 'rubriky-widget__footer';
    foot.textContent = 'Zdroj: rubriky.cz/rss';
    wrap.appendChild(foot);

    box.innerHTML = '';
    box.appendChild(wrap);
  }

  var cached = null;
  try { cached = JSON.parse(localStorage.getItem(key) || 'null'); } catch (e) {}
  if (cached && cached.xml && (Date.now() - cached.ts) < TTL) { render(cached.xml); return; }

  fetch(url)
    .then(function (r) { return r.ok ? r.text() : Promise.reject(r.status); })
    .then(function (xml) {
      try { localStorage.setItem(key, JSON.stringify({ ts: Date.now(), xml: xml })); } catch (e) {}
      render(xml);
    })
    .catch(function () { if (cached && cached.xml) render(cached.xml); });
})();
</script>

Styly (pro obě varianty)

Záměrně střídmé — barvy si upravte podle svého webu.

.rubriky-widget { border: 1px solid #e0e0e0; border-radius: 6px; padding: 1rem 1.25rem;
                  font-family: system-ui, -apple-system, sans-serif; max-width: 100%; }
.rubriky-widget h3 { margin: 0 0 .75rem; font-size: 1rem; }
.rubriky-widget ul { list-style: none; margin: 0; padding: 0; }
.rubriky-widget li { padding: .45rem 0; border-bottom: 1px solid #f0f0f0; }
.rubriky-widget li:last-child { border-bottom: 0; }
.rubriky-widget a { color: inherit; text-decoration: none; }
.rubriky-widget a:hover { text-decoration: underline; }
.rubriky-widget__date { display: block; font-size: .8rem; opacity: .6; }
.rubriky-widget__footer { margin-top: .75rem; font-size: .8rem; opacity: .7; }

Podmínky použití

Kanály i šablony můžete používat zdarma, na osobních i komerčních webech. Prosíme jen o tři věci:

  • Ponechte patičku s uvedením zdroje. Je součástí obou šablon a je podmínkou jejich užití.
  • Nesnižujte dobu cache pod 15 minut. Šablony ji mají nastavenou samy; častější dotazy nepřinesou čerstvější obsah, protože kanály se stejně obnovují jednou za 15 minut.
  • Nepřebírejte plná znění článků. Kanály obsahují titulek a perex — ty jsou k volnému použití, celé texty ne.

Kanály poskytujeme tak, jak jsou, bez záruky dostupnosti. Nedaří se vám něco nastavit nebo chybí kanál k osobnosti, kterou sledujete? Napište nám přes kontaktní formulář.

Časté dotazy

Jak často se kanál obnovuje?

Nový článek se v kanálu objeví do 15 minut od publikace, obvykle dřív.

Proč kanál vrací jen 25 článků?

Delší kanály zbytečně zatěžují čtečky i server. Starší články najdete na stránce příslušného štítku nebo v mapě webu.

Chybí kanál k osobnosti, kterou sleduji.

Kanál existuje ke každému štítku, i když není v seznamu výše — stačí znát jeho slug. Pokud osobnost nemá vlastní štítek, napište nám přes kontakt.

Funguje kanál i pro celé rubriky?

Zatím ne. K dispozici je hlavní kanál a kanály ke štítkům. Kanály k rubrikám zvažujeme.

Technická poznámka: kanály se odesílají s hlavičkami Cache-Control a ETag, takže se čtečka i widget zeptají jen na to, co se opravdu změnilo.