jeudi 1 mars 2012

[Python snippet] Pastebin Watcher

#---
# name:     Pastebin Watcher
# version:  0.1b
# author:   nowz
#---

import re
import urllib2
import threading

#variables
url = "http://pastebin.com"
path = "/archive"
File = "D:\ZenkBot\pastebin.txt"

#functions
def query():
    f = open(File, 'w')
    data = urllib2.urlopen(url+path).read()
    result = re.findall('<a href="([^"]+)">([^<]+)</a></td>[ \r\n\t]*<td>([^<]+)</td>[ \r\n\t]*<td align="right"><a href="([^"]+)">([^<]+)</a>', data, re.MULTILINE | re.I)
    j = 0
    for i in result:
        print "[#%s] (%s) %s (%s) %s" % (j+1, i[4], i[1], i[2], i[0])
        if i[4] == "Python":
            f.write("[#%s] (%s) %s (%s) %s\n" % (j+1, i[4], i[1], i[2], i[0]))
        j = j+1
    f.close()
    threading.Timer(500, query).start()

query()

Alors voilà, très largement modifiable et pas très beau:
C'est un snippet qui va regarder toutes les 500secondes les nouveaux posts pastebin (publique) et trouver ceux dont le Type est "python" et l'ecrire dans le fichier "File"
Vous pouvez changer par ce qui vous interesses Type & Titre :)
Pour les curieux qui voudrait voir la solution plus propre de piti qui utilise lxml :


from lxml import etree as ET
import urllib2
page = urllib2.urlopen('http://pastebin.com/archive')
content = page.readlines()
html = '\n'.join(content)
mET = ET.HTML(html)
addrs = mET.xpath('/html/body/div/div/div/div/div/table//tr/td[not(@align="right")]/a[@href]')
for addr in addrs:                                                                            
    print ET.tostring(addr)


Je remercie y0ug & piti pour l'aide qu'ils m'ont apporté dans la réalisation de ce petit snippet (ridicule)