]>
gitweb.pimeys.fr Git - today.git/blob - youtube.py
2 # -*- encoding: utf-8 -*-
4 """ Gestion des chaînes Youtube """
13 def parse_youtube(username
, regexp
=None, length
=False):
14 """Récupère les vidéos d'une chaîne Youtube"""
15 link
= "https://gdata.youtube.com/feeds/api/users/%s/uploads?start-index=1&max-results=50" % (username
,)
18 p
= urllib
.urlopen(link
)
20 x
= etree
.fromstring(t
)
21 # lxml ne supporte pas les namespaces vides dans les requêtes XPath
23 ns
["default"] = ns
[None]
25 # Il y a potentiellement une suite
26 nextlinks
= x
.xpath("//default:link[@rel='next']", namespaces
=ns
)
28 link
= nextlinks
[0].attrib
["href"]
31 localentries
= x
.xpath("//default:entry", namespaces
=ns
)
32 entries
.extend(localentries
)
33 titles
= [e
.xpath(".//default:title", namespaces
=ns
)[0].text
for e
in entries
]
34 if not regexp
is None: # On ne garde que les titres qui matchent la regexp
35 titles
= [t
for t
in titles
if re
.match(regexp
, t
)]
36 if length
: # On n'est intéressés que par le nombre
41 """Récupère les chaînes à surveiller à partir du fichier de conf."""
42 with
open(serverconfig
.youtube_channels_file
) as f
:
43 channels
= [l
.strip("\n") for l
in f
.readlines()]
44 channels
= [l
for l
in channels
if not (l
.startswith("#") or l
.strip() == "")]
45 channels
= [l
.split("\t") for l
in channels
]
46 # Il peut y avoir plusieurs tabulations de suite, donc on enlève les chaînes vides
47 channels
= [[i
for i
in l
if not i
== ''] for l
in channels
]
48 # [id, username, regexp]
49 # channels = [{"id" : l[0], "username" : l[1], "regexp" : l[2]} for l in channels]
53 def get_parser(username
, regexp
=None):
54 """ Renvoie un parseur de chaîne youtube prêt à être appelé """
56 return parse_youtube(username
, regexp
, length
=True)
59 channels
= load_channels()
60 functions
= {id : get_parser(username
, regexp
) for (id, username
, regexp
) in channels
}