Cette année, je suis parti sur l’idée de me faire une playlist sur plex ou je rajoute chaque jour une chanson.
Pour tracer ça et éviter après un week-end brumeux de rajouter une chanson, ou de zapper tout simplement. Je me suis fait une tache dans wunderlist pour me rappeler de mettre une chanson.
Et puis, pour jouer je me suis dit que ce serait sympa de savoir combien de chanson sont manquantes exactement.
Pre-requis:
1. Avoir son token plex –> hop
2. Creer une application wunderlist et recuperer l’id et le token –> explication
D’où ce petit script qui tient ma tache a jour:
#!/usr/bin/python
# coding: utf-8
import requests
from datetime import datetime
from xml.etree import ElementTree
plex_token = "ton_token_plex"
plex_url = "http://ton_serveur:32400/playlists/all?X-Plex-Token="
titre_playlist = '2016'
app_id = "wunderlist_id"
app_token = "wunderlist_token"
def plex():
nb_jours = datetime.now().timetuple().tm_yday
r = requests.get(plex_url + plex_token)
data = r.text.encode('utf8')
root = ElementTree.fromstring(data)
for child in root:
if child.attrib["title"] == titre_playlist:
if child.attrib["leafCount"] != nb_jours: plex = "Il manque %s morceaux a la playlist %s." % (str(int(nb_jours) - int(child.attrib["leafCount"])), titre_playlist)
if plex: return plex
def main():
# nb de titres manquants dans plex
plex_txt = plex()
headers = {
'X-Access-Token': app_token,
'X-Client-ID': app_id,
}
# existence de la liste - tache et update
try:
r = requests.get('https://a.wunderlist.com/api/v1/lists', headers=headers)
if str(r.status_code) == '200': # connexion ok
for liste in r.json():
if liste['title'] == 'plex': # liste de tache existante
id_list = liste['id']
t = requests.get('https://a.wunderlist.com/api/v1/tasks', headers=headers, params={'list_id':id_list})
if str(t.status_code) == '200': # infos liste ok
id_task = t.json()[0]['id']
s = requests.get('https://a.wunderlist.com/api/v1/tasks/' + str(id_task), headers=headers)
if str(s.status_code) == '200': # tache existante
if str(s.json()['title']) == plex_txt: continue
else:
data_task = {'revision': s.json()['revision'], 'title': plex_txt}
requests.patch('https://a.wunderlist.com/api/v1/tasks/' + str(id_task), headers=headers, json=data_task) # update de la tache
else: print("Pas de tache pour la liste %s." % (liste['title']))
except Exception, e:
print("Erreur", str(e))
if __name__ == '__main__':
main()