]> gitweb.pimeys.fr Git - scripts-20-100.git/commitdiff
[t411] python-resquests rules : it works.
authorVincent Le Gallic <legallic@crans.org>
Mon, 21 Oct 2013 23:05:20 +0000 (01:05 +0200)
committerVincent Le Gallic <legallic@crans.org>
Mon, 21 Oct 2013 23:05:20 +0000 (01:05 +0200)
t411_torrents.py

index 23dfd0bfd0058b9845c6008eba42a29caad333bf..0d62246edc43d17111c7fa38d8074fa8af12559b 100755 (executable)
@@ -3,36 +3,34 @@
 
 """ Pour récupérer tous les .torrents déjà téléchargés sur t411.me """
 
-import urllib
-import urllib2
+import requests
 import getpass
+import re
 
-#: url de login sur t411
-login_url = u"https://t411.me/users/login"
+DEBUG = True
 
-# Pour récupérer la liste des torrents quand t est le contenu d'une page
-# d'historique
-#re.findall('href="(//www.t411.me/torrents/.*?)"', t)
+#: URL principale de t411
+main_url = "https://www.t411.me/"
+#: Page de login
+login_url = main_url + u"users/login/"
+#: Page de profil utilisateur
+profile_url = main_url + u"users/profile/"
+#: Page d'historique
+history_url = main_url + u"users/history/"
+#: Page de download de .torrent
+torrent_url = main_url + u"torrents/download/?id=%(torrentid)s"
 
-def getid(url):
-    """Récupère l'id du torrent à partir de l'``url`` de sa page."""
-    p=urllib.urlopen(url)
-    t=p.read()
-    id=re.findall('a href="/torrents/download/\?id=(\d*)"', t)
-    print id; return id
-
-def post(url, data):
-    """Poste les ``data`` sur l'``url`` et renvoie la page obtenue."""
-    data = urllib.urlencode(data)
-    request = urllib2.Request("http://www.t411.me/users/login", data)
-    response = urllib2.urlopen(request)
-    return response
+#: Regex pour trouver l'id du torrent
+torrentid_pattern = ur'<a href="/torrents/download/\?id=(\d+)"'
+torrentid_regex = re.compile(torrentid_pattern)
+
+#: Dossier où enregistrer les .torrent
+torrent_folder = u"/home/vincent/Vidéos/torrents/"
 
 def do_connect(login, password):
-    """Se logue et renvoie le cookie."""
-    response = post(login_url, {"login": login, "password": password})
-    cookie = response.headers["set-cookie"]
-    return cookie
+    """Se logue et renvoie les cookies."""
+    response = requests.post(login_url, data={"login": login, "password": password})
+    return response.cookies
 
 def connect():
     """Demande login/password à l'utilisateur et se connecte."""
@@ -40,5 +38,65 @@ def connect():
     password = getpass.getpass()
     return do_connect(login, password)
 
+def generator_torrent_links(cookies, urlpattern):
+    """Ouvre successivement les pages d'url ``urlpattern % n`
+       jusqu'à ce qu'il n'y ait plus de torrents. Ça donne un generator."""
+    n = 0
+    while True:
+        url = urlpattern % n
+        if DEBUG:
+            print url
+        response = requests.get(url, cookies=cookies)
+        torrent_links = re.findall('href="(//www.t411.me/torrents/.*?)"', response.content)
+        torrent_links = ["https:" + i for i in torrent_links]
+        if len(torrent_links) == 0:
+            raise StopIteration
+        yield torrent_links
+        n += 1
+
+def crawl_history(cookies):
+    """Récupère la liste des liens vers les torrents dans l'historique."""
+    urlpattern = history_url
+    urlpattern += "?page=%s"
+    liste = sum(generator_torrent_links(cookies, urlpattern), [])
+    return liste
+
+def get_torrentid(url, cookies):
+    """Récupère l'id du torrent à partir de l'``url`` de sa page."""
+    response = requests.get(url, cookies=cookies)
+    ids = torrentid_regex.findall(response.content)
+    if DEBUG:
+        print url
+        #print ids
+    return ids[0]
+
+def get_torrentids(cookies, torrentlinks):
+    """Récupère les ids de tous les torrents de l'historique."""
+    return [get_torrentid(url, cookies) for url in torrentlinks]
+
+def get_torrent(cookies, id):
+    """Récupère le .torrent n°``id``."""
+    url = torrent_url % {"torrentid" : id}
+    if DEBUG:
+        print url
+    response = requests.get(url, cookies=cookies)
+    raw_torrent_file = response.content
+    return raw_torrent_file
+
+def save_torrent_file(filename, raw):
+    """Sauvegarde un fichier torrent."""
+    with open(torrent_folder + filename, "w") as f:
+        f.write(raw)
+
+def do_all():
+    """Fait tout."""
+    cookies = connect()
+    linkslist = crawl_history(cookies)
+    idslist = get_torrentids(cookies, linkslist)
+    for id in idslist:
+        raw = get_torrent(cookies, id)
+        save_torrent_file(id + ".torrent", raw)
+    print "Torrents downloaded in %s" % torrent_folder
+
 if __name__ == "__main__":
-    print connect()
+    do_all()