<?xml version="1.0" encoding="utf-8" standalone="yes"?>





<items>



<item>
<title>[COLOR yellow][B]   updated   $doregex[info]  [/B][/COLOR]   </title>
<link>$doregex[refresh]</link>
<regex>
<name>refresh</name>
<expres><![CDATA[#$pyFunction
def GetLSProData(page_data,Cookie_Jar,m):
 import xbmc 
 import xbmcgui 
 from datetime import datetime, timezone, timedelta
 xbmc.executebuiltin('Container.Refresh')
]]></expres>
<page></page>
</regex>
<regex>
<name>info</name>
<expres>$pyFunction: time.strftime('%d/%m/%Y')</expres>
<page></page>
<NOTPlayable>True</NOTPlayable>
</regex>
</item>


<item>
<title> </title>
<link> </link>
<thumbnail></thumbnail>
</item>



<item>
<title>Greek TV Series  [COLOR lightslategray][I] VPN required for some    [/I][/COLOR]  </title>
<link>$doregex[makelist0]</link>
<thumbnail>https://greek-movies.com/icon/logo.jpg</thumbnail>

<regex>
<name>makelist0</name>
<listrepeat><![CDATA[
<title>[makelist0.param2]  </title>
<link>$doregex[makelist]</link>
<thumbnail>https://greek-movies.com/icon/logo.jpg</thumbnail>
]]></listrepeat>
<expres><![CDATA[<option selected value="series.php?(.*?)">(.*?)</option>]]></expres>
<page>https://greek-movies.com/series.php</page>
<cookieJar></cookieJar>
</regex>

<regex>
<name>makelist</name>
<listrepeat><![CDATA[
<title>[makelist.param2]   </title>
<link>$doregex[makelist2]</link>
<thumbnail>https://greek-movies.com/icon/logo.jpg</thumbnail>
]]></listrepeat>
<expres><![CDATA[<option  value="(.*?)[makelist0.param1]">(.*?)<]]></expres>
<page>https://greek-movies.com/series.php</page>
</regex>

