-
Notifications
You must be signed in to change notification settings - Fork 0
/
nrktoxbmc.py
81 lines (65 loc) · 2.57 KB
/
nrktoxbmc.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# Imports
import sys
import re
import json
import requests
# Config
hosts = [
{'name':'kontor', 'host':'192.168.1.10', 'port':'8060', 'user':'xbmc', 'pasw':'xbmc'},
{'name':'stue', 'host':'192.168.1.11', 'port':'8060', 'user':'xbmc', 'pasw':'xbmc'}
]
# Call XBMC
def call_xbmc(host, stream):
url = 'http://' + host['host'] + ':' + host['port'] + '/jsonrpc'
xbmc = requests.get(url + '?request={"jsonrpc":"2.0","id":"1","method":"Player.Open","params":{"item":{"file":"' + stream + '"}}}', auth=(host['user'], host['pasw']))
if xbmc.status_code == 200:
if xbmc.json()['result'] == 'OK':
return True
return False
# Get video id
def get_video_id(url):
# Find video id
video_id = re.search(r'\/([a-z]{4}[0-9]+)', url)
if video_id:
if video_id.group(1):
return video_id.group(1)
return None
# Get stream url
def get_stream_url(video_id):
session = requests.session()
session.headers['User-Agent'] = 'xbmc.org'
session.headers['X-Requested-With'] = 'XMLHttpRequest'
session.headers['Cookie'] = "NRK_PLAYER_SETTINGS_TV=devicetype=desktop&preferred-player-odm=hlslink&preferred-player-live=hlslink"
data = session.get(('http://v7.psapi.nrk.no/mediaelement/%s' % video_id)).json()
return {'available': data['isAvailable'], 'title': data['fullTitle'], 'duration': data['duration'], 'url': data['mediaUrl']}
# Main
if __name__ == '__main__':
# Header
print '[NRKtoXBMC]',
# Host
host = hosts[0]
if len(sys.argv) == 1:
print '[USAGE] nrktoxbmc.py <nrk_url> [<host_name>]'
if len(sys.argv) > 1:
if len(sys.argv) == 3:
for h in hosts:
if h == sys.argv[2]:
host = h
# URL
if sys.argv[1]:
# Get video id
video_id = get_video_id(sys.argv[1])
if video_id:
# Get stream
stream = get_stream_url(video_id)
if stream['available'] and stream['url']:
# Call XBMC
response = call_xbmc(host, stream['url'])
if response:
print '[OK]', 'Stream sent to XBMC host'
else:
print '[FAIL]', 'Could not open stream url in XBMC. Wrong XBMC config?'
else:
print '[FAIL]', 'Could not get stream url. Maybe it\'s not available anymore?'
else:
print '[FAIL]', 'No video id found. Valid url?'