forked from simokivimaki/viihdepython
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathelisaviihde.py
126 lines (110 loc) · 4.3 KB
/
elisaviihde.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
from __future__ import absolute_import, division, print_function, unicode_literals
import requests
import json
class Elisaviihde:
url = 'https://elisaviihde.fi/'
# please call login after init
def __init__(self):
self.session = requests.Session()
def login(self, username, password):
params = {'username': username, 'password': password}
r = self.session.post(Elisaviihde.url + 'api/user', data=params)
login_ok = r.status_code == 200
print('Elisa Viihde Login', 'OK' if login_ok else 'FAILED')
return login_ok
''' (folders contains folders recursively)
depth: 2
folders: []
hasHierarchyRecordingRules: true
hasNewRecordings: true
hasRecordingRules: true
id: 1831964
locked: false
name: "A-studio"
newRecordingsCount: 4
open: false
parentFolder: false
'''
def folders(self):
r = self.session.get(Elisaviihde.url + 'tallenteet/api/folders')
result = r.json()
return result['folders']
''' (array of recordings)
channel: "Sub"
channelId: 42
description: "Kauhujen talo XXV. Simpsonit sukeltavat toiseen ulottuvuuteen ja kokevat Moen johtaman "Kellopeliappelsiini"-jengin vallan. Amerikkalainen piirrossarja."
duration: 1800
durationMinutes: 30
endTimeUTC: 1429034400000
finished: true
folderId: 1831910
isWatched: true
name: "Simpsonit (12)"
programId: 1902642
recordingId: 0
recordingState: "finished"
scrambled: false
serviceName: "Sub"
startTime: "14.04.2015 20.30"
startTimeFormatted: "ti 14.04.2015 20.30"
startTimeUTC: 1429032600000
thumbnail: "http://thumbs.elisaviihde.fi/thumbnails/1902642.jpg"
thumbnailUrl: "//thumbs.elisaviihde.fi/thumbnails/1902642.jpg"
'''
def recordings(self, folderid):
allresults = []
page = 0
while True:
params = {'page': page, 'sortBy': 'startTime', 'sortOrder': 'desc', 'watchedStatus': 'all'}
r = self.session.get(Elisaviihde.url + 'tallenteet/api/recordings/' + str(folderid), params=params)
result = r.json()
if len(result) == 0:
break
allresults.extend(result)
page += 1
print('Found', len(allresults), 'recordings for folder', folderid)
return allresults
def delete(self, programid):
r = self.session.delete(Elisaviihde.url + 'tallenteet/api/recordings/' + str(programid))
result = r.status_code == 200
print('Deleted recording', programid, ':', result)
return result
def create_subfolder(self, foldername, parentid):
headers = {'Content-Type': 'application/json'}
data = {'parentId': parentid, 'folderName': foldername}
r = self.session.put(Elisaviihde.url + 'tallenteet/api/folder', headers=headers, data=json.dumps(data))
newfolderid = int(r.text)
print('Created folder', foldername, ':', newfolderid)
return self.find_folder_by_id(newfolderid)
def move(self, programid, folderid):
params = {'folderId': folderid}
r = self.session.put(Elisaviihde.url + 'tallenteet/api/recordings/move/' + str(programid), params=params)
result = r.status_code == 200
print('Moved recording', programid, 'to folderid', folderid, ':', result)
return result
def find_folder_by_name(self, foldername):
folders = self.folders()
return find_folder_recursive(folders, 'name', foldername)
def find_folder_by_id(self, folderid):
folders = self.folders()
return find_folder_recursive(folders, 'id', folderid)
def find_or_create_subfolder(self, foldername, parentid):
folders = self.find_folder_by_id(parentid)['folders']
folder = find_folder_recursive(folders, 'name', foldername)
if folder is None:
folder = self.create_subfolder(foldername, parentid)
return folder
def ls_recordings_recursive(self, folder, result):
recordings = self.recordings(folder['id'])
result.extend(recordings)
subfolders = folder['folders']
for subfolder in subfolders:
self.ls_recordings_recursive(subfolder, result)
return result
def find_folder_recursive(folders, key, value):
for folder in folders:
if folder[key] == value:
return folder
for folder in folders:
return find_folder_recursive(folder['folders'], key, value)
return None