Advertisement
Guest User

Untitled

a guest
Nov 4th, 2017
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.66 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # coding=utf-8
  3. """
  4. Ylilaudan "psykoosibotti" :--D Sori en oo siivonnu koodia yhtään ja lisäksi tää on mun ensimmäinen pythoni-scripti. Hämmentävä kieli javascriptin jälkeen.
  5. Seuraava bottiscriptini on vähän viisaammin tehty, julkaisen senkin kuhan jaksan.
  6. Tämä aiheuttaa jäätävää peppukipua kanssanyymeissä hölmöillä viesteillään.
  7. """
  8. #koiramies kiittää ja kuittaa :)
  9.  
  10. import dryscrape, re
  11. from bs4 import BeautifulSoup
  12. import getpass
  13. import random
  14. from random import randint
  15. import time
  16. import sys
  17. import urllib
  18. import os
  19. from PIL import Image
  20. import PIL.ImageOps
  21. from PIL import ImageFilter
  22.  
  23. reload(sys)
  24. sys.setdefaultencoding('utf-8')
  25. url="https://ylilauta.org/satunnainen/"
  26. from requests import get
  27. times = raw_input("Monta kertaa postaillaan: ")
  28. username = raw_input("Käyttäjätunnus:")
  29. passw = getpass.getpass('Salasana:' )
  30. #kirjaudutaan sisään
  31. session = dryscrape.Session()
  32. session.set_error_tolerant(True)
  33.  
  34. oldImage = ""
  35. pngOrJpg = ".jpg"
  36.  
  37. messagesdone = 0
  38.  
  39. answered =[]
  40.  
  41. try:
  42.     session.visit(url)
  43.  
  44.     name = session.at_xpath('//*[@name="username"]')
  45.     name.set(username)
  46.     password = session.at_xpath('//*[@name="password"]')
  47.     password.set(passw)
  48.     # Push the button
  49.     name.form().submit()
  50.     response = session.body()
  51.     soup = BeautifulSoup(response)
  52.     print soup.findAll(text=re.compile('Kirjautuneena'))
  53. except:
  54.     print 'Error in page load when loggin in'
  55.    
  56. def psykoosibotti(teksti):
  57.     #split words
  58.     print "splitting words.."
  59.     teksti.split(' ')
  60.    
  61.    
  62.    
  63. def smart_truncate(content, length=95):
  64.     if len(content) <= length:
  65.         return content
  66.     else:
  67.         return ' '.join(content[:length+1].split(' ')[0:-1])
  68.        
  69.        
  70. def remove_transparency(im, bg_colour=(255, 255, 255)):
  71.  
  72.     if im.mode in ('RGBA', 'LA') or (im.mode == 'P' and 'transparency' in im.info):
  73.         alpha = im.convert('RGBA').split()[-1]
  74.         bg = Image.new("RGBA", im.size, bg_colour + (255,))
  75.         bg.paste(im, mask=alpha)
  76.         return bg
  77.  
  78.     else:
  79.         return im
  80.        
  81. #-------------------------------------------------------
  82. for x in range(0, int(times)):
  83.     try:
  84.         try:
  85.             os.remove(os.path.dirname(os.path.realpath(__file__))+"/img/"+oldImage+"_inverted"+pngOrJpg)
  86.             os.remove(os.path.dirname(os.path.realpath(__file__))+"/img/"+oldImage+pngOrJpg)
  87.         except:
  88.             print "didnt find old image"
  89.            
  90.         #50/50 to go to frontpage or some other
  91.         if randint(0,10) > 5:
  92.             session.visit("https://ylilauta.org/satunnainen-"+str(randint(2,3)))
  93.         else:
  94.             session.visit(url)
  95.         response = session.body()
  96.         soup = BeautifulSoup(response)
  97.        
  98.         # check for all threads
  99.         threads = soup.findAll("div", {"class": "thread"})
  100.        
  101.         #get random post
  102.         randomid = randint(0, len(threads)-1)
  103.         thread = threads[randomid]
  104.         post = thread.find("div", {"class":"op_post"})
  105.        
  106.         #katotaan onko botin ite tekemä threadi tms
  107.         postedMyself =  post.find("a", {"class":"icon-trash2"})
  108.         if postedMyself:
  109.             raise ValueError('oma viesti.. ei vastata')
  110.              
  111.        
  112.         author =  post.find("a", {"class":"postnumber"}).get_text()
  113.         authorModified =  re.sub("\D", "", author)
  114.        
  115.         if authorModified in answered:
  116.             raise ValueError("viestiin on jo vastattu kerran")
  117.        
  118.         #get posts content/message
  119.         message = post.find("blockquote")
  120.         messageText = post.find("div", {"class":"postcontent"}).get_text()
  121.        
  122.         #shorten it
  123.         print "message length: "+ str(len(messageText))
  124.         if len(messageText) > 95:
  125.             messageText = smart_truncate(messageText, 95)
  126.             #print messageText
  127.         print "new length: "+ str(len(messageText))
  128.         if len(messageText) == 0:
  129.             messageText = "moro olen kissa koira random botti moro moro"
  130.            
  131.         #lapot pois
  132.         if "=)" in messageText:
  133.             raise ValueError('pedarisuoja aktivoitu')
  134.        
  135.         if "Testing" in messageText:
  136.             raise ValueError('pedarisuoja aktivoitu')
  137.        
  138.         #get the post image and modify it
  139.         try:
  140.             image =  post.find("img", {"class":"imagefile"})
  141.             imgcleaned1 = str(image)[str(image).find('src'):]
  142.             imgcleaned2 = imgcleaned1[14:]
  143.             imgcleaned3 = "i"+imgcleaned2[:-6]
  144.             try:
  145.                 urllib.urlretrieve("https://"+imgcleaned3+"jpg", "img/"+authorModified+".jpg")
  146.                 #print imgcleaned3+"jpg"
  147.                 pngOrJpg = ".jpg"
  148.                 image = Image.open("img/"+authorModified+pngOrJpg)
  149.                 print "image type jpg"
  150.             except:
  151.                 urllib.urlretrieve("https://"+imgcleaned3+"png", "img/"+authorModified+".png")
  152.                 #print imgcleaned3+"png"
  153.                 pngOrJpg = ".png"
  154.                 image = Image.open("img/"+authorModified+pngOrJpg)
  155.                 print "image type png"
  156.             try:
  157.                 image = remove_transparency(image)
  158.                 image = image.convert('RGB')
  159.                 """
  160.                 inverted_image = PIL.ImageOps.invert(image)
  161.                 if randint(0,10) > 5:
  162.                     inverted_image = PIL.ImageOps.flip(inverted_image)
  163.                 if randint(0,10) > 5:
  164.                     inverted_image = PIL.ImageOps.mirror(inverted_image)
  165.                 inverted_image = PIL.ImageOps.posterize(inverted_image,int(randint(3, 6)))
  166.                 inverted_image = PIL.ImageOps.autocontrast(inverted_image, int(randint(0, 40)))        
  167.                 inverted_image = PIL.ImageOps.solarize(inverted_image,int(randint(0, 45)))
  168.                 if randint(0,10) > 8:
  169.                     inverted_image = inverted_image.filter(ImageFilter.BLUR)
  170.                    
  171.                 if randint(0,10) > 8:
  172.                     inverted_image = inverted_image.filter(ImageFilter.EDGE_ENHANCE_MORE)
  173.                 """
  174.                 inverted_image = PIL.ImageOps.invert(image)
  175.                 #inverted_image = PIL.ImageOps.flip(inverted_image)
  176.                 inverted_image = PIL.ImageOps.mirror(inverted_image)
  177.                 inverted_image = PIL.ImageOps.posterize(inverted_image,5)
  178.                 inverted_image = PIL.ImageOps.autocontrast(inverted_image, 40)         
  179.                 inverted_image = PIL.ImageOps.solarize(inverted_image,80)
  180.                 inverted_image = inverted_image.filter(ImageFilter.BLUR)
  181.                 inverted_image = inverted_image.filter(ImageFilter.EDGE_ENHANCE_MORE)
  182.    
  183.                 inverted_image = PIL.ImageOps.fit(inverted_image, (666,666))
  184.                 meter = -1
  185.                 for i in range( inverted_image.size[0] ):
  186.                     for j in range( inverted_image.size[1] ):
  187.                         if i < int(inverted_image.size[0]):
  188.                             if meter < int(inverted_image.size[0])/2:
  189.                                 meter+=1
  190.                             if randint(0,100) > 60:
  191.                                 inverted_image.putpixel(( int(i), int(j)), inverted_image.getpixel((meter,j)) )
  192.                             if randint(0,100) > 90:
  193.                                 inverted_image.putpixel(( randint(0,i), int(j)), inverted_image.getpixel((i,j)) )
  194.  
  195.                 #newsize = inverted_image.size
  196.                 #width = 1+randint(0,4000)/1000
  197.                 #height = 1+randint(0,4000)/1000
  198.                 #newsize = (int(newsize[0]*width),int(newsize[1]*height));
  199.                 #inverted_image = inverted_image.resize(newsize)
  200.  
  201.                 inverted_image.save("img/"+authorModified+"_inverted"+pngOrJpg)
  202.             except Exception, e:
  203.                 print "error : "+str(e)
  204.             print "image manipulation done.. answering.."
  205.             #OPEN THE POST
  206.             #convert the link to right format
  207.             linkToPost = post.find("a", {"class":"postsubject"})           
  208.             linkToPost = str(linkToPost)[str(linkToPost).find('href'):]
  209.             splitattu = linkToPost.split()
  210.             linkToPost = splitattu[0][6:]
  211.            
  212.             if "span" in linkToPost:
  213.                 linkToPost = linkToPost[:-7]
  214.             else:
  215.                 linkToPost = linkToPost[:-2]
  216.  
  217.             #visit the post
  218.             session.visit("https://ylilauta.org"+linkToPost)
  219.             response = session.body()
  220.             soup = BeautifulSoup(response)
  221.            
  222.             #ANSWERING THE POST
  223.             fil = session.at_xpath('//*[@name="file"]')
  224.             fil.set(os.path.dirname(os.path.realpath(__file__))+"/img/"+authorModified+"_inverted"+pngOrJpg)
  225.             print str(messageText).rstrip().replace('\n', '')+"?"
  226.            
  227.             oraakkeli = get("http://www.lintukoto.net/viihde/oraakkeli/index.php?kysymys="+str(messageText).rstrip().replace('\n', '')+"?&html")   
  228.             print oraakkeli.text
  229.             vastaus = oraakkeli.text
  230.             if "Parseri" in vastaus:
  231.                 raise ValueError('tais olla joku ongelma oraakkelin päässä')
  232.             if len(vastaus) > 500:
  233.                 raise ValueError('tais olla joku ongelma oraakkelin päässä')
  234.                    
  235.             teksti = session.at_xpath('//*[@name="msg"]')  
  236.             #teksti.set(">>"+authorModified+"\n"+response.text)
  237.             teksti.set(">>"+authorModified+"\n"+vastaus)
  238.             token = session.at_xpath('//*[@name="submit"]')
  239.             token.click()
  240.             messagesdone=messagesdone+1
  241.             print "messages sended: "+str(messagesdone)
  242.             oldImage = authorModified
  243.             #waitTime = randint(15, 900)
  244.             waitTime = randint(120, 900)
  245.             print "waiting "+str(waitTime)+"s"
  246.             answered.append(authorModified)
  247.             time.sleep(waitTime)
  248.            
  249.            
  250.         except Exception, e:
  251.             print "error : "+str(e)
  252.             print "didn't find image in the thread(?)"
  253.         print "--------------------------------"
  254.            
  255.     except Exception, e:
  256.         print "error : "+str(e)
  257.         time.sleep(15)
  258.         session.visit(url)
  259.         response = session.body()
  260.         soup = BeautifulSoup(response)
  261.        
  262. compose = session.at_xpath('//*[contains(text(), "Kirjaudu ulos")]')
  263. compose.click()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement