





{"id":1876,"date":"2025-08-17T11:34:25","date_gmt":"2025-08-17T11:34:25","guid":{"rendered":"https:\/\/iptv.directory\/?page_id=1876"},"modified":"2025-08-17T13:22:25","modified_gmt":"2025-08-17T13:22:25","slug":"m3u-checker","status":"publish","type":"page","link":"https:\/\/iptv.directory\/index.php\/m3u-checker\/","title":{"rendered":"M3U CHECKER"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"fr\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<title>xtreamCube IPTV checker \u2014 One-Button Failsafe<\/title>\n<style>\n:root{--bg:#f6f8fb;--surface:#fff;--text:#0f172a;--muted:#6b7280;--line:#e5e7eb;--brand:#0ea5e9;--brand2:#0284c7;--rad:16px;--sh:0 14px 36px rgba(2,6,23,.08)}\n*{box-sizing:border-box}html,body{height:100%}body{margin:0;background:var(--bg);color:var(--text);font:14.5px\/1.6 system-ui,-apple-system,Segoe UI,Inter,Roboto}\n.container{max-width:1280px;margin:0 auto;padding:18px}\n.top{position:sticky;top:0;background:linear-gradient(180deg,rgba(255,255,255,.95),rgba(255,255,255,.82));backdrop-filter:blur(8px);border-bottom:1px solid var(--line);z-index:5}\n.top .wrap{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center}\n.brand{display:flex;gap:10px;align-items:center;font-weight:800}\n.dot{width:14px;height:14px;border-radius:50%;background:conic-gradient(#06b6d4,#10b981)}\n.urlbar{display:grid;grid-template-columns:1fr auto;gap:8px}\n.input,button,select{border:1px solid var(--line);border-radius:12px;background:#fff}\n.input{padding:14px 16px;font-size:16px}\nbutton{padding:14px 18px;cursor:pointer}\n.primary{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:800}\n.primary:hover{background:var(--brand2)}\n.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}\n.tog{display:flex;gap:6px;align-items:center;border:1px solid var(--line);border-radius:10px;background:#fff;padding:8px 10px}\n.grid{display:grid;gap:16px;grid-template-columns:320px 1fr}\n@media(max-width:1080px){.grid{grid-template-columns:1fr}}\n.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--rad);box-shadow:var(--sh)}\n.pad{padding:16px}\n.h{font-weight:800;margin:0 0 8px}\n.hr{height:1px;background:var(--line);margin:12px 0}\n.statbar{display:grid;gap:10px;grid-template-columns:repeat(4,1fr)}\n@media(max-width:860px){.statbar{grid-template-columns:repeat(2,1fr)}}\n.stat{display:flex;justify-content:space-between;align-items:center;border:1px solid var(--line);border-radius:12px;background:#fafafa;padding:12px}\n.badge{display:inline-flex;border:1px solid var(--line);border-radius:999px;padding:4px 8px;color:var(--muted)}\n.kv{display:grid;grid-template-columns:160px 1fr;gap:8px}\n.eye{border:1px solid var(--line);border-radius:10px;background:#fff;padding:6px 8px;cursor:pointer}\n.console{font:12px ui-monospace,Menlo,monospace;background:#0b1220;color:#d1e4ff;border:1px solid #12223a;border-radius:12px;padding:8px;white-space:pre-wrap;max-height:160px;overflow:auto}\n.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:10px 0}\n.search{flex:1;min-width:260px}\n.list{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}\n.card{border:1px solid var(--line);border-radius:14px;background:#fff;overflow:hidden;display:flex;flex-direction:column}\n.thumb{aspect-ratio:16\/9;background:#f3f4f6}\n.cap{padding:10px}\n.ttl{font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.meta{font-size:12px;color:var(--muted);margin-top:3px}\n.tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}\n.tag{font-size:11px;border:1px solid var(--line);border-radius:999px;padding:2px 6px;background:#f9fafb}\n.actions{display:flex;gap:6px;margin-top:8px}\n.btn{border:1px solid var(--line);border-radius:10px;background:#fff;padding:6px 8px;font-size:12px}\n.toast{position:fixed;right:16px;bottom:16px;background:#fff;border:1px solid var(--line);padding:10px 12px;border-radius:12px;opacity:0;transform:translateY(12px);transition:all .3s}\n.toast.show{opacity:1;transform:translateY(0)}\n.skel{height:14px;border-radius:8px;background:linear-gradient(90deg,#f3f4f6,#e5e7eb,#f3f4f6);background-size:200% 100%;animation:sh 1.2s infinite}\n@keyframes sh{0%{background-position:200% 0}100%{background-position:-200% 0}}\n<\/style>\n<\/head>\n<body>\n<div class=\"top\">\n  <div class=\"container wrap\">\n    <div class=\"brand\"><span class=\"dot\"><\/span>xtreamCube IPTV checker<\/div>\n    <div class=\"urlbar\">\n      <input id=\"iptv\" class=\"input\" placeholder=\"Collez une URL M3U \/ Xtream, ou collez le contenu #EXTM3U directement puis cliquez sur \u00ab V\u00e9rifier mon compte \u00bb\">\n      <button id=\"verify\" class=\"primary\">V\u00e9rifier mon compte<\/button>\n    <\/div>\n    <div class=\"row\" style=\"grid-column:1\/-1;margin-top:6px\">\n      <label class=\"tog\"><input id=\"useProxy\" type=\"checkbox\" checked> Proxy CORS<\/label>\n      <label class=\"tog\"><input id=\"moreProxy\" type=\"checkbox\"> Proxys \u00e9tendus<\/label>\n      <label class=\"tog\"><input id=\"dark\" type=\"checkbox\"> Th\u00e8me sombre<\/label>\n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"container grid\">\n  <!-- gauche -->\n  <aside class=\"panel pad\">\n    <h2 class=\"h\">Options essentielles<\/h2>\n    <label><input id=\"onlyHls\" type=\"checkbox\"> HLS uniquement (.m3u8)<\/label><br>\n    <label><input id=\"noRtmp\" type=\"checkbox\" checked> Exclure RTMP<\/label><br>\n    <label><input id=\"dedup\" type=\"checkbox\" checked> D\u00e9dupliquer (nom+url)<\/label><br>\n    <label><input id=\"showDomain\" type=\"checkbox\" checked> Afficher domaine<\/label><br>\n    <div class=\"hr\"><\/div>\n    <h3 class=\"h\">Console<\/h3>\n    <div id=\"debug\" class=\"console\">\u2014<\/div>\n  <\/aside>\n\n  <!-- droite -->\n  <main class=\"panel pad\">\n    <div class=\"statbar\">\n      <div class=\"stat\"><span>Live<\/span><span id=\"cLive\" class=\"badge\">0<\/span><\/div>\n      <div class=\"stat\"><span>Films<\/span><span id=\"cVod\" class=\"badge\">0<\/span><\/div>\n      <div class=\"stat\"><span>S\u00e9ries<\/span><span id=\"cSeries\" class=\"badge\">0<\/span><\/div>\n      <div class=\"stat\"><span>Domaines<\/span><span id=\"cHosts\" class=\"badge\">0<\/span><\/div>\n    <\/div>\n    <div class=\"hr\"><\/div>\n\n    <div class=\"row\">\n      <div style=\"flex:1\">\n        <div class=\"h\">Compte<\/div>\n        <div id=\"account\" class=\"kv\">\n          <div class=\"skel\"><\/div><div class=\"skel\"><\/div>\n          <div class=\"skel\"><\/div><div class=\"skel\"><\/div>\n        <\/div>\n      <\/div>\n      <div style=\"flex:1\">\n        <div class=\"h\">Ent\u00eate #EXTM3U<\/div>\n        <div id=\"m3uHdr\" class=\"kv\">\n          <div class=\"skel\"><\/div><div class=\"skel\"><\/div>\n          <div class=\"skel\"><\/div><div class=\"skel\"><\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"toolbar\">\n      <input id=\"q\" class=\"input search\" placeholder=\"Rechercher nom, groupe, tvg-id, domaine\u2026\">\n      <select id=\"groupSel\" class=\"input\" style=\"min-width:220px\"><option value=\"__ALL\">Tous les groupes<\/option><\/select>\n      <select id=\"sortSel\" class=\"input\" style=\"min-width:160px\">\n        <option value=\"name\">Tri A \u2192 Z<\/option>\n        <option value=\"za\">Tri Z \u2192 A<\/option>\n        <option value=\"group\">Tri Groupe<\/option>\n        <option value=\"host\">Tri Domaine<\/option>\n      <\/select>\n      <span id=\"msg\" class=\"badge\">Pr\u00eat<\/span>\n    <\/div>\n\n    <div id=\"count\" class=\"muted\" style=\"margin-bottom:6px\">0 \u00e9l\u00e9ments<\/div>\n    <div id=\"list\" class=\"list\"><\/div>\n  <\/main>\n<\/div>\n\n<div id=\"toast\" class=\"toast\"><\/div>\n\n<script>\n'use strict';\n\/* ---------- State ---------- *\/\nconst S={raw:[],items:[],groups:[],view:{group:'__ALL',q:''},opts:{onlyHls:false,noRtmp:true,dedup:true,showDomain:true},useProxy:true,moreProxy:false};\nconst $=s=>document.querySelector(s);\nconst esc=s=>String(s??'').replace(\/[&<>\"']\/g,m=>({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#039;'}[m]));\nconst toast=t=>{const n=$(\"#toast\");n.textContent=t;n.classList.add('show');setTimeout(()=>n.classList.remove('show'),1600)};\n\n\/* ---------- Helpers ---------- *\/\nconst host=u=>{try{return new URL(u).host}catch{return''}};\nconst looksM3U=t=>\/#EXTM3U|#EXTINF\/i.test(t);\n\n\/* ---------- Logging ---------- *\/\nfunction log(msg){const c=$(\"#debug\");c.textContent+=(c.textContent==='\u2014'?'':\"\\n\")+msg;c.scrollTop=c.scrollHeight}\n\n\/* ---------- Fetch with proxies ---------- *\/\nasync function fetchOnce(url,timeout=12000){\n  const ctrl=new AbortController();const t=setTimeout(()=>ctrl.abort(),timeout);\n  try{const r=await fetch(url,{signal:ctrl.signal,credentials:'omit'});const txt=await r.text();if(!r.ok||!txt)throw new Error('HTTP '+r.status);return txt;}\n  finally{clearTimeout(t)}\n}\nasync function fetchText(url){\n  const steps=[];\n  const list=S.useProxy\n    ? (S.moreProxy\n        ? [u=>`https:\/\/corsproxy.io\/?${encodeURIComponent(u)}`,u=>`https:\/\/api.allorigins.win\/raw?url=${encodeURIComponent(u)}`,u=>`https:\/\/r.jina.ai\/http:\/\/${u.replace(\/^https?:\\\\\/\\\\\/\/,'')}`,u=>u]\n        : [u=>`https:\/\/corsproxy.io\/?${encodeURIComponent(u)}`,u=>`https:\/\/api.allorigins.win\/raw?url=${encodeURIComponent(u)}`,u=>u])\n    : [u=>u];\n  let last=null;\n  for(const build of list){\n    const t=build(url);\n    steps.push(t);\n    try{\n      log('\u2192 GET ' + t);\n      const txt=await fetchOnce(t,12000);\n      log(`\u2713 ${txt.length} chars re\u00e7us`);\n      return txt;\n    }catch(e){\n      log('\u2717 \u00c9chec : '+(e.message||e));\n      last=e;\n    }\n  }\n  throw last||new Error('Network');\n}\n\n\/* ---------- Parser ---------- *\/\nfunction parseM3U(text){\n  const out=[];const lines=text.replace(\/^\\\\uFEFF\/,'').split(\/\\\\r?\\\\n\/);\n  \/\/ header\n  const hdrLine=lines.find(l=>\/^#EXTM3U\/i.test(l))||''; const hdr={};\n  if(hdrLine){const rx=\/(\\\\w[\\\\w-]*)=\"([^\"]*)\"\/g;let m;while((m=rx.exec(hdrLine)))hdr[m[1]]=m[2];}\n  let cur=null,lastGrp='';\n  for(const raw of lines){\n    const l=raw.trim(); if(!l)continue;\n    if(\/^#EXTINF\/i.test(l)){\n      cur={attrs:{},name:''};\n      const arx=\/([\\\\w-]+)=\"([^\"]*)\"\/g;let mm;while((mm=arx.exec(l)))cur.attrs[mm[1]]=mm[2];\n      const idx=l.indexOf(',');cur.name=idx>-1?l.slice(idx+1).trim():l.replace(\/^#EXTINF:[^ ]+\/i,'').trim();\n    }else if(\/^#EXTGRP\/i.test(l)){\n      lastGrp=l.split(':').slice(1).join(':').trim();\n    }else if(\/^(https?:|rtmp:|rtsp:|udp:)\/i.test(l)){\n      if(!cur){const nm=l.split('\/').pop().split('?')[0];cur={attrs:{},name:nm||'Flux'};}\n      out.push({\n        name:cur.name,\n        url:l,\n        group:cur.attrs['group-title']||lastGrp||'',\n        logo:cur.attrs['tvg-logo']||'',\n        tvg_id:cur.attrs['tvg-id']||'',\n        tvg_name:cur.attrs['tvg-name']||''\n      });\n      cur=null;\n    }\n  }\n  return {header:hdr,items:out};\n}\n\n\/* ---------- Index \/ Filters \/ Render ---------- *\/\nfunction indexAll(){\n  let arr=S.raw.slice();\n  if(S.opts.onlyHls)arr=arr.filter(i=>\/\\\\.m3u8(\\\\?|$)\/i.test(i.url));\n  if(S.opts.noRtmp)arr=arr.filter(i=>!\/^rtmp\/i.test(i.url));\n  if(S.opts.dedup){const seen=new Set();arr=arr.filter(i=>{const k=(i.name+'|'+i.url).toLowerCase();if(seen.has(k))return false;seen.add(k);return true;});}\n  S.items=arr;\n  const gmap=new Map();arr.forEach(i=>gmap.set(i.group||'Sans groupe',(gmap.get(i.group||'Sans groupe')||0)+1));\n  S.groups=[...gmap.entries()].sort((a,b)=>a[0].localeCompare(b[0]));\n  const hosts=new Set(arr.map(i=>host(i.url)).filter(Boolean));\n  $(\"#cLive\").textContent=arr.filter(i=>!\/movie|series\/i.test(i.url)).length;\n  $(\"#cVod\").textContent=arr.filter(i=>\/movie\/i.test(i.url)).length;\n  $(\"#cSeries\").textContent=arr.filter(i=>\/series\/i.test(i.url)).length;\n  $(\"#cHosts\").textContent=hosts.size;\n  \/\/ header\/account already filled in run()\n}\nfunction fillAccount(u){\n  const kv=$(\"#account\"); kv.innerHTML='';\n  let user='',pass='',srv=''; try{const x=new URL(u);user=x.searchParams.get('username')||'';pass=x.searchParams.get('password')||'';srv=x.host||'';}catch{}\n  const pid='pwd-'+Math.random().toString(36).slice(2);\n  kv.insertAdjacentHTML('beforeend',`<div class=\"muted\">Username<\/div><div>${esc(user||'\u2014')}<\/div>`);\n  kv.insertAdjacentHTML('beforeend',`<div class=\"muted\">Password<\/div><div class=\"row\"><input id=\"${pid}\" type=\"password\" value=\"${esc(pass||'')}\" readonly class=\"input\" style=\"max-width:240px\"><button class=\"eye\" onclick=\"(function(){const x=document.getElementById('${pid}');x.type=(x.type==='password'?'text':'password');})()\">\ud83d\udc41<\/button><\/div>`);\n  kv.insertAdjacentHTML('beforeend',`<div class=\"muted\">Serveur<\/div><div>${esc(srv||'\u2014')}<\/div>`);\n}\nfunction fillHeader(h){\n  const kv=$(\"#m3uHdr\"); kv.innerHTML='';\n  const rows=[['url-tvg',h['url-tvg']||h['x-tvg-url']||'\u2014'],['x-tvg-url',h['x-tvg-url']||'\u2014'],['autres',Object.keys(h).length?JSON.stringify(h):'\u2014']];\n  rows.forEach(([k,v])=>kv.insertAdjacentHTML('beforeend',`<div class=\"muted\">${esc(k)}<\/div><div>${esc(v)}<\/div>`));\n}\nfunction fillGroups(){\n  const sel=$(\"#groupSel\"); sel.innerHTML='<option value=\"__ALL\">Tous les groupes<\/option>';\n  S.groups.forEach(([g,c])=>sel.insertAdjacentHTML('beforeend',`<option value=\"${esc(g)}\">${esc(g)} (${c})<\/option>`));\n  sel.value=S.view.group;\n}\nfunction render(){\n  let arr=S.items.slice();\n  if(S.view.group!=='__ALL')arr=arr.filter(i=>(i.group||'Sans groupe')===S.view.group);\n  const q=S.view.q.toLowerCase();\n  if(q)arr=arr.filter(i=>(i.name||'').toLowerCase().includes(q)||(i.group||'').toLowerCase().includes(q)||(i.tvg_id||'').toLowerCase().includes(q)||(host(i.url)||'').toLowerCase().includes(q));\n  const s=$(\"#sortSel\").value;\n  if(s==='za')arr.sort((a,b)=>(b.name||'').localeCompare(a.name||''));else\n  if(s==='group')arr.sort((a,b)=>(a.group||'').localeCompare(b.group||''));else\n  if(s==='host')arr.sort((a,b)=>(host(a.url)||'').localeCompare(host(b.url)||''));else\n  arr.sort((a,b)=>(a.name||'').localeCompare(b.name||''));\n  $(\"#count\").textContent=`${arr.length} \u00e9l\u00e9ments`;\n  $(\"#list\").innerHTML=arr.map(it=>`\n    <div class=\"card\">\n      <div class=\"thumb\"><\/div>\n      <div class=\"cap\">\n        <div class=\"ttl\" title=\"${esc(it.name)}\">${esc(it.name)}<\/div>\n        <div class=\"meta\">${esc(it.group||'Sans groupe')}${S.opts.showDomain?' \u00b7 '+esc(host(it.url)):\"\"}<\/div>\n        <div class=\"tags\">${it.tvg_id?`<span class=\"tag\">tvg-id: ${esc(it.tvg_id)}<\/span>`:''}<\/div>\n        <div class=\"actions\">\n          <a class=\"btn\" href=\"${esc(it.url)}\" target=\"_blank\" rel=\"noopener\">Ouvrir<\/a>\n          <button class=\"btn\" onclick=\"navigator.clipboard.writeText('${esc(it.url)}');\">Copier<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n  `).join('');\n}\n\n\/* ---------- Controller ---------- *\/\nfunction setStatsZero(){[\"cLive\",\"cVod\",\"cSeries\",\"cHosts\"].forEach(id=>document.getElementById(id).textContent='0');}\nfunction resetUI(){ $(\"#list\").innerHTML=''; $(\"#count\").textContent='0 \u00e9l\u00e9ments'; setStatsZero(); }\n\nasync function run(){\n  $(\"#msg\").textContent='Analyse\u2026'; $(\"#debug\").textContent='\u2014';\n  try{\n    const val=$(\"#iptv\").value.trim();\n    if(!val){ \/\/ d\u00e9mo int\u00e9gr\u00e9e\n      log('Mode d\u00e9mo : chargement playlist interne');\n      const demo=`#EXTM3U x-tvg-url=\"https:\/\/example.com\/epg.xml.gz\"\n#EXTINF:-1 tvg-id=\"TF1.fr\" tvg-name=\"TF1\" group-title=\"FR\/General\",TF1 FHD\nhttp:\/\/example.com\/live\/tf1\/playlist.m3u8\n#EXTINF:-1 group-title=\"FR\/Cinema\",CANAL+ 4K\nhttp:\/\/example.com\/movie\/cplus\/index.m3u8`;\n      const p=parseM3U(demo); S.raw=p.items; fillHeader(p.header); fillAccount('(d\u00e9mo)'); indexAll(); fillGroups(); render();\n      $(\"#msg\").textContent=`OK \u2022 ${S.raw.length} entr\u00e9es (d\u00e9mo)`; return;\n    }\n\n    \/\/ si l\u2019utilisateur colle directement le contenu M3U (#EXTM3U)\n    if(looksM3U(val) && !\/^https?:\/i.test(val)){\n      log('D\u00e9tection contenu M3U coll\u00e9 (pas d\u2019URL)');\n      const p=parseM3U(val); S.raw=p.items; fillHeader(p.header); fillAccount(null); indexAll(); fillGroups(); render();\n      $(\"#msg\").textContent=`OK \u2022 ${S.raw.length} entr\u00e9es (coll\u00e9)`; return;\n    }\n\n    \/\/ sinon: URL\n    fillAccount(val); \/\/ remplit username\/serveur\/\u0153il mdp si pr\u00e9sents\n    log('URL saisie : '+val);\n\n    \/\/ si URL Xtream get.php mais pas .m3u : on essaie tel quel (beaucoup renvoient bien un M3U)\n    const txt=await fetchText(val);\n    const head=txt.slice(0,800);\n    log('Aper\u00e7u re\u00e7u :\\n'+head);\n\n    if(!looksM3U(txt)){\n      $(\"#msg\").textContent='Ce contenu ne ressemble pas \u00e0 un M3U (#EXTM3U\/#EXTINF introuvable).';\n      toast('Pas un M3U \u2014 active Proxys \u00e9tendus, ou colle le fichier');\n      resetUI(); return;\n    }\n\n    const parsed=parseM3U(txt);\n    S.raw=parsed.items; fillHeader(parsed.header);\n    indexAll(); fillGroups(); render();\n    $(\"#msg\").textContent=`OK \u2022 ${S.raw.length} entr\u00e9es`;\n    if(!S.raw.length) toast('0 entr\u00e9e \u2014 essaye Proxys \u00e9tendus ou colle\/charge le fichier');\n  }catch(e){\n    log('ERREUR: '+(e&&e.message?e.message:e));\n    $(\"#msg\").textContent='\u00c9chec \u2014 active Proxys\/Proxys \u00e9tendus, ou colle\/charge un M3U.';\n    resetUI();\n  }\n}\n\n\/* ---------- Wiring ---------- *\/\nwindow.addEventListener('DOMContentLoaded',()=>{\n  \/\/ options\n  $(\"#onlyHls\").onchange=e=>{S.opts.onlyHls=e.target.checked;render()};\n  $(\"#noRtmp\").onchange=e=>{S.opts.noRtmp=e.target.checked;render()};\n  $(\"#dedup\").onchange=e=>{S.opts.dedup=e.target.checked;render()};\n  $(\"#showDomain\").onchange=e=>{S.opts.showDomain=e.target.checked;render()};\n  $(\"#useProxy\").onchange=e=>S.useProxy=e.target.checked;\n  $(\"#moreProxy\").onchange=e=>S.moreProxy=e.target.checked;\n  $(\"#dark\").onchange=e=>document.documentElement.style.colorScheme=e.target.checked?'dark':'light';\n\n  $(\"#q\").oninput=e=>{S.view.q=e.target.value;render()};\n  $(\"#groupSel\").onchange=e=>{S.view.group=e.target.value;render()};\n  $(\"#sortSel\").onchange=render;\n  $(\"#verify\").onclick=run;\n\n  \/\/ petite note d\u2019\u00e9tat\n  log('Pr\u00eat. Collez une URL M3U \/ Xtream puis cliquez sur \u00ab V\u00e9rifier \u00bb.');\n});\n<\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>xtreamCube IPTV checker \u2014 One-Button Failsafe xtreamCube IPTV checker V\u00e9rifier mon compte Proxy CORS Proxys \u00e9tendus Th\u00e8me sombre Options essentielles HLS uniquement (.m3u8) Exclure RTMP D\u00e9dupliquer (nom+url) Afficher domaine Console \u2014 Live0 Films0 S\u00e9ries0 Domaines0 Compte Ent\u00eate #EXTM3U Tous les groupes Tri A \u2192 ZTri Z \u2192 ATri GroupeTri Domaine Pr\u00eat 0 \u00e9l\u00e9ments<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1876","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/iptv.directory\/index.php\/wp-json\/wp\/v2\/pages\/1876","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/iptv.directory\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/iptv.directory\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/iptv.directory\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/iptv.directory\/index.php\/wp-json\/wp\/v2\/comments?post=1876"}],"version-history":[{"count":5,"href":"https:\/\/iptv.directory\/index.php\/wp-json\/wp\/v2\/pages\/1876\/revisions"}],"predecessor-version":[{"id":1881,"href":"https:\/\/iptv.directory\/index.php\/wp-json\/wp\/v2\/pages\/1876\/revisions\/1881"}],"wp:attachment":[{"href":"https:\/\/iptv.directory\/index.php\/wp-json\/wp\/v2\/media?parent=1876"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}