<regex>
<name>makelist2</name>
<listrepeat><![CDATA[
<title>[makelist2.param3]   </title>
<link>$doregex[makelist3]</link>
<thumbnail>https://greek-movies.com/icon/series/[makelist2.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[href='(.*?)'>.*?<img src='icon/series/(.*?)'>.*?text-center'>(.*?)<]]></expres>
<page>https://greek-movies.com/[makelist.param1][makelist0.param1]</page>
<referer>https://greek-movies.com/series.php</referer>
</regex>

<regex>
<name>makelist3</name>
<listrepeat><![CDATA[
<title>$doregex[episode]: [COLOR coral]  [makelist3.param2] [/COLOR]</title>
<link>$doregex[makelist4]</link>
<thumbnail>https://greek-movies.com/icon/series/[makelist2.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[loadEpisode\('([^']*)', 'n'.+?>(.*?)<]]></expres>
<page>https://greek-movies.com/[makelist2.param1]</page>
</regex>

<regex>
<name>episode</name>
<expres><![CDATA[</script><h4>(.*?)</h4>]]></expres>
<page>https://greek-movies.com/[makelist2.param1]</page>
</regex>

<regex>
<name>makelist4</name>
<listrepeat><![CDATA[
<title>[makelist4.param2]    </title>
<link>$doregex[select]</link>
<thumbnail>https://greek-movies.com/icon/series/[makelist2.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[href="(.*?)".+?>(.*?)<]]></expres>
<page>https://greek-movies.com/ajax.php?</page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0</agent>
<rawpost>type=episode&amp;epid=[makelist3.param1]&amp;view=n</rawpost>
</regex>

<regex>
<name>get_Page</name>
<expres>button' href='(.*?)'</expres>
<page>https://greek-movies.com/[makelist4.param1]</page>
</regex>

<regex>
<name>select</name>
<expres>$pyFunction: '$doregex[get_mega]' if not '$doregex[get_mega]'=='' else '$doregex[get_star]' if not '$doregex[get_star]'=='' else '$doregex[get_alpha]' if not '$doregex[get_alpha]'=='' else '$doregex[get_ant]' if not '$doregex[get_ant]'=='' else '$doregex[skai_1]' if not '$doregex[skai_1]'=='' else '$doregex[get_tvopen]' if not '$doregex[get_tvopen]'=='' else '$doregex[get_bitc]' if not '$doregex[get_bitc]'=='' else '$doregex[get_dmtn]' if not '$doregex[get_dmtn]'=='' else '$doregex[GetPageUrl]' </expres>
<page></page>
</regex>

<regex>
<name>GetPageUrl</name>
<expres><![CDATA[#$pyFunction
def GetLSProData(page_data,Cookie_Jar,m,url='$doregex[get_Page]'):
   import resolveurl
   u = resolveurl.resolve(url)
   return u
]]></expres>
<page></page>
<cookieJar></cookieJar>
</regex>

<regex>
<name>get_mega</name>
<expres>data-kwik_source="(.*?)"</expres>
<page>$doregex[get_Page]</page>
</regex>

<regex>
<name>get_star</name>
<expres>contentUrl": "(.*?)"</expres>
<page>$doregex[get_Page]</page>
</regex>

<regex>
<name>get_alpha</name>
<expres>(https.+mp4.+?)&amp;quot</expres>
<page>$doregex[alpha]</page>
</regex>
<regex>
<name>alpha</name>
<expres><![CDATA[#$pyFunction
import re
def GetLSProData(page_data, Cookie_Jar, m, url=''):
    original_url = "$doregex[get_Page]"
    new_base = "https://www.alphatv.gr/ajax/Isobar.AlphaTv.Components.PopUpVideo.PopUpVideo.PlayMedia/?"
    pattern = r'.*player&'
    new_url = re.sub(pattern, new_base, original_url)
    
    print(f"Original: {original_url}")
    print(f"Replaced: {new_url}")

]]></expres>
<page></page>
<cookieJar></cookieJar>
</regex>

<regex>
<name>ant1</name>
<expres>cid: '(.*?)'</expres>
<page>$doregex[get_Page]</page>
</regex>
<regex>
<name>get_ant</name>
<expres>url":"(.*?)"</expres>
<page>https://antenna.gr/templates/data/PlayerDataGraphQL_v2?cid=$doregex[ant1]</page>
</regex>

<regex>
<name>skai_1</name>
<expres>$pyFunction:'$doregex[mediaid]'.replace('\\','')</expres>
<page></page>
</regex>
<regex>
<name>mediaid</name>
<expres>media_item_file":"(.*?)"</expres>
<page>$doregex[get_Page]</page>
</regex>
<regex>
<name>get_skai</name>
<expres><![CDATA[#$pyFunction
def getUrl():
  url = 'https://videostream.skai.gr/skaivod/_definst_/mp4:skai/$doregex[skai_1]/chunklist.m3u8'
  return url

def GetLSProData(page_data,Cookie_Jar,m):
  import urllib.parse
  origin = 'https://www.skai.gr'
  referer = 'https://www.skai.gr/'
  useragent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:148.0) Gecko/20100101 Firefox/148.0'
  url=getUrl()
  return url + '|User-Agent=' + urllib.parse.quote_plus(useragent) + '&Origin=' + urllib.parse.quote_plus(origin) + '&Referer=' + urllib.parse.quote_plus(referer)
]]></expres>
<page></page>
<cookieJar></cookieJar>
</regex>


<regex>
<name>tvopen</name>
<expres>contentUrl": "https://www.tvopen.gr/watch/(.*?)/</expres>
<page>$doregex[get_Page]</page>
</regex>
<regex>
<name>get_tvopen</name>
<expres>stream":"(.*?)"</expres>
<page>https://www.tvopen.gr/templates/data/player?cid=$doregex[tvopen]</page>
</regex>

<regex>
<name>bitchute</name>
<expres>content="https://www.bitchute.com/embed/(.*?)"</expres>
<page>$doregex[get_Page]</page>
</regex>
<regex>
<name>get_bitc</name>
<expres>var media_url = '(.*?)'</expres>
<page>https://www.bitchute.com/api/beta9/embed/$doregex[bitchute]?videoID=$doregex[bitchute]</page>
</regex>

<regex>
<name>get_dmtn</name>
<expres><![CDATA[#$pyFunction
def GetLSProData(page_data, Cookie_Jar, m):
    url = "$doregex[dmtn2]"
    url = url.replace('&', '&amp;')
    
    return url
  
]]></expres>
<page></page>
<cookieJar></cookieJar>
</regex>

<regex>
<name>dmtn</name>
<expres>$pyFunction:'$doregex[get_Page]'.replace('https://www.dailymotion.com','https://www.dailymotion.com/player/metadata')</expres>
<page></page>
</regex>
<regex>
<name>dmtn1</name>
<expres><![CDATA[mpegURL","url":"(.*?)"]]></expres>
<page>$doregex[dmtn]</page>
</regex>
<regex>
<name>dmtn2</name>
<expres>$pyFunction:'$doregex[dmtn1]'.replace('\\','')</expres>
<page></page>
</regex>
<regex>
<name>dmtn3</name>
<expres>$pyFunction:urllib.quote_plus('$doregex[dmtn2]')</expres>
<page></page>
</regex>

<regex>
<name>get_utube</name>
<expres><![CDATA[$pyFunction:'$doregex[get_Page]'.replace('https://www.youtube.com/watch?v','plugin://plugin.video.youtube/play/?video_id')]]></expres>
<page></page>
</regex>

</item>



<item>
<title>Greekfun Year of Release</title>
<link>$doregex[makelist0]</link>
<thumbnail></thumbnail>

<!-- 1. LOCAL PYTHON YEAR GENERATOR (ZERO NETWORK REQUESTS) -->
<regex>
<name>makelist0</name>
<listrepeat><![CDATA[
<title>  [makelist0.param1]</title>
<link>$doregex[makelist]</link>
<thumbnail></thumbnail>
]]></listrepeat>
<expres><![CDATA[#$pyFunction
import datetime

def GetLSProData(page_data, Cookie_Jar, m):
    try:
        current_year = datetime.datetime.now().year
        years = [str(y) for y in range(current_year, 1999, -1)]
        return [(y,) for y in years]
    except Exception:
        return []
]]></expres>
<page></page>
</regex>


<regex>
<name>makelist</name>
<listrepeat><![CDATA[
<title>[makelist.param3]  </title>
<link>$doregex[makelist2]</link>
<thumbnail>[makelist.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[<a class="card" href="([^"]+)">\s*<img src="([^"]+)"[^>]*>\s*<div class="card-meta">\s*<div class="card-title">([^<]+)<]]></expres>
<page>https://greeksubsmovies.me/?filter=greek_series&amp;sort=recent&amp;f_year=[makelist0.param1]&amp;f_language=el&amp;page=1</page>
<cookieJar></cookieJar>
</regex>


<regex>
<name>makelist2</name>
<listrepeat><![CDATA[
<title>[makelist2.param2]  </title>
<link>$doregex[convert-url]|User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36</link>
<thumbnail>[makelist.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[#$pyFunction
import re

def GetLSProData(page_data, Cookie_Jar, m):
    # Extract the original groups: href, ep-code, and the episode title/span
    raw_results = re.findall('<div class="ep-row">[\s\S]*?<a href="(.*?)"[\s\S]*?ep-code">(.*?)<[\s\S]*?ep-name">(.*?)<[\s\S]*?onclick', page_data)
    
    formatted_results = []
    for href, ep_code, span_text in raw_results:
        # Search for pattern like s01e01, S01E01, s1e1, or S1E1 to pull out the numbers
        match = re.search(r'[sS](\d+)[eE](\d+)', ep_code)
        if match:
            season, episode = match.groups()
            # Format as Κύκλος 1 Επεισόδιο 001 (using zfill to pad the episode with zeros)
            ep_code = u"Season {} : Episode {}".format(int(season), episode.zfill(3))
            
        formatted_results.append((href, ep_code, span_text))
        
    return formatted_results


]]></expres>
<page>https://greeksubsmovies.me[makelist.param1]</page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36</agent>
<cookieJar></cookieJar>
</regex>

<regex>
<name>makelist3</name>
<expres>const _tok = "(.*?)"</expres>
<page>https://greeksubsmovies.me[makelist2.param1]</page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36</agent>
<cookieJar>greekjar</cookieJar>
</regex>

<regex>
<name>makelist4</name>
<expres>const _vid = (.*?);</expres>
<page>https://greeksubsmovies.me[makelist2.param1]</page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36</agent>
<cookieJar>greekjar</cookieJar>
</regex>

<regex>
<name>makelist5</name>
<expres>"(http.*?)"</expres>
<page>https://greeksubsmovies.me/api/video-src.php?t=$doregex[makelist3]&amp;v=$doregex[makelist4]</page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36</agent>
<referer>https://greeksubsmovies.me[makelist2.param1]</referer>
<cookieJar>greekjar</cookieJar>
</regex>

<regex>
<name>convert-url</name>
<expres>$pyFunction:'$doregex[makelist5]'.replace('\\/','/')</expres>
<page></page>
<cookieJar></cookieJar>
</regex>


</item>



<item>
<title>Greekfun All Series </title>
<link>$doregex[makelist]</link>
<thumbnail></thumbnail>


<regex>
<name>makelist</name>
<listrepeat><![CDATA[
<title>[makelist.param3]  </title>
<link>$doregex[makelist2]</link>
<thumbnail>[makelist.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[#$pyFunction
import re
from urllib.request import Request, urlopen

def GetLSProData(page_data, Cookie_Jar, m):
    # m is passed in from Livestreamspro, we will override it to 10 for pagination
    all_matches = []
    
    base_url = 'https://greeksubsmovies.me/?filter=greek_series&sort=recent&f_language=el&page='
    
    # Loop from page 1 to 10
    for page_num in range(1, 12):
        url = base_url + str(page_num)
        
        try:
            req = Request(url)
            req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36')
            
            with urlopen(req) as response:
                page_data = response.read().decode('utf-8', errors='ignore')
            
            # Extract matches using your regex logic
            raw_matches = re.findall('<a class="card" href="(.*?)"[\s\S]*?<img src="(.*?)" alt="(.*?)"[\s\S]*?<div', page_data)
            
            # Append tuples (link, image, title) to our master list
            all_matches.extend([(match[0], match[1], match[2]) for match in raw_matches])
            
        except Exception as e:
            # Handle connection errors if a page fails to load
            print(f"Failed to load page {page_num}: {str(e)}")
            continue
            
    return all_matches

]]></expres>
<page></page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36</agent>
<cookieJar></cookieJar>
</regex>


<regex>
<name>makelist2</name>
<listrepeat><![CDATA[
<title>[makelist2.param2]  </title>
<link>$doregex[convert-url]|User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36</link>
<thumbnail>[makelist.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[#$pyFunction
import re

def GetLSProData(page_data, Cookie_Jar, m):
    # Extract the original groups: href, ep-code, and the episode title/span
    raw_results = re.findall('<div class="ep-row">[\s\S]*?<a href="(.*?)"[\s\S]*?ep-code">(.*?)<[\s\S]*?ep-name">(.*?)<[\s\S]*?onclick', page_data)
    
    formatted_results = []
    for href, ep_code, span_text in raw_results:
        # Search for pattern like s01e01, S01E01, s1e1, or S1E1 to pull out the numbers
        match = re.search(r'[sS](\d+)[eE](\d+)', ep_code)
        if match:
            season, episode = match.groups()
            # Format as Κύκλος 1 Επεισόδιο 001 (using zfill to pad the episode with zeros)
            ep_code = u"Season {} : Episode {}".format(int(season), episode.zfill(3))
            
        formatted_results.append((href, ep_code, span_text))
        
    return formatted_results


]]></expres>
<page>https://greeksubsmovies.me[makelist.param1]</page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36</agent>
<cookieJar></cookieJar>
</regex>

<regex>
<name>makelist3</name>
<expres>const _tok = "(.*?)"</expres>
<page>https://greeksubsmovies.me[makelist2.param1]</page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36</agent>
<cookieJar>greekjar</cookieJar>
</regex>

<regex>
<name>makelist4</name>
<expres>const _vid = (.*?);</expres>
<page>https://greeksubsmovies.me[makelist2.param1]</page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36</agent>
<cookieJar>greekjar</cookieJar>
</regex>

<regex>
<name>makelist5</name>
<expres>"(http.*?)"</expres>
<page>https://greeksubsmovies.me/api/video-src.php?t=$doregex[makelist3]&amp;v=$doregex[makelist4]</page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36</agent>
<referer>https://greeksubsmovies.me[makelist2.param1]</referer>
<cookieJar>greekjar</cookieJar>
</regex>

<regex>
<name>convert-url</name>
<expres>$pyFunction:'$doregex[makelist5]'.replace('\\/','/')</expres>
<page></page>
<cookieJar></cookieJar>
</regex>

</item>


<item>
<title>Alpha TV Series [COLOR lightslategray][I]( current episodes ) [/I][/COLOR]  </title>
<link>$doregex[makelist]</link>
<thumbnail>https://upload.wikimedia.org/wikipedia/commons/thumb/e/eb/Alpha_TV_logo.svg/1280px-Alpha_TV_logo.svg.png</thumbnail>

<regex>
<name>makelist</name>
<listrepeat><![CDATA[
<title>[makelist.param2]  </title>
<link>$doregex[makelist2]</link>
<thumbnail>[makelist.param3]</thumbnail>
]]></listrepeat>
<expres><![CDATA[<figure class="card__image">\n.+?<a href="(.*?)".+?title="(.*?)">.+?\n.+?src="(.*?)"]]></expres>
<cookieJar></cookieJar>
<page>https://www.alphatv.gr/series/</page>
</regex>

<regex>
<name>makelist2</name>
<listrepeat><![CDATA[
<title>$doregex[replace]</title>
<link>$doregex[get-url]</link>
<thumbnail>[makelist.param3]</thumbnail>
]]></listrepeat>
<expres><![CDATA[<figure class="card__image">\n.+?<a href="(.*?)".+?title="(.*?)">.+?\n.+?srcset="(.*?)"]]></expres>
<cookieJar></cookieJar>
<page>[makelist.param1]episodes/</page>
</regex>

<regex>
<name>replace</name>
<expres>$pyFunction:'[makelist2.param2]'.replace('&amp;#8211;',' - ')</expres>
<page></page>
</regex>

<regex>
<name>get-url</name>
<expres><![CDATA[#$pyFunction
import re
import requests
import urllib
origin = 'https://www.alphatv.gr'
referer = 'https://www.alphatv.gr/'
useragent = 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.7727.138 Mobile Safari/537.36'

def GetLSProData(page_data, Cookie_Jar, m):
    # SAFETY BLOCK: Stops the recursive crash if makelist2 fails on an empty page
    if not page_data or "regexfailed" in page_data or len(page_data) < 50:
        return ""

    match = re.search(r'data-video-url="(https?://.*?\.mp4)"', page_data)
    
    if match:
        url = match.group(1)
        final_url = url + '|User-Agent=' + urllib.quote_plus(useragent) + \
                    '&Origin=' + urllib.quote_plus(origin) + \
                    '&Referer=' + urllib.quote_plus(referer)
        return final_url
    return ""

]]></expres>
<page>[makelist2.param1]</page>
<cookieJar></cookieJar>
</regex>

</item>




<item>
<title>Alpha TV Series  </title>
<link>$doregex[makelist]</link>
<thumbnail>https://upload.wikimedia.org/wikipedia/commons/thumb/e/eb/Alpha_TV_logo.svg/1280px-Alpha_TV_logo.svg.png</thumbnail>

<regex>
<name>makelist</name>
<listrepeat><![CDATA[
<title>[makelist.param2]  </title>
<link>$doregex[makelist2]</link>
<thumbnail>[makelist.param3]</thumbnail>
]]></listrepeat>
<expres><![CDATA[<figure class="card__image">\n.+?<a href="(.*?)".+?title="(.*?)">.+?\n.+?src="(.*?)"]]></expres>
<cookieJar></cookieJar>
<page>https://www.alphatv.gr/series/</page>
</regex>

<regex>
<name>makelist2</name>
<listrepeat><![CDATA[
<title>[makelist2.param2]  </title>
<link>$doregex[get-url]</link>
<thumbnail>[makelist.param3]</thumbnail>
]]></listrepeat>
<expres><![CDATA[#$pyFunction
import re
import html
from urllib.request import Request, urlopen

def GetLSProData(page_data, Cookie_Jar, m):
    all_matches = []
    base_url = '[makelist.param1]episodes/paged/'
    max_pages = 1
    
    # 1. Fetch Page 1 first to extract items and detect total pages
    try:
        first_url = base_url + '1/'
        req = Request(first_url)
        req.add_header('User-Agent', 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.7727.138 Mobile Safari/537.36')
        
        with urlopen(req) as response:
            page_1_data = response.read().decode('utf-8', errors='ignore')
        
        # Auto-detect max pages from pagination links
        page_nums = re.findall(r'/paged/(\d+)/', page_1_data)
        if page_nums:
            max_pages = max([int(p) for p in page_nums])
        
        # Extract matches from page 1 and clean titles
        raw_matches = re.findall('<figure class="card__image">\n.+?<a href="(.*?)".+?title="(.*?)">.+?\n.+?srcset="(.*?)"', page_1_data)
        for match in raw_matches:
            # Clean HTML entities and specific dash encodings safely
            title = html.unescape(match[1])
            clean_title = title.replace('&amp;#8211;', ' - ').replace('&#8211;', ' - ').replace('&ndash;', ' - ').replace('–', ' - ')
            all_matches.append((match[0], clean_title, match[2]))
        
    except Exception as e:
        print(f"Failed to load page 1: {str(e)}")
        return all_matches

    # 2. Loop from page 2 up to the auto-detected max_pages
    for page_num in range(2, max_pages + 1):
        url = base_url + str(page_num) + '/'
        
        try:
            req = Request(url)
            req.add_header('User-Agent', 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.7727.138 Mobile Safari/537.36')
            
            with urlopen(req) as response:
                page_data = response.read().decode('utf-8', errors='ignore')
            
            raw_matches = re.findall('<figure class="card__image">\n.+?<a href="(.*?)".+?title="(.*?)">.+?\n.+?srcset="(.*?)"', page_data)
            for match in raw_matches:
                title = html.unescape(match[1])
                clean_title = title.replace('&amp;#8211;', ' - ').replace('&#8211;', ' - ').replace('&ndash;', ' - ').replace('–', ' - ')
                all_matches.append((match[0], clean_title, match[2]))
            
        except Exception as e:
            print(f"Failed to load page {page_num}: {str(e)}")
            continue
            
    return all_matches

]]></expres>
<page></page>
<agent>Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.7727.138 Mobile Safari/537.36</agent>
<cookieJar></cookieJar>
</regex>

<regex>
<name>get-url</name>
<expres>data-video-url="(.*?)"</expres>
<page>[makelist2.param1]</page>
<cookieJar></cookieJar>
</regex>

</item>






<item>
<title>Mega TV Series  </title>
<link>$doregex[makelist]</link>
<thumbnail> </thumbnail>

<regex>
<name>makelist</name>
<listrepeat><![CDATA[
<title>[makelist.param3]   </title>
<link>$doregex[makelist2]</link>
<thumbnail>[makelist.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[<a class="card card--drawer" href="(.*?)">\s.+?\s.+?data-src="(.*?)".+?\s.+?\s.+?\s.+?<h3 class="card__title">(.*?)</h3>]]></expres>
<page>https://www.megatv.com/shows/</page>
</regex>

<regex>
<name>makelist2</name>
<listrepeat><![CDATA[
<title>[makelist2.param2]   </title>
<link>$doregex[makelist3]</link>
<thumbnail>[makelist2.param1]</thumbnail>
]]></listrepeat>
<expres><![CDATA[<img class=.+?data-src="(.*?)".+?alt="(.*?)">\n.+?\n.+?\n.+?\n.+?\s.+?\n.+?<a href="(.*?)"]]></expres>
<page>https://www.megatv.com[makelist.param1]</page>
</regex>

<regex>
<name>id</name>
<expres><![CDATA[<a class="btn btn--default btn--next btn--animated btn--glass" href="https://www.megatv.com/episodes(.*?)&type=tvshows">]]></expres>
<page>[makelist2.param3]</page>
</regex>


<regex>
<name>makelist3</name>
<listrepeat><![CDATA[
<title>[makelist3.param3] </title>
<inputstream>$doregex[list]</inputstream>
<thumbnail>[makelist3.param1]</thumbnail>
]]></listrepeat>
<expres><![CDATA[#$pyFunction
import re,requests,urllib.parse
def GetLSProData(page_data,Cookie_Jar,m):
 starturl = 'https://www.megatv.com/episodes/'
 centerurl = 'page/'
 firstpage = 1 
 endurl = '/$doregex[id]&type=tvshows&season'

 dataregex = '<a href="(.*?)".+?>\n.+?\n.+?<img class="lazyload" src="" data-src="(.*?)" alt="(.*?)">'
 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4482.0 Safari/537.36 Edg/92.0.874', 'Referer': 'https://www.megatv.com/'}
 fullurl = starturl + centerurl + str(firstpage) + endurl
 source = requests.get(fullurl, headers= headers).text
 data = []
 last = 1
 while firstpage <= last:
    try:
        fullurl = starturl + centerurl + str(firstpage) + endurl
        source = requests.get(fullurl, headers=headers).text
        data += re.findall(dataregex, source)
        firstpage += 1
    except:
        pass
 return data
]]></expres>
<cookieJar></cookieJar>
<page></page>
</regex>

<regex>
<name>makelist4</name>
<expres>data-kwik_source="(.*?)"</expres>
<cookieJar></cookieJar>
<page>[makelist3.param1]</page>
</regex>

<regex>
<name>list</name>
<expres><![CDATA[$pyFunction:'$doregex[makelist4]'.replace('playlist.m3u8','chunklist-f1-v1-a1.m3u8')]]></expres>
<page></page>
</regex>


</item>


<item>
<title>Skai Tv </title>	
<link>$doregex[makelistA]</link>
<thumbnail>http://dikomas2.dyndns.org:8080/Greek/logos/SKAI.png</thumbnail>

<regex>
<name>makelistA</name>
<listrepeat><![CDATA[
<title>[makelistA.param3]  </title>
<link>$doregex[makelist]</link>
<thumbnail>[makelistA.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[<li class="nav-item">\n.+?<a href="(.*?)".+?\n.+?\n.+?src="(.*?)".+?\n.+?<span class="nav-label">(.*?)</span>]]></expres>
<page>https://www.skai.gr/tv/</page>
</regex>

<regex>
<name>makelist</name>
<listrepeat><![CDATA[
<title>[makelist.param3]  </title>
<link>$doregex[makelist2]</link>
<thumbnail>[makelist.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[<a href="(.*?)" class="resio">\n.+?<img src="(.*?)" alt="(.*?)">]]></expres>
<page>[makelistA.param1]</page>
</regex>

<regex>
<name>makelist2</name>
<listrepeat><![CDATA[
<title>[makelist.param3]     [makelist2.param1] </title>
<link>https://videostream.skai.gr/skaivod/_definst_/mp4:skai/$doregex[get-page]/chunklist.m3u8</link>
<referer>https://www.skaitv.gr/</referer>
<thumbnail>$doregex[img]</thumbnail>
]]></listrepeat>
<expres><![CDATA["caption":.+?start.+?(\d{4}-\d{2}-\d{2}).+?link":"(.*?)","img":"(.*?)"]]></expres>
<page>https://www.skai.gr[makelist.param1]</page>
</regex>

<regex>
<name>get-page</name>
<expres>$pyFunction:'$doregex[iframe]'.replace('\/','/')</expres>
<page></page>
</regex>

<regex>
<name>iframe</name>
<expres>media_item_file":"(.*?)"</expres>
<page>https://www.skaitv.gr$doregex[page]</page>
<referer>https://www.skaitv.gr/</referer>
</regex>

<regex>
<name>page</name>
<expres>$pyFunction:'[makelist2.param2]'.replace('\/','/')</expres>
<page></page>
</regex>

<regex>
<name>img</name>
<expres>$pyFunction:'[makelist2.param3]'.replace('\\','')</expres>
<page></page>
</regex>

</item>




<item1>
<title>ΣΚΑΙ ΣΕΙΡΕΣ Test 2 </title>     
<link>$doregex[makelist]</link>
<thumbnail>http://dikomas2.dyndns.org:8080/Greek/logos/SKAI.png</thumbnail>

<!-- 1. List Series -->
<regex>
<name>makelist</name>
<listrepeat><![CDATA[
<title>[makelist.param3]  </title>
<link>$doregex[makelist2]</link>
<thumbnail>[makelist.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[<a href="(.*?)" class="resio">\s.+?<img src="(.*?)" alt="(.*?)">]]></expres>
<page>https://www.skai.gr/tv/shows/seires</page>
</regex>

<!-- 2. List all episodes across all pagination pages -->
<regex>
<name>makelist2</name>
<listrepeat><![CDATA[
<title>[makelist2.param2]  </title>
<link>https://videostream.skai.gr/skaivod/_definst_/mp4:skai/$doregex[get-page]/chunklist.m3u8</link>
<referer>https://www.skaitv.gr/</referer>
<thumbnail>[makelist2.param3]</thumbnail>
]]></listrepeat>
<expres><![CDATA[#$pyFunction
import re
import html
from urllib.request import Request, urlopen

def GetLSProData(page_data, Cookie_Jar, m):
    all_matches = []
    series_url = 'https://www.skai.gr' + '[makelist.param1]'
    
    try:
        req = Request(series_url)
        req.add_header('User-Agent', 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.7727.138 Mobile Safari/537.36')
        with urlopen(req) as response:
            series_html = response.read().decode('utf-8', errors='ignore')
        
        m_id = re.search(r'name2="but_(\d+)"', series_html)
        m_pages = re.search(r'name="(\d+)"', series_html)
        
        if not m_id:
            return all_matches
            
        show_id = m_id.group(1)
        total_pages = int(m_pages.group(1)) if m_pages else 1
        
        for i in range(total_pages):
            ajax_url = f"https://www.skai.gr/tv/ajaxshowsepisode/{show_id}/{i}"
            try:
                req_ajax = Request(ajax_url)
                req_ajax.add_header('User-Agent', 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.7727.138 Mobile Safari/537.36')
                with urlopen(req_ajax) as resp_ajax:
                    ajax_data = resp_ajax.read().decode('utf-8', errors='ignore')
                
                raw_matches = re.findall(r'<div class="col-lg-3 listimg list-item\s+color_seires">\s*<a href="([^"]+)"[^>]*>\s*<h3 class="title_r">([^<]+)<\/h3>\s*<img src="([^"]+)" alt="([^"]+)">\s*<\/a>\s*<\/div>', ajax_data)
                for match in raw_matches:
                    ep_link = match[0]
                    # Using the alt attribute (match[3]) for a richer title if desired, or match[1]
                    ep_title = html.unescape(match[3]).strip() if match[3] else html.unescape(match[1]).strip()
                    ep_thumb = match[2]
                    all_matches.append((ep_link, ep_title, ep_thumb))
            except Exception as e:
                print(f"Failed to load AJAX page {i}: {str(e)}")
                continue
                
    except Exception as e:
        print(f"Failed to load series page: {str(e)}")
        
    return all_matches
]]></expres>
<page></page>
<agent>Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.7727.138 Mobile Safari/537.36</agent>
<cookieJar></cookieJar>
</regex>

<regex>
<name>iframe</name>
<expres>media_item_file":"(.*?)"</expres>
<page>https://www.skaitv.gr$doregex[page]</page>
<referer>https://www.skaitv.gr/</referer>
</regex>

<regex>
<name>get-page</name>
<expres>$pyFunction:'$doregex[iframe]'.replace('\/','/')</expres>
<page></page>
</regex>

<regex>
<name>fix1</name>
<expres>$pyFunction:'[makelist2.param3]'.replace('         ','')</expres>
<page></page>
</regex>

<regex>
<name>page</name>
<expres>$pyFunction:'[makelist2.param1] '.replace('\/','/')</expres>
<page></page>
</regex>

<regex>
<name>img</name>
<expres>$pyFunction:'[makelist2.param3] '.replace('\/','/')</expres>
<page></page>
</regex>

</item1>















<item>
<title>ANT1 &#8211; &#925;&#932;&#917;&#929;&#932;&#921;</title>
<link>$doregex[makelist]</link>
<thumbnail>https://www.antenna.gr/imgHandler/380/New_Programmes_Antenna_gr_Nterti_960x1440_V2_37b783d45e.jpg</thumbnail>

<regex>
<name>makelist</name>
<listrepeat><![CDATA[
<title>[makelist.param1]  </title>
<link>https://antennavodgcp.antenna.gr/prod-multimedia/videos/[makelist.param2]</link>
<thumbnail>https://www.antenna.gr/imgHandler/380/New_Programmes_Antenna_gr_Nterti_960x1440_V2_37b783d45e.jpg</thumbnail>
]]></listrepeat>
<expres><![CDATA[#$pyFunction
def GetLSProData(page_data,Cookie_Jar,m,url = ''):
    r = [('\u039d\u03a4\u0395\u03a1\u03a4\u0399 \u2013 \u0395\u03a0\u0395\u0399\u03a3\u039f\u0394\u0399\u039f 01','NTERTI_S01_E001_mxf_12_b6e80a86d4.mp4')]
    r += [('\u039d\u03a4\u0395\u03a1\u03a4\u0399 \u2013 \u0395\u03a0\u0395\u0399\u03a3\u039f\u0394\u0399\u039f 02','NTERTI_S01_E002_6c980e7002.mp4')]
    r += [('\u039d\u03a4\u0395\u03a1\u03a4\u0399 \u2013 \u0395\u03a0\u0395\u0399\u03a3\u039f\u0394\u0399\u039f 03','NTERTI_S01_E003_antik_mxf_12_2ffc28fdbb.mp4')]
    r += [('\u039d\u03a4\u0395\u03a1\u03a4\u0399 \u2013 \u0395\u03a0\u0395\u0399\u03a3\u039f\u0394\u0399\u039f 04','NTERTI_S01_E004_mxf_12_c953f43d1c.mp4')]
    r += [('\u039d\u03a4\u0395\u03a1\u03a4\u0399 \u2013 \u0395\u03a0\u0395\u0399\u03a3\u039f\u0394\u0399\u039f 05','NTERTI_S01_E005_mxf_12_cfbbbcbb2a.mp4')]
    r += [('\u039d\u03a4\u0395\u03a1\u03a4\u0399 \u2013 \u0395\u03a0\u0395\u0399\u03a3\u039f\u0394\u0399\u039f 06','NTERTI_S01_E006_mxf_12_ffaf5651ed.mp4')]
    r += [('\u039d\u03a4\u0395\u03a1\u03a4\u0399 \u2013 \u0395\u03a0\u0395\u0399\u03a3\u039f\u0394\u0399\u039f 07','NTERTI_S01_E007_mxf_12_210e7fc227.mp4')]
    return r
]]></expres>
<page></page>
</regex>

</item>


<item>
<title>ANT1 &#8211; &#922;&#929;&#921;&#925;&#927; &#922;&#913;&#921; &#913;&#915;&#922;&#913;&#920;&#921;</title>
<link>$doregex[makelist]</link>
<thumbnail>https://www.antenna.gr/imgHandler/380/New_Programmes_Antenna_gr_Krino_and_Agathi_960x1440_f87aa031b2.jpg</thumbnail>

<regex>
<name>makelist</name>
<listrepeat><![CDATA[
<title>[makelist.param1]  </title>
<link>https://antennavodgcp.antenna.gr/prod-multimedia/videos/[makelist.param2]</link>
<thumbnail>https://www.antenna.gr/imgHandler/380/New_Programmes_Antenna_gr_Krino_and_Agathi_960x1440_f87aa031b2.jpg</thumbnail>
]]></listrepeat>
<expres><![CDATA[#$pyFunction
def GetLSProData(page_data,Cookie_Jar,m,url = ''):
    r = [('\u039a\u03a1\u0399\u039d\u039f \u039a\u0391\u0399 \u0391\u0393\u039a\u0391\u0398\u0399 \u2013 \u0395\u03a0\u0395\u0399\u03a3\u039f\u0394\u0399\u039f 01','KRINO_KAI_AGKATHI_S01_E001_mxf_12_a11ff4c644.mp4')]
    r += [('\u039a\u03a1\u0399\u039d\u039f \u039a\u0391\u0399 \u0391\u0393\u039a\u0391\u0398\u0399 \u2013 \u0395\u03a0\u0395\u0399\u03a3\u039f\u0394\u0399\u039f 02','KRINO_KAI_AGKATHI_S01_E002_mxf_12_2b42deb65d.mp4')]
    r += [('\u039a\u03a1\u0399\u039d\u039f \u039a\u0391\u0399 \u0391\u0393\u039a\u0391\u0398\u0399 \u2013 \u0395\u03a0\u0395\u0399\u03a3\u039f\u0394\u0399\u039f 03','KRINO_KAI_AGKATHI_S01_E003_mxf_12_c0265926ad.mp4')]
    r += [('\u039a\u03a1\u0399\u039d\u039f \u039a\u0391\u0399 \u0391\u0393\u039a\u0391\u0398\u0399 \u2013 \u0395\u03a0\u0395\u0399\u03a3\u039f\u0394\u0399\u039f 04','KRINO_KAI_AGKATHI_S01_E004_mxf_12_45adc6fff1.mp4')]
    r += [('\u039a\u03a1\u0399\u039d\u039f \u039a\u0391\u0399 \u0391\u0393\u039a\u0391\u0398\u0399 \u2013 \u0395\u03a0\u0395\u0399\u03a3\u039f\u0394\u0399\u039f 05','KRINO_KAI_AGKATHI_S01_E005_mxf_12_4b25761a2a.mp4')]
    return r
]]></expres>
<page></page>
</regex>

</item>




































<!-- 










<item>
<title>Alpha TV - All Episodes Test 4  </title>
<link>$doregex[makelist]</link>
<thumbnail>https://upload.wikimedia.org/wikipedia/commons/thumb/e/eb/Alpha_TV_logo.svg/1280px-Alpha_TV_logo.svg.png</thumbnail>

<regex>
<name>makelist</name>
<listrepeat><![CDATA[
<title>[makelist.param2]  </title>
<link>$doregex[makelist2]</link>
<thumbnail>[makelist.param3]</thumbnail>
]]></listrepeat>
<expres><![CDATA[<figure class="card__image">\n.+?<a href="(.*?)".+?title="(.*?)">.+?\n.+?src="(.*?)"]]></expres>
<cookieJar></cookieJar>
<page>https://www.alphatv.gr/series/</page>
</regex>



<regex>
<name>makelist2</name>
<listrepeat><![CDATA[
<title>$doregex[replace]  </title>
<link>$doregex[get-url]</link>
<thumbnail>[makelist.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[#$pyFunction
import re
from urllib.request import Request, urlopen

def GetLSProData(page_data, Cookie_Jar, m):
    # m is passed in from Livestreamspro, we will override it to 10 for pagination
    all_matches = []
    
    base_url = '[makelist.param1]episodes/paged/'
    
    # Loop from page 1 to 10
    for page_num in range(1, 18):
        url = base_url + str(page_num) +'/'
        
        try:
            req = Request(url)
            req.add_header('User-Agent', 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.7727.138 Mobile Safari/537.36')
            
            with urlopen(req) as response:
                page_data = response.read().decode('utf-8', errors='ignore')
            
            # Extract matches using your regex logic
            raw_matches = re.findall('<figure class="card__image">\n.+?<a href="(.*?)".+?title="(.*?)">.+?\n.+?srcset="(.*?)"', page_data)
            
            # Append tuples (link, image, title) to our master list
            all_matches.extend([(match[0], match[1], match[2]) for match in raw_matches])
            
        except Exception as e:
            # Handle connection errors if a page fails to load
            print(f"Failed to load page {page_num}: {str(e)}")
            continue
            
    return all_matches

]]></expres>
<page></page>
<agent>Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.7727.138 Mobile Safari/537.36</agent>
<cookieJar></cookieJar>
</regex>

<regex>
<name>replace</name>
<expres>$pyFunction:'[makelist2.param2]'.replace('&amp;#8211;',' - ')</expres>
<page></page>
</regex>

<regex>
<name>get-url</name>
<expres><![CDATA[#$pyFunction
import re
import urllib
origin = 'https://www.alphatv.gr'
referer = 'https://www.alphatv.gr/'
useragent = 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) LiveStreamPro'

def GetLSProData(page_data, Cookie_Jar, m):
    if not page_data or "regexfailed" in page_data or len(page_data) < 50:
        return ""

    match = re.search(r'data-video-url="(https?://.*?\.mp4)"', page_data)
    
    if match:
        url = match.group(1)
        final_url = url + '|User-Agent=' + urllib.quote_plus(useragent) + \
                    '&Origin=' + urllib.quote_plus(origin) + \
                    '&Referer=' + urllib.quote_plus(referer)
        return final_url
    return ""
]]></expres>
<page>[makelist2.param1]</page>
<cookieJar></cookieJar>
</regex>

</item>


<item>
<title>Alpha TV - All Episodes Test 10  </title>
<link>$doregex[makelist]</link>
<thumbnail>https://upload.wikimedia.org/wikipedia/commons/thumb/e/eb/Alpha_TV_logo.svg/1280px-Alpha_TV_logo.svg.png</thumbnail>

<regex>
<name>makelist</name>
<listrepeat><![CDATA[
<title>[makelist.param2]  </title>
<link>$doregex[makelist2]</link>
<thumbnail>[makelist.param3]</thumbnail>
]]></listrepeat>
<expres><![CDATA[<figure class="card__image">\n.+?<a href="(.*?)".+?title="(.*?)">.+?\n.+?src="(.*?)"]]></expres>
<cookieJar></cookieJar>
<page>https://www.alphatv.gr/series/</page>
</regex>

<regex>
<name>makelist2</name>
<listrepeat><![CDATA[
<title>$doregex[replace]  </title>
<link>$doregex[get-url]</link>
<thumbnail>[makelist2.param3]</thumbnail>
]]></listrepeat>
<expres><![CDATA[#$pyFunction
import re
from urllib.request import Request, urlopen

def GetLSProData(page_data, Cookie_Jar, m):
    all_matches = []
    base_url = '[makelist.param1]episodes/paged/'
    max_pages = 1
    
    # 1. Fetch Page 1 first to extract items and detect total pages
    try:
        first_url = base_url + '1/'
        req = Request(first_url)
        req.add_header('User-Agent', 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.7727.138 Mobile Safari/537.36')
        
        with urlopen(req) as response:
            page_1_data = response.read().decode('utf-8', errors='ignore')
        
        # Auto-detect max pages from pagination links (e.g., .../paged/16/)
        page_nums = re.findall(r'/paged/(\d+)/', page_1_data)
        if page_nums:
            max_pages = max([int(p) for p in page_nums])
        
        # Extract matches from page 1
        raw_matches = re.findall('<figure class="card__image">\n.+?<a href="(.*?)".+?title="(.*?)">.+?\n.+?srcset="(.*?)"', page_1_data)
        all_matches.extend([(match[0], match[1], match[2]) for match in raw_matches])
        
    except Exception as e:
        print(f"Failed to load page 1: {str(e)}")
        return all_matches

    # 2. Loop from page 2 up to the auto-detected max_pages
    for page_num in range(2, max_pages + 1):
        url = base_url + str(page_num) + '/'
        
        try:
            req = Request(url)
            req.add_header('User-Agent', 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.7727.138 Mobile Safari/537.36')
            
            with urlopen(req) as response:
                page_data = response.read().decode('utf-8', errors='ignore')
            
            raw_matches = re.findall('<figure class="card__image">\n.+?<a href="(.*?)".+?title="(.*?)">.+?\n.+?srcset="(.*?)"', page_data)
            all_matches.extend([(match[0], match[1], match[2]) for match in raw_matches])
            
        except Exception as e:
            print(f"Failed to load page {page_num}: {str(e)}")
            continue
            
    return all_matches

]]></expres>
<page></page>
<agent>Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.7727.138 Mobile Safari/537.36</agent>
<cookieJar></cookieJar>
</regex>

<regex>
<name>replace</name>
<expres>$pyFunction:'[makelist2.param2]'.replace('&amp;#8211;',' - ')</expres>
<page></page>
</regex>

<regex>
<name>get-url</name>
<expres>data-video-url="(.*?)"</expres>
<page>[makelist2.param1]</page>
<cookieJar></cookieJar>
</regex>

</item>



<item>
<title>Greekfun  </title>
<link>$doregex[makelist]</link>
<thumbnail></thumbnail>


<regex>
<name>makelist</name>
<listrepeat><![CDATA[
<title>[makelist.param3]  </title>
<link>$doregex[makelist2]</link>
<thumbnail>[makelist.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[#$pyFunction
import re
from urllib.request import Request, urlopen

def GetLSProData(page_data, Cookie_Jar, m):
    # m is passed in from Livestreamspro, we will override it to 10 for pagination
    all_matches = []
    
    base_url = 'https://greeksubsmovies.net/?filter=greek_series&sort=recent&f_language=el&page='
    
    # Loop from page 1 to 10
    for page_num in range(1, 12):
        url = base_url + str(page_num)
        
        try:
            req = Request(url)
            req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36')
            
            with urlopen(req) as response:
                page_data = response.read().decode('utf-8', errors='ignore')
            
            # Extract matches using your regex logic
            raw_matches = re.findall('<a class="card" href="(.*?)"[\s\S]*?<img src="(.*?)" alt="(.*?)"[\s\S]*?<div', page_data)
            
            # Append tuples (link, image, title) to our master list
            all_matches.extend([(match[0], match[1], match[2]) for match in raw_matches])
            
        except Exception as e:
            # Handle connection errors if a page fails to load
            print(f"Failed to load page {page_num}: {str(e)}")
            continue
            
    return all_matches

]]></expres>
<page></page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36</agent>
<cookieJar></cookieJar>
</regex>


<regex>
<name>makelist2</name>
<listrepeat><![CDATA[
<title>[makelist2.param2]  </title>
<link>$doregex[convert-url]|User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36</link>
<thumbnail>[makelist.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[#$pyFunction
import re

def GetLSProData(page_data, Cookie_Jar, m):
    # Extract the original groups: href, ep-code, and the episode title/span
    raw_results = re.findall('<div class="ep-row">[\s\S]*?<a href="(.*?)"[\s\S]*?ep-code">(.*?)<[\s\S]*?ep-name">(.*?)<[\s\S]*?onclick', page_data)
    
    formatted_results = []
    for href, ep_code, span_text in raw_results:
        # Search for pattern like s01e01, S01E01, s1e1, or S1E1 to pull out the numbers
        match = re.search(r'[sS](\d+)[eE](\d+)', ep_code)
        if match:
            season, episode = match.groups()
            # Format as Κύκλος 1 Επεισόδιο 001 (using zfill to pad the episode with zeros)
            ep_code = u"Season {} : Episode {}".format(int(season), episode.zfill(3))
            
        formatted_results.append((href, ep_code, span_text))
        
    return formatted_results


]]></expres>
<page>https://greeksubsmovies.net[makelist.param1]</page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36</agent>
<cookieJar></cookieJar>
</regex>

<regex>
<name>makelist3</name>
<expres>const _tok = "(.*?)"</expres>
<page>https://greeksubsmovies.net[makelist2.param1]</page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36</agent>
<cookieJar>greekjar</cookieJar>
</regex>

<regex>
<name>makelist4</name>
<expres>const _vid = (.*?);</expres>
<page>https://greeksubsmovies.net[makelist2.param1]</page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36</agent>
<cookieJar>greekjar</cookieJar>
</regex>

<regex>
<name>makelist5</name>
<expres>"(http.*?)"</expres>
<page>https://greeksubsmovies.net/api/video-src.php?t=$doregex[makelist3]&amp;v=$doregex[makelist4]</page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36</agent>
<referer>https://greeksubsmovies.net[makelist2.param1]</referer>
<cookieJar>greekjar</cookieJar>
</regex>

<regex>
<name>convert-url</name>
<expres>$pyFunction:'$doregex[makelist5]'.replace('\\/','/')</expres>
<page></page>
<cookieJar></cookieJar>
</regex>

</item>


<item>
<title>Greek TV Series  [COLOR lightslategray][I] VPN required for some    [/I][/COLOR]  </title>#03-04-2026
<link>$doregex[makelist0]</link>
<thumbnail>https://greek-movies.com/icon/logo.jpg</thumbnail>

<regex>
<name>makelist0</name>
<listrepeat><![CDATA[
<title>[makelist0.param2]  </title>
<link>$doregex[makelist]</link>
<thumbnail>https://greek-movies.com/icon/logo.jpg</thumbnail>
]]></listrepeat>
<expres><![CDATA[<option selected value="series.php?(.*?)">(.*?)</option>]]></expres>
<page>https://greek-movies.com/series.php</page>
</regex>

<regex>
<name>makelist</name>
<listrepeat><![CDATA[
<title>[makelist.param2]   </title>
<link>$doregex[makelist2]</link>
<thumbnail>https://greek-movies.com/icon/logo.jpg</thumbnail>
]]></listrepeat>
<expres><![CDATA[<option  value="(.*?)[makelist0.param1]">(.*?)<]]></expres>
<page>https://greek-movies.com/series.php</page>
</regex>

<regex>
<name>makelist2</name>
<listrepeat><![CDATA[
<title>[makelist2.param3]   </title>
<link>$doregex[makelist3]</link>
<thumbnail>https://greek-movies.com/icon/series/[makelist2.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[href='(.*?)'>.*?<img src='icon/series/(.*?)'>.*?text-center'>(.*?)<]]></expres>
<page>https://greek-movies.com/[makelist.param1][makelist0.param1]</page>
<referer>https://greek-movies.com/series.php</referer>
</regex>


<regex>
<name>makelist3</name>
<listrepeat><![CDATA[
<title>$doregex[episode]: [COLOR coral]  [makelist3.param2] [/COLOR]</title>
<link>$doregex[makelist4]</link>
<thumbnail>https://greek-movies.com/icon/series/[makelist2.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[loadEpisode\('([^']*)', 'n'.+?>(.*?)<]]></expres>
<page>https://greek-movies.com/[makelist2.param1]</page>
</regex>

<regex>
<name>episode</name>
<expres><![CDATA[</script><h4>(.*?)</h4>]]></expres>
<page>https://greek-movies.com/[makelist2.param1]</page>
</regex>

<regex>
<name>makelist4</name>
<listrepeat><![CDATA[
<title>[makelist4.param2]    </title>
<link>$doregex[select_Url]</link>
<thumbnail>https://greek-movies.com/icon/series/[makelist2.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[href="(.*?)".+?>(.*?)<]]></expres>
<page>https://greek-movies.com/ajax.php?</page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0</agent>
<rawpost>type=episode&amp;epid=[makelist3.param1]&amp;view=n</rawpost>
</regex>

<regex>
<name>get_Page</name>
<expres>button' href='(.*?)'</expres>
<page>https://greek-movies.com/[makelist4.param1]</page>
</regex>

<regex>
<name>select_Url</name>
<expres>$pyFunction: '$doregex[get_tvopen]' if not '$doregex[get_tvopen]'=='' else '$doregex[get_mega]' if not '$doregex[get_mega]'=='' else '$doregex[get_star]' if not '$doregex[get_star]'=='' else '$doregex[get_alpha]' if not '$doregex[get_alpha]'=='' else '$doregex[get_bitc]' if not '$doregex[get_bitc]'=='' else '$doregex[get_rslv]' if not '$doregex[get_rslv]'=='' else '$doregex[$doregex[get_skai]]' if not '$doregex[get_skai]'=='' else '$doregex[get_XXXX]' </expres>
<page></page>
</regex>



<regex>
<name>get_rslv</name>
<expres><![CDATA[#$pyFunction
import resolveurl
import urllib.parse
def GetLSProData(page_data,Cookie_Jar,m):
	url = '$doregex[getPage]'
	streamLink = resolveurl.resolve(url)
	return streamLink
]]></expres>
<page></page>
</regex>	

<regex>
<name>get_mega</name>
<expres>data-kwik_source="(.*?)"</expres>
<page>$doregex[get_Page]</page>
</regex>

<regex>
<name>get_star</name>
<expres>contentUrl": "(.*?)"</expres>
<page>$doregex[get_Page]</page>
</regex>

<regex>
<name>ant1</name>
<expres>cid: '(.*?)'</expres>
<page>$doregex[get_Page]</page>
</regex>
<regex>
<name>get_ant</name>
<expres>url":"(.*?)"</expres>
<page>https://antenna.gr/templates/data/PlayerDataGraphQL_v2?cid=$doregex[ant1]</page>
</regex>

<regex>
<name>skai_1</name>
<expres>$pyFunction:'$doregex[mediaid]'.replace('\\','')</expres>
<page></page>
</regex>
<regex>
<name>mediaid</name>
<expres>media_item_file":"(.*?)"</expres>
<page>$doregex[get_Page]</page>
</regex>
<regex>
<name>get_skai</name>
<expres><![CDATA[#$pyFunction
def getUrl():
  url = 'https://videostream.skai.gr/skaivod/_definst_/mp4:skai/$doregex[skai_1]/chunklist.m3u8'
  return url

def GetLSProData(page_data,Cookie_Jar,m):
  import urllib.parse
  origin = 'https://www.skai.gr'
  referer = 'https://www.skai.gr/'
  useragent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:148.0) Gecko/20100101 Firefox/148.0'
  url=getUrl()
  return url + '|User-Agent=' + urllib.parse.quote_plus(useragent) + '&Origin=' + urllib.parse.quote_plus(origin) + '&Referer=' + urllib.parse.quote_plus(referer)
]]></expres>
<page></page>
<cookieJar></cookieJar>
</regex>

<regex>
<name>get_alpha</name>
<expres>(https.+mp4.+?)&amp;quot</expres>
<page>$doregex[alpha]</page>
</regex>


<regex>
<name>alpha</name>
<expres><![CDATA[#$pyFunction
import re
def GetLSProData(page_data, Cookie_Jar, m, url=''):
    original_url = "$doregex[get_Page]"
    new_base = "https://www.alphatv.gr/ajax/Isobar.AlphaTv.Components.PopUpVideo.PopUpVideo.PlayMedia/?"
    pattern = r'.*player&'
    new_url = re.sub(pattern, new_base, original_url)
    print(f"Original: {original_url}")
    print(f"Replaced: {new_url}")

    return new_url

]]></expres>
<page></page>
<cookieJar></cookieJar>
</regex>

<regex>
<name>tvopen</name>
<expres>contentUrl": "https://www.tvopen.gr/watch/(.*?)/</expres>
<page>$doregex[get_Page]</page>
</regex>
<regex>
<name>get_tvopen</name>
<expres>stream":"(.*?)"</expres>
<page>https://www.tvopen.gr/templates/data/player?cid=$doregex[tvopen]</page>
</regex>

<regex>
<name>bitchute</name>
<expres>content="https://www.bitchute.com/embed/(.*?)"</expres>
<page>$doregex[get_Page]</page>
</regex>
<regex>
<name>get_bitc</name>
<expres>var media_url = '(.*?)'</expres>
<page>https://www.bitchute.com/api/beta9/embed/$doregex[bitchute]?videoID=$doregex[bitchute]</page>
</regex>

</item>


<item>
<title>Greek Series   Alphabetically  </title>
<link>$doregex[makelist]</link>
<thumbnail>https://greek-movies.com/icon/logo.jpg</thumbnail>

<regex>
<name>makelist</name>
<listrepeat><![CDATA[
<title>[makelist.param2]</title>
<link>$doregex[makelist2]</link>
<thumbnail>https://greek-movies.com/icon/logo.jpg</thumbnail>
]]></listrepeat>
<expres><![CDATA[<option  value="(.*?)&y=&c=&g=">(.*?)<]]></expres>
<page>https://greek-movies.com/series.php</page>
</regex>

<regex>
<name>makelist2</name>
<listrepeat><![CDATA[
<title>[makelist2.param3]  </title>
<link>$doregex[makelist3]</link>
<thumbnail>https://greek-movies.com/icon/series/[makelist2.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[href='(.*?)'>.*?<img src='icon/series/(.*?)'>.*?text-center'>(.*?)<]]></expres>
<page>https://greek-movies.com/[makelist.param1]&amp;y=&amp;c=&amp;g=</page>
<referer>https://greek-movies.com/series.php</referer>
</regex>

<regex>
<name>makelist3</name>
<listrepeat><![CDATA[
<title>Episode  [makelist3.param2] </title>
<link>$doregex[makelist4]</link>
<thumbnail>https://greek-movies.com/icon/series/[makelist2.param2]</thumbnail>
]]></listrepeat>
<expres><![CDATA[loadEpisode\('([^']*)', 'n'.+?>(.*?)<]]></expres>
<page>https://greek-movies.com/[makelist2.param1]</page>
</regex>


<regex>
<name>makelist4</name>
<listrepeat><![CDATA[
<title>[makelist4.param2]    </title>
<link>$doregex[id3]</link>
<thumbnail>$pyFunction: urllib.quote_plus('https://greek-movies.com/[makelist2.param2]').replace('%3A',':').replace('%2F','/')</thumbnail>
]]></listrepeat>
<expres><![CDATA[href="(.*?)".+?>(.*?)<]]></expres>
<page>https://greek-movies.com/ajax.php?</page>
<agent>Mozilla/5.0</agent>
<rawpost>type=episode&amp;epid=[makelist3.param1]&amp;view=n</rawpost>
</regex>      

<regex>
<name>id3</name>
<expres><![CDATA[#$pyFunction
import resolveurl
def GetLSProData(page_data,Cookie_Jar,m):
	url = '$doregex[getPage]'
	streamLink = resolveurl.resolve(url)
	return streamLink
]]></expres>
<page></page>
</regex>	

<regex>
<name>getPage</name>
<expres>button' href='(.*?)'</expres>
<page>https://greek-movies.com/[makelist4.param1]</page>
<referer>https://greek-movies.com/[makelist.param1][makelist0.param2]</referer>
<connection>keep-alive</connection>
<accept>*/*</accept>
<X-Req>XMLHttpRequest</X-Req>
<cookieJar></cookieJar>
</regex>

</item>



<item>
<title>Grand Hotel</title>
<link>$doregex[makelist0]</link>
<thumbnail>https://greek-movies.com/icon/series/Grandhotel2024.jpg</thumbnail>
<regex>
<name>makelist0</name>
<listrepeat><![CDATA[
<title>[makelist0.param1]  </title>
<link>https://antennavodgcp.antenna.gr/prod-multimedia/videos/[makelist0.param2]</link>
<thumbnail>https://greek-movies.com/icon/series/Grandhotel2024.jpg</thumbnail>
]]></listrepeat>
<expres><![CDATA[#$pyFunction
import xbmc
def GetLSProData(page_data,Cookie_Jar,m,url = ''):
    r = [('','')]
    r += [('Season 2  Episode 110','GRAND_HOTEL_S02_E110_mxf_12_504952c468.mp4')]
    r += [('Season 2  Episode 109','GRAND_HOTEL_S02_E109_mxf_12_f5351e9556.mp4')]
    r += [('Season 2  Episode 108','GRAND_HOTEL_S02_E108_mxf_12_5096aac75f.mp4')]
    r += [('Season 2  Episode 107','GRAND_HOTEL_S02_E107_mxf_12_214495a999.mp4')]
    r += [('Season 2  Episode 106','GRAND_HOTEL_S02_E106_mxf_12_da5d617b1b.mp4')]
    r += [('Season 2  Episode 105','GRAND_HOTEL_S02_E105_mxf_12_219e54ff07.mp4')]
    r += [('Season 2  Episode 104','GRAND_HOTEL_S02_E104_mxf_12_e83943a427.mp4')]
    r += [('Season 2  Episode 103','GRAND_HOTEL_S02_E103_mxf_12_4c350b5560.mp4')]
    r += [('Season 2  Episode 102','GRAND_HOTEL_S02_E102_mxf_12_ee1488bae4.mp4')]
    r += [('Season 2  Episode 101','GRAND_HOTEL_S02_E101_mxf_12_9af111b457.mp4')]
    r += [('Season 2  Episode 100','GRAND_HOTEL_S02_E100_mxf_12_3788811a59.mp4')]
    r += [('Season 2  Episode 99','GRAND_HOTEL_S02_E099_mxf_12_11ebbf0b54.mp4')]
    r += [('Season 2  Episode 98','GRAND_HOTEL_S02_E098_mxf_12_3dc2191230.mp4')]
    r += [('Season 2  Episode 97','GRAND_HOTEL_S02_E097_Antik_mxf_12_f679d2f8e5.mp4')]
    r += [('Season 2  Episode 96','GRAND_HOTEL_S02_E096_mxf_12_136edd3bbd.mp4')]
    r += [('Season 2  Episode 95','GRAND_HOTEL_S02_E095_mxf_12_b32abc55b7.mp4')]
    r += [('Season 2  Episode 94','GRAND_HOTEL_S02_E094_antik_mxf_12_47ac63e3b4.mp4')]
    r += [('Season 2  Episode 93','GRAND_HOTEL_S02_E093_mxf_12_ab4ae7ebe9.mp4')]
    r += [('Season 2  Episode 92','GRAND_HOTEL_S02_E092_mxf_12_ba1b4db96a.mp4')]
    r += [('Season 2  Episode 91','GRAND_HOTEL_S02_E091_mxf_12_7b98d3722d.mp4')]
    r += [('Season 2  Episode 90','GRAND_HOTEL_S02_E090_mxf_12_38f4df5758.mp4')]
    r += [('Season 2  Episode 89','GRAND_HOTEL_S02_E089_mxf_12_acf412bfff.mp4')]
    r += [('Season 2  Episode 88','GRAND_HOTEL_S02_E088_mxf_12_23d04e6dfe.mp4')]
    r += [('Season 2  Episode 87','GRAND_HOTEL_S02_E087_mxf_12_e58de3d00f.mp4')]
    r += [('Season 2  Episode 86','GRAND_HOTEL_S02_E086_mxf_12_c44ed5f013.mp4')]
    r += [('Season 2  Episode 85','GRAND_HOTEL_S02_E085_mxf_12_214a6274a6.mp4')]
    r += [('Season 2  Episode 84','GRAND_HOTEL_S02_E084_antik_mxf_12_699a2c31d0.mp4')]
    return r
]]></expres>
<page></page>
</regex>
</item>









 -->


	
</items>
