Contenuto cancellato Contenuto aggiunto
Qualc1 (discussione | contributi)
Qualc1 (discussione | contributi)
Riga 307:
:Mmm... Dando un occhiata veloce agli script di pywikipedia non trovo niente di già fatto... Più che essere "difficile", c'è il problema che non essendoci niente di già fatto che utilizzi ''Speciale:EmailUser'' bisogna fare cose più a basso livello rispetto a quello che di solito si fa negli altri bot: cioè creare un richiesta HTTP con i parametri che si passerebbero nei campi della pagina (per avere un esempio puoi vedere come viene implementato in ''wikipedia.py'' il metodo ''delete'' della classe ''page'').
:Domani provo a fare uno scriptino per semplificare l'inivio di mail tramite bot... ciao. --[[User:Qualc1|qualc1]] ([[User talk:Qualc1|disc.]]) 22:33, 5 mag 2009 (CEST)
 
::(Stranamente) sono riuscito a risponderti a tempo di record :D
<pre>
# -*- coding: utf-8 -*-
"""
send mail to user
"""
 
import re
import wikipedia
 
 
class MailBot:
def __init__(self, destinationUser, subject, message, copyToMe):
self.destinationUser = destinationUser
self.subject = subject
self.message = message
self.copyToMe = copyToMe
 
# valido per it.wikisource (servirebbe una lista da cui scegliere secondo wikipedia.getSite() ...)
self.sendEmailPage = "/wiki/Speciale:InviaEMail/"
self.sendEmailPagePOST = "/w/index.php?title=Speciale:InviaEMail&target=%s&action=submit"
 
def run(self):
# get any page to get token parameter
mailToPage = wikipedia.getSite().getUrl(self.sendEmailPage + self.destinationUser)
tokenR = re.compile(r'\<input name="wpEditToken" type="hidden" value="(.*?)"')
tokenloc = tokenR.search(mailToPage)
if tokenloc:
token = tokenloc.group(1)
else:
print "Fail: token not found"
return
 
# create post parameters
subject = self.subject.encode(wikipedia.getSite().encoding())
message = self.message.encode(wikipedia.getSite().encoding())
if self.copyToMe:
copyToMe = '1'
else:
copyToMe = '0'
predata = {
'wpSubject': subject,
'wpText': message,
'wpCCMe': copyToMe,
'wpEditToken' : token
}
 
# do a post request
postUrl = self.sendEmailPagePOST % self.destinationUser
response, data = wikipedia.getSite().postForm(postUrl, predata)
if response.status == 302: # redirect code
print "Mail (problably) sent"
else:
print "Fail: http status code is %s, error reason is %s" % (str(response.status), response.reason)
 
 
def main():
bot = MailBot(u"Qualc1", u"un oggetto", u"ultimo messaggio DI KKKK prova da inviare...", False)
bot.run()
 
 
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()
 
</pre>
::Il main è solo di esempio, per utilizzarlo in un altro bot basta copiare la classe dove la devi usare (o salvarla altrove e importarla) e poi richiamarlo con:
<pre>bot = MailBot("destinatario", "oggetto", "messaggio", False)
bot.run()</pre>
::L'ultimo parametro dovrebbe indicare se abilitare l'opzione "Invia in copia al mio indirizzo." che si trova nella pagina di invio di email ma mi sembra che non funzioni... magari a fare un po' di prove anche te riesci a capire perchè... fammi sapere... ciao --[[User:Qualc1|qualc1]] ([[User talk:Qualc1|disc.]]) 20:02, 6 mag 2009 (CEST)