0xDEADBEEF

[RSS]
««« »»»

Really simple RSS

21. 2. 2019

Není žádný důvod, proč by váš web neměl pod­po­ro­vat RSS a tady vám ukážu proč.

RSS (v sou­čas­nosti) zna­mená really simple syn­di­cationvelice jed­no­du­chá syn­di­kace. Název nelže, pro­tože i když pra­cu­jete v jazyku, který umí jenom za­pi­so­vat znaky do Strin­gBu­il­deru a kromě toho ne­zvládá nic kom­pli­ko­va­něj­šího, va­lidní ge­ne­rá­tor RSS se stále vejde do méně než 40 řádek kódu.

class RSS(title: String, description: String, link: String) {
  val sb = new java.lang.StringBuilder

  sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
  sb.append("<rss version=\"2.0\">")
  sb.append("<channel>")
  element("title", "", title)
  element("description", "", description)
  element("link", "", link)

  def addItem(title: String, url: String, body: String = "") = {
    sb.append("<item>")
    element("title", "", title)
    element("guid", " isPermaLink=\"true\"", url)
    element("description", "", body)
    sb.append("</item>")
  }

  def result() = {
    sb.append("</channel>")
    sb.append("</rss>")
    sb.toString
  }

  private def element(name: String, attr: String, body: String) = {
    sb.append("<").append(name).append(attr).append(">")
    var i = 0; while (i < body.length) {
      body.charAt(i) match {
        case '&' => sb.append("&amp;")
        case '>' => sb.append("&gt;")
        case '<' => sb.append("&lt;")
        case ch  => sb.append(ch)
      }
      i += 1
    }
    sb.append("</").append(name).append(">")
  }
}

Ne­po­u­žívá žádnou kni­hovnu pro XML a s pro­gra­mo­va­cím ekvi­va­len­tem pro­vázku a na­ostřené plaňky je možné přidat vlastní RSS export. Po­u­žití není nic pře­kva­pi­vého:

val rss = new RSS("0xDEADBEEF", "programování & tak podobně", "https://deadbeef.k47.cz")
rss.addItem("Really simple RSS", "https://deadbeef.k47.cz/rss.html", "<p>lorem ipsum</p>")
rss.result()

Vý­sledný feed si můžete zkon­t­ro­lo­vat na va­li­dá­toru w3, projde bez chyb.


+1: O tur­bu­lentní his­to­rii a vývoji se píše v The Rise and Demise of RSS.

píše k47 (@kaja47, k47)