mirror of
				https://github.com/adef17286-sudo/KIJK_dl.git
				synced 2025-11-04 05:14:49 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import requests
 | 
						|
import re
 | 
						|
import sys
 | 
						|
 | 
						|
def fetch_video_info(guid):
 | 
						|
    url = f"https://api.prd.video.talpa.network/graphql?query=query+GetVideoQuery%28%24guid%3A%5BString%5D%29%7Bprograms%28guid%3A%24guid%29%7Bitems%7Bguid+type+metadata+availableRegion+...Media+...Tracks+...Sources%7D%7D%7Dfragment+Media+on+Program%7Bmedia%7Btype+availableDate+availabilityState+airedDateTime+expirationDate%7D%7Dfragment+Tracks+on+Program%7Btracks%7Bfile+kind+label%7D%7Dfragment+Sources+on+Program%7Bsources%7Btype+file+drm%7D%7D&variables=%7B%22guid%22%3A%22{guid}%22%7D"
 | 
						|
    
 | 
						|
    headers = {
 | 
						|
        "accept": "*/*",
 | 
						|
        "accept-language": "nl-NL,nl;q=0.9,en-US;q=0.8,en;q=0.7",
 | 
						|
        "content-type": "application/json",
 | 
						|
        "priority": "u=1, i",
 | 
						|
        "sec-ch-ua": "\"Google Chrome\";v=\"141\", \"Not?A_Brand\";v=\"8\", \"Chromium\";v=\"141\"",
 | 
						|
        "sec-ch-ua-mobile": "?0",
 | 
						|
        "sec-ch-ua-platform": "\"Windows\"",
 | 
						|
        "sec-fetch-dest": "empty",
 | 
						|
        "sec-fetch-mode": "cors",
 | 
						|
        "sec-fetch-site": "cross-site",
 | 
						|
    }
 | 
						|
 | 
						|
    response = requests.get(url, headers=headers)
 | 
						|
 | 
						|
    if response.status_code == 200:
 | 
						|
        json_response = response.json()
 | 
						|
        
 | 
						|
        dash_link = None
 | 
						|
        widevine_license_server = None
 | 
						|
        
 | 
						|
        items = json_response.get('data', {}).get('programs', {}).get('items', [])
 | 
						|
        
 | 
						|
        for item in items:
 | 
						|
            for source in item.get('sources', []):
 | 
						|
                if source['type'] == 'dash' and 'drm' in source and 'widevine' in source['drm']:
 | 
						|
                    dash_link = source['file']
 | 
						|
                    widevine_license_server = source['drm']['widevine']['url']
 | 
						|
                    break  # Exit loop once we find the first match
 | 
						|
                
 | 
						|
        return {
 | 
						|
            "dash_link": dash_link,
 | 
						|
            "widevine_license_server": widevine_license_server
 | 
						|
        }
 | 
						|
    else:
 | 
						|
        return {"error": f"Request failed with status code {response.status_code}"}
 | 
						|
 | 
						|
def extract_guid(url):
 | 
						|
    # Check if the URL starts with the required base URL
 | 
						|
    if not url.startswith("https://www.kijk.nl/programmas/"):
 | 
						|
        return None
 | 
						|
    
 | 
						|
    # Regex to extract GUID (the segment before the last slash)
 | 
						|
    match = re.match(r'https://www\.kijk\.nl/programmas/[^/]+/([^/?]+)', url)
 | 
						|
    if match:
 | 
						|
        return match.group(1)
 | 
						|
    return None
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    if len(sys.argv) != 2:
 | 
						|
        print("Usage: python script.py {url}")
 | 
						|
        sys.exit(1)
 | 
						|
    
 | 
						|
    user_url = sys.argv[1]
 | 
						|
    guid = extract_guid(user_url)
 | 
						|
    
 | 
						|
    if guid:
 | 
						|
        video_info = fetch_video_info(guid)
 | 
						|
        
 | 
						|
        if 'error' not in video_info:
 | 
						|
            print(f"DASH Link: {video_info['dash_link']}")
 | 
						|
            print(f"Widevine License Server: {video_info['widevine_license_server']}")
 | 
						|
        else:
 | 
						|
            print(video_info['error'])
 | 
						|
    else:
 | 
						|
        print("Invalid URL. Please ensure it starts with 'https://www.kijk.nl/programmas/' and contains a GUID.")
 |