Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # coding=utf-8
- """
- 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.
- Seuraava bottiscriptini on vähän viisaammin tehty, julkaisen senkin kuhan jaksan.
- Tämä aiheuttaa jäätävää peppukipua kanssanyymeissä hölmöillä viesteillään.
- """
- #koiramies kiittää ja kuittaa :)
- import dryscrape, re
- from bs4 import BeautifulSoup
- import getpass
- import random
- from random import randint
- import time
- import sys
- import urllib
- import os
- from PIL import Image
- import PIL.ImageOps
- from PIL import ImageFilter
- reload(sys)
- sys.setdefaultencoding('utf-8')
- url="https://ylilauta.org/satunnainen/"
- from requests import get
- times = raw_input("Monta kertaa postaillaan: ")
- username = raw_input("Käyttäjätunnus:")
- passw = getpass.getpass('Salasana:' )
- #kirjaudutaan sisään
- session = dryscrape.Session()
- session.set_error_tolerant(True)
- oldImage = ""
- pngOrJpg = ".jpg"
- messagesdone = 0
- answered =[]
- try:
- session.visit(url)
- name = session.at_xpath('//*[@name="username"]')
- name.set(username)
- password = session.at_xpath('//*[@name="password"]')
- password.set(passw)
- # Push the button
- name.form().submit()
- response = session.body()
- soup = BeautifulSoup(response)
- print soup.findAll(text=re.compile('Kirjautuneena'))
- except:
- print 'Error in page load when loggin in'
- def psykoosibotti(teksti):
- #split words
- print "splitting words.."
- teksti.split(' ')
- def smart_truncate(content, length=95):
- if len(content) <= length:
- return content
- else:
- return ' '.join(content[:length+1].split(' ')[0:-1])
- def remove_transparency(im, bg_colour=(255, 255, 255)):
- if im.mode in ('RGBA', 'LA') or (im.mode == 'P' and 'transparency' in im.info):
- alpha = im.convert('RGBA').split()[-1]
- bg = Image.new("RGBA", im.size, bg_colour + (255,))
- bg.paste(im, mask=alpha)
- return bg
- else:
- return im
- #-------------------------------------------------------
- for x in range(0, int(times)):
- try:
- try:
- os.remove(os.path.dirname(os.path.realpath(__file__))+"/img/"+oldImage+"_inverted"+pngOrJpg)
- os.remove(os.path.dirname(os.path.realpath(__file__))+"/img/"+oldImage+pngOrJpg)
- except:
- print "didnt find old image"
- #50/50 to go to frontpage or some other
- if randint(0,10) > 5:
- session.visit("https://ylilauta.org/satunnainen-"+str(randint(2,3)))
- else:
- session.visit(url)
- response = session.body()
- soup = BeautifulSoup(response)
- # check for all threads
- threads = soup.findAll("div", {"class": "thread"})
- #get random post
- randomid = randint(0, len(threads)-1)
- thread = threads[randomid]
- post = thread.find("div", {"class":"op_post"})
- #katotaan onko botin ite tekemä threadi tms
- postedMyself = post.find("a", {"class":"icon-trash2"})
- if postedMyself:
- raise ValueError('oma viesti.. ei vastata')
- author = post.find("a", {"class":"postnumber"}).get_text()
- authorModified = re.sub("\D", "", author)
- if authorModified in answered:
- raise ValueError("viestiin on jo vastattu kerran")
- #get posts content/message
- message = post.find("blockquote")
- messageText = post.find("div", {"class":"postcontent"}).get_text()
- #shorten it
- print "message length: "+ str(len(messageText))
- if len(messageText) > 95:
- messageText = smart_truncate(messageText, 95)
- #print messageText
- print "new length: "+ str(len(messageText))
- if len(messageText) == 0:
- messageText = "moro olen kissa koira random botti moro moro"
- #lapot pois
- if "=)" in messageText:
- raise ValueError('pedarisuoja aktivoitu')
- if "Testing" in messageText:
- raise ValueError('pedarisuoja aktivoitu')
- #get the post image and modify it
- try:
- image = post.find("img", {"class":"imagefile"})
- imgcleaned1 = str(image)[str(image).find('src'):]
- imgcleaned2 = imgcleaned1[14:]
- imgcleaned3 = "i"+imgcleaned2[:-6]
- try:
- urllib.urlretrieve("https://"+imgcleaned3+"jpg", "img/"+authorModified+".jpg")
- #print imgcleaned3+"jpg"
- pngOrJpg = ".jpg"
- image = Image.open("img/"+authorModified+pngOrJpg)
- print "image type jpg"
- except:
- urllib.urlretrieve("https://"+imgcleaned3+"png", "img/"+authorModified+".png")
- #print imgcleaned3+"png"
- pngOrJpg = ".png"
- image = Image.open("img/"+authorModified+pngOrJpg)
- print "image type png"
- try:
- image = remove_transparency(image)
- image = image.convert('RGB')
- """
- inverted_image = PIL.ImageOps.invert(image)
- if randint(0,10) > 5:
- inverted_image = PIL.ImageOps.flip(inverted_image)
- if randint(0,10) > 5:
- inverted_image = PIL.ImageOps.mirror(inverted_image)
- inverted_image = PIL.ImageOps.posterize(inverted_image,int(randint(3, 6)))
- inverted_image = PIL.ImageOps.autocontrast(inverted_image, int(randint(0, 40)))
- inverted_image = PIL.ImageOps.solarize(inverted_image,int(randint(0, 45)))
- if randint(0,10) > 8:
- inverted_image = inverted_image.filter(ImageFilter.BLUR)
- if randint(0,10) > 8:
- inverted_image = inverted_image.filter(ImageFilter.EDGE_ENHANCE_MORE)
- """
- inverted_image = PIL.ImageOps.invert(image)
- #inverted_image = PIL.ImageOps.flip(inverted_image)
- inverted_image = PIL.ImageOps.mirror(inverted_image)
- inverted_image = PIL.ImageOps.posterize(inverted_image,5)
- inverted_image = PIL.ImageOps.autocontrast(inverted_image, 40)
- inverted_image = PIL.ImageOps.solarize(inverted_image,80)
- inverted_image = inverted_image.filter(ImageFilter.BLUR)
- inverted_image = inverted_image.filter(ImageFilter.EDGE_ENHANCE_MORE)
- inverted_image = PIL.ImageOps.fit(inverted_image, (666,666))
- meter = -1
- for i in range( inverted_image.size[0] ):
- for j in range( inverted_image.size[1] ):
- if i < int(inverted_image.size[0]):
- if meter < int(inverted_image.size[0])/2:
- meter+=1
- if randint(0,100) > 60:
- inverted_image.putpixel(( int(i), int(j)), inverted_image.getpixel((meter,j)) )
- if randint(0,100) > 90:
- inverted_image.putpixel(( randint(0,i), int(j)), inverted_image.getpixel((i,j)) )
- #newsize = inverted_image.size
- #width = 1+randint(0,4000)/1000
- #height = 1+randint(0,4000)/1000
- #newsize = (int(newsize[0]*width),int(newsize[1]*height));
- #inverted_image = inverted_image.resize(newsize)
- inverted_image.save("img/"+authorModified+"_inverted"+pngOrJpg)
- except Exception, e:
- print "error : "+str(e)
- print "image manipulation done.. answering.."
- #OPEN THE POST
- #convert the link to right format
- linkToPost = post.find("a", {"class":"postsubject"})
- linkToPost = str(linkToPost)[str(linkToPost).find('href'):]
- splitattu = linkToPost.split()
- linkToPost = splitattu[0][6:]
- if "span" in linkToPost:
- linkToPost = linkToPost[:-7]
- else:
- linkToPost = linkToPost[:-2]
- #visit the post
- session.visit("https://ylilauta.org"+linkToPost)
- response = session.body()
- soup = BeautifulSoup(response)
- #ANSWERING THE POST
- fil = session.at_xpath('//*[@name="file"]')
- fil.set(os.path.dirname(os.path.realpath(__file__))+"/img/"+authorModified+"_inverted"+pngOrJpg)
- print str(messageText).rstrip().replace('\n', '')+"?"
- oraakkeli = get("http://www.lintukoto.net/viihde/oraakkeli/index.php?kysymys="+str(messageText).rstrip().replace('\n', '')+"?&html")
- print oraakkeli.text
- vastaus = oraakkeli.text
- if "Parseri" in vastaus:
- raise ValueError('tais olla joku ongelma oraakkelin päässä')
- if len(vastaus) > 500:
- raise ValueError('tais olla joku ongelma oraakkelin päässä')
- teksti = session.at_xpath('//*[@name="msg"]')
- #teksti.set(">>"+authorModified+"\n"+response.text)
- teksti.set(">>"+authorModified+"\n"+vastaus)
- token = session.at_xpath('//*[@name="submit"]')
- token.click()
- messagesdone=messagesdone+1
- print "messages sended: "+str(messagesdone)
- oldImage = authorModified
- #waitTime = randint(15, 900)
- waitTime = randint(120, 900)
- print "waiting "+str(waitTime)+"s"
- answered.append(authorModified)
- time.sleep(waitTime)
- except Exception, e:
- print "error : "+str(e)
- print "didn't find image in the thread(?)"
- print "--------------------------------"
- except Exception, e:
- print "error : "+str(e)
- time.sleep(15)
- session.visit(url)
- response = session.body()
- soup = BeautifulSoup(response)
- compose = session.at_xpath('//*[contains(text(), "Kirjaudu ulos")]')
- compose.click()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement