{"id":1615,"date":"2026-02-20T11:11:46","date_gmt":"2026-02-20T11:11:46","guid":{"rendered":"http:\/\/m-k-v.de\/3.0\/?p=1615"},"modified":"2026-08-10T21:56:52","modified_gmt":"2026-08-10T21:56:52","slug":"bayerische-einzelmeisterschaften-frauen-maenner-u23","status":"publish","type":"post","link":"http:\/\/m-k-v.de\/3.0\/2026\/02\/20\/bayerische-einzelmeisterschaften-frauen-maenner-u23\/","title":{"rendered":"2.) Bayerische Einzelmeisterschaften Frauen\/M\u00e4nner\/U23"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">30.-31. Mai 2026 in M\u00fcnchen<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><a href=\"https:\/\/littlebean.de\/dash3\/MKVBahndienst\/IndexPub?ClubGuid=6084e001-14a8-4360-b853-638f803b1ea7\">Hier eintragen als Bahndienst<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dokumente<\/h2>\n\n\n<div class=\"wp-block-mkv-dateilister\"><div  style=\"display: flex;flex-wrap: wrap;\"><div style=\"border:1px solid black;padding:5px;margin:5px;display: flex;padding: 10px;border-radius: 10px;\" class=\"myTable\"><div><a href=\"http:\/\/m-k-v.de\/3.0\/wp-content\/uploads\/2026\/04\/BM-Aktive.pdf\" target=new><img decoding=\"async\" src=\"http:\/\/m-k-v.de\/3.0\/wp-content\/uploads\/2026\/04\/BM-Aktive-pdf-106x150.jpg\"><\/a><\/div><div style=\"display: inline;font-size: large;margin-left: 10px;\"><a href=\"http:\/\/m-k-v.de\/3.0\/wp-content\/uploads\/2026\/04\/BM-Aktive.pdf\" target=new style=\"color: orange;\">Zeitplan Aktive<\/a><br><a href=\"http:\/\/m-k-v.de\/3.0\/wp-content\/uploads\/2026\/04\/BM-Aktive.pdf\" style=\"padding-left: 8px;padding-right: 8px;margin-top: 5px;\" class=\"wp-block-file__button wp-element-button\" download=\"\" >Herunterladen<\/a><\/div><\/div><div style=\"border:1px solid black;padding:5px;margin:5px;display: flex;padding: 10px;border-radius: 10px;\" class=\"myTable\"><div><a href=\"http:\/\/m-k-v.de\/3.0\/wp-content\/uploads\/2026\/04\/BM-U23.pdf\" target=new><img decoding=\"async\" src=\"http:\/\/m-k-v.de\/3.0\/wp-content\/uploads\/2026\/04\/BM-U23-pdf-106x150.jpg\"><\/a><\/div><div style=\"display: inline;font-size: large;margin-left: 10px;\"><a href=\"http:\/\/m-k-v.de\/3.0\/wp-content\/uploads\/2026\/04\/BM-U23.pdf\" target=new style=\"color: orange;\">Zeitplan U23<\/a><br><a href=\"http:\/\/m-k-v.de\/3.0\/wp-content\/uploads\/2026\/04\/BM-U23.pdf\" style=\"padding-left: 8px;padding-right: 8px;margin-top: 5px;\" class=\"wp-block-file__button wp-element-button\" download=\"\" >Herunterladen<\/a><\/div><\/div><\/div><\/div>\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">sporteurope.tv Livestreams zur BM U23\/Aktive 2026<\/h2>\n\n\n\n<div id=\"setv-livestreams\">Loading\u2026<\/div>\n<style>\n  #setv-livestreams ul { list-style:none; padding:0; display:grid; gap:1rem; }\n  #setv-livestreams li { display:flex; gap:1rem; align-items:flex-start; }\n  #setv-livestreams img { width:160px; height:auto; border-radius:6px; flex-shrink:0; }\n  #setv-livestreams h3 { margin:0 0 .25rem; font-size:1.1rem; }\n  #setv-livestreams .meta { margin:0; color:#666; font-size:.9rem; }\n  #setv-livestreams .teams { margin:.25rem 0 0; font-size:.95rem; }\n  #setv-livestreams .live { color:#c00; font-weight:bold; }\n  #setv-livestreams .error { color:#c00; }\n<\/style>\n<script>\n(function () {\n  const TOKEN      = 'a1a6d1a0-6a2d-42cd-b25f-f69fb5d4be4d|bes4PLm25LyiOWkfMbN0csoBlgO1u14087n8pnKh';\n  const BASE       = 'https:\/\/api.sporteurope.tv\/api\/creator\/personal\/assets\/livestreams';\n  const PER_PAGE   = 50;\n  const LIMIT      = 0; \/\/ 0 = show all; set to e.g. 5 to cap\n\n  \/\/ --- Name filter ---------------------------------------------------------\n  \/\/ Set NAME_REGEX to a regex pattern (string) to keep only matching names.\n  \/\/ Leave as '' (empty string) to disable the filter.\n  \/\/ Examples:\n  \/\/   '^2\\\\. HBL'                  \u2192 names starting with \"2. HBL\"\n  \/\/   'Rimpar|Nordhorn'            \u2192 names containing either club\n  \/\/   '\\\\bU19\\\\b'                  \u2192 whole word \"U19\"\n  \/\/ Use NAME_REGEX_FLAGS for case-insensitive ('i') etc.\n  const NAME_REGEX       = 'Bayerische';\n  const NAME_REGEX_FLAGS = 'i';\n  \/\/ -------------------------------------------------------------------------\n\n  const container   = document.getElementById('setv-livestreams');\n  const nameMatcher = NAME_REGEX ? new RegExp(NAME_REGEX, NAME_REGEX_FLAGS) : null;\n\n  const fetchPage = async (page) => {\n    const r = await fetch(`${BASE}?page=${page}&per_page=${PER_PAGE}`, {\n      headers: { 'Accept': 'application\/json', 'Authorization': 'Bearer ' + TOKEN }\n    });\n    if (!r.ok) throw new Error('HTTP ' + r.status);\n    return r.json();\n  };\n\n  const escapeHtml = (s) => String(s ?? '').replace(\/[&<>\"']\/g,\n    c => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c]));\n\n  const formatDate = (iso) => new Date(iso).toLocaleString(undefined, {\n    weekday:'short', day:'2-digit', month:'short', year:'numeric',\n    hour:'2-digit', minute:'2-digit'\n  });\n\n  const isWanted = (a, now) => {\n    const liveOrFuture = a.currently_live || new Date(a.content_start_date).getTime() > now;\n    if (!liveOrFuture) return false;\n    if (nameMatcher && !nameMatcher.test(a.name || '')) return false;\n    return true;\n  };\n\n  (async () => {\n    try {\n      const now = Date.now();\n      const matches = [];\n\n      \/\/ API sorts ascending, so upcoming sits on the LAST page. Walk backwards.\n      const first    = await fetchPage(1);\n      const lastPage = first.meta?.last_page || 1;\n\n      for (let p = lastPage; p >= 1; p--) {\n        const page  = (p === 1) ? first : await fetchPage(p);\n        \/\/ Stop walking when a whole page is already in the past, regardless of name filter.\n        const anyLiveOrFuture = page.data.some(a =>\n          a.currently_live || new Date(a.content_start_date).getTime() > now\n        );\n        const found = page.data.filter(a => isWanted(a, now));\n        matches.unshift(...found);\n        if (!anyLiveOrFuture && p < lastPage) break; \/\/ earlier pages are all past\n      }\n\n      matches.sort((a, b) => a.content_start_date.localeCompare(b.content_start_date));\n      const items = LIMIT > 0 ? matches.slice(0, LIMIT) : matches;\n\n      if (items.length === 0) {\n        container.textContent = 'No upcoming livestreams.';\n        return;\n      }\n\n      container.innerHTML = '<ul>' + items.map(a => {\n        const label = a.currently_live\n          ? '<span class=\"live\">\u25cf LIVE<\/span>'\n          : escapeHtml(formatDate(a.content_start_date));\n        const teams = (a.home_team?.name && a.guest_team?.name)\n          ? `<p class=\"teams\">${escapeHtml(a.home_team.name)} vs ${escapeHtml(a.guest_team.name)}<\/p>`\n          : '';\n        const img = a.image_url\n          ? `<img decoding=\"async\" src=\"${escapeHtml(a.image_url)}\" alt=\"\" loading=\"lazy\">`\n          : '';\n        return `<li>${img}<div>\n          <h3><a href=\"${escapeHtml(a.link)}\">${escapeHtml(a.name)}<\/a><\/h3>\n          <p class=\"meta\">${label}<\/p>${teams}\n        <\/div><\/li>`;\n      }).join('') + '<\/ul>';\n    } catch (err) {\n      container.innerHTML = '<p class=\"error\">Could not load livestreams: '\n        + escapeHtml(err.message) + '<\/p>';\n      console.error(err);\n    }\n  })();\n})();\n<\/script>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Ergebnisse<\/h2>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Bilder &amp; Medien<\/h2>\n","protected":false},"excerpt":{"rendered":"<p>30.-31. Mai 2026 in M\u00fcnchen Hier eintragen als Bahndienst Dokumente sporteurope.tv Livestreams zur BM U23\/Aktive 2026 Loading\u2026 Ergebnisse Bilder &amp; Medien<\/p>\n","protected":false},"author":19,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[9],"tags":[],"class_list":["post-1615","post","type-post","status-publish","format-standard","hentry","category-archiv","entry"],"acf":[],"_links":{"self":[{"href":"http:\/\/m-k-v.de\/3.0\/wp-json\/wp\/v2\/posts\/1615","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/m-k-v.de\/3.0\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/m-k-v.de\/3.0\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/m-k-v.de\/3.0\/wp-json\/wp\/v2\/users\/19"}],"replies":[{"embeddable":true,"href":"http:\/\/m-k-v.de\/3.0\/wp-json\/wp\/v2\/comments?post=1615"}],"version-history":[{"count":8,"href":"http:\/\/m-k-v.de\/3.0\/wp-json\/wp\/v2\/posts\/1615\/revisions"}],"predecessor-version":[{"id":1882,"href":"http:\/\/m-k-v.de\/3.0\/wp-json\/wp\/v2\/posts\/1615\/revisions\/1882"}],"wp:attachment":[{"href":"http:\/\/m-k-v.de\/3.0\/wp-json\/wp\/v2\/media?parent=1615"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/m-k-v.de\/3.0\/wp-json\/wp\/v2\/categories?post=1615"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/m-k-v.de\/3.0\/wp-json\/wp\/v2\/tags?post=1615"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}