Plex & Wunderlist

Published 02-29-2016 16:01:30

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()