Page of Constantin Oestreich
Twitterbot: @Picturus Bottian
Twitterbot Picturius Bottian
Source Code:
"""
mainbot.py
"""
#Import Classes + Modules
from twitterbot import TwitterBot
import keys
import random
from io import BytesIO
from PIL import Image
from image import get_image_file
#Import aus Dateien
from textposts import make_text
from textposts import no_image
from imagefuncs import filter
############################
### Twitterbot functions ###
############################
class MyTwitterBot(TwitterBot):
# Keys
def bot_init(self):
""" Initialize and configure the bot """
############################
# REQUIRED: LOGIN DETAILS! #
############################
self.config['api_key'] = keys.consumer_key
self.config['api_secret'] = keys.consumer_secret
self.config['access_key'] = keys.access_token
self.config['access_secret'] = keys.access_token_secret
######################################
# SEMI-OPTIONAL: OTHER CONFIG STUFF! #
######################################
# how often to tweet, in seconds
self.config['tweet_interval'] = 1 * 5 # default: 1 minutes
# use this to define a (min, max) random range of how often to tweet
# e.g., self.config['tweet_interval_range'] = (5*60, 10*60) # tweets every 5-10 minutes
self.config['tweet_interval_range'] = None
# only reply to tweets that specifically mention the bot
self.config['reply_direct_mention_only'] = True
# only include bot followers (and original tweeter) in @-replies
self.config['reply_followers_only'] = False
# fav any tweets that mention this bot?
self.config['autofav_mentions'] = False
# fav any tweets containing these keywords?
self.config['autofav_keywords'] = []
# follow back all followers?
self.config['autofollow'] = False
def on_scheduled_tweet(self):
""" Make a public tweet to the bot's own timeline. """
# We might take senteces from somewhere and tweet them on a regular basis ...
pass # don't do anything here ...
def on_mention(self, tweet, prefix):
if tweet:
# get image from tweet
try:
image_file = get_image_file(tweet)
if image_file is None:
text = ("{},"+no_image()).format(prefix)
else:
# create a tweet and make sure to cut it off at 140 chars
text = ("{},"+make_text()).format(prefix)
except Exception as e:
print(e)
# do the tweeting based on wether we have an image
tweetsize = 140 - len(prefix) - 1
text = text[:140]
if image_file is None:
print("No Image")
self.post_tweet(text, reply_to=tweet)
return
else:
filename, file = image_file
img = Image.open(file)
img = filter(img)
format = filename.split(".", 1)[1].upper()
print("Image format: {}".format(format))
output = BytesIO()
img.save(output, format="PNG")
try:
# Post
self.post_tweet(text, reply_to=tweet, media=filename, file=output)
output.close()
except Exception as e:
# did anything go wrong when we tried to create and post the tweet?
print(e)
def on_timeline(self, tweet, prefix):
""" Actions to take on a timeline tweet. """
pass # Don't do anything here ...
if __name__ == '__main__':
bot = MyTwitterBot()
bot.run()
"""
imagefuncs.py
"""
from PIL import Image, ImageDraw, ImageFont, ImageFilter, ImageColor, ImageEnhance
import random
#verschiedene Bildbearbeitungfunktionen
def blur (image):
return image.filter(ImageFilter.BLUR)
def emboss (image):
return image.filter(ImageFilter.EMBOSS)
def edges (image):
return image.filter(ImageFilter.FIND_EDGES)
def transpose(image):
return image.transpose(Image.FLIP_LEFT_RIGHT)
def invert(image):
return image.point(lambda x: 255-x)
def pixelit (image):
xsize, ysize = image.size
width = xsize
height = ysize
minwidth = int(xsize * 0.05)
minheight = int(ysize * 0.05)
image = image.resize((minwidth, minheight) , Image.NEAREST)
image = image.resize((width , height), Image.NEAREST)
return image
#Random Filter List
def filter (image):
functions_list = [blur, emboss, edges, invert, transpose, pixelit]
filename = "final.png"
x = 1
y = 2
z = 3
list = [x, y, z]
anzahl = random.choice(list)
print (anzahl)
if anzahl == 1:
#Random eine Funktion
imagefunc = random.choice(functions_list)
image = imagefunc(image)
if anzahl == 2:
#Random eine Funktion
imagefunc = random.choice(functions_list)
image = imagefunc(image)
#2.Runde Random Filter anwenden
imagefunc = random.choice(functions_list)
image = imagefunc(image)
if anzahl == 3:
#Random eine Funktion
imagefunc = random.choice(functions_list)
image = imagefunc(image)
#2.Runde Random Filter anwenden
imagefunc = random.choice(functions_list)
image = imagefunc(image)
#3.Runde Random Filter anwenden
imagefunc = random.choice(functions_list)
image = imagefunc(image)
return image
"""
textposts.py
"""
#Import Modules for Project
import random
def make_text():
a="Yeah, a new Image is Ready"
b="What do you think about?"
c="Uh, which Effekt"
d="Nice"
e="Thats what I do"
f="Mhmmm, what you mean?"
g="My next I post!"
h="I should do more of this."
i="Twitter is my life."
j="This is my job!"
k="Funky"
text_list = [a, b, c, d, e, f, g, h, i, j, k]
text = random.choice(text_list)
return text
def no_image():
a = "No Image there"
b = "What you do? Where is my Image?"
c = "I can't read! Send me a picture"
d = "I like Images!"
e = "Boring!"
f = "Okay, I don't know what you want!"
g = "Pictures! Thats what I want!"
noimagelist = [a, b, c, d, e, f, g]
text = random.choice(noimagelist)
return text
Animated Robot
Thumb doesnt work - find it here:
Animated Robot: [1]
Robot Code
"""
My Animated Robot
"""
#Variablen
widthBox = 400
heightBox = widthBox
centerx = widthBox / 2
centery = heightBox / 2
koerper = widthBox / 3
kopf = koerper / 1.5
auge = kopf / 6
blauKopf = 0
gruenKopf = 90
rotKopf = 100
#Ausgabe
def setup():
size (widthBox,heightBox)
colorMode (RGB, 100)
def draw():
#Moving per Frame
frameRate (25)
angle = PI/8 * sin(frameCount * 0.1)
#Growing Up
global auge
if auge<30:
auge=auge+2
else:
auge=10
global kopf
if kopf<140:
kopf=kopf+2
else:
kopf = koerper / 1.5
global blauKopf
global gruenKopf
global rotKopf
if kopf>koerper / 1.5 and kopf<130:
blauKopf = blauKopf + 5
gruenKopf = gruenKopf -2
rotKopf = rotKopf -2
elif kopf > 130 and kopf < 140:
blauKopf = 0
gruenKopf = 0
rotKopf = 100
else:
blauKopf=0
gruenKopf = 90
rotKopf = 100
#Variablen BG
R = random(30,60)
G = random(50,80)
B = random(70,90)
#Variablen Fill
RF = random(20,50)
GF = random(0,30)
BF = random(10,40)
#define
background(R,G,B)
rectMode(CENTER)
fill (RF,GF,BF)
stroke (90)
strokeWeight(5)
#---Körper---
rect (centerx, centery, koerper, koerper)
#---Kopf---
pushStyle()
fill (rotKopf, gruenKopf, blauKopf)
ellipse (centerx, centery-koerper+(kopf*0.25), kopf, kopf)
popStyle()
# Variablen Auge
AugeX1 = centerx - 17
AugeY1 = centerx - koerper*0.875
AugeX2 = centerx + 17
AugeY2 = centerx - koerper*0.875
#---Auge01---
drawAuge(AugeX1, AugeY1, 1)
#---Auge02---
drawAuge(AugeX2, AugeY2, -1)
# Arm positions
posLx = centerx - koerper / 2
posLy = centery - koerper / 2
posRx = centerx + koerper / 2
posRy = centery - koerper / 2
# Bein positions
posBLx = centerx - koerper / 2
posBLy = centery + koerper / 2
posBRx = centerx + koerper / 2
posBRy = centery + koerper / 2
#---Left Arm---
drawArm(posLx-30, posLy-15, 1, angle)
#---Right Arm---
drawArm(posRx+30, posRy-15, -1, angle)
#---Bein Links---
drawBein(posBLx, posBLy)
#---Bein Rechts---
drawBein(posBRx-40, posBRy)
#Eigene Funktionen
def drawAuge (xpos, ypos, direction):
pushMatrix()
pushStyle()
fill (80,80,100)
stroke (40)
strokeWeight(2)
translate (xpos, ypos)
scale(direction,1)
ellipse (0,0,auge,auge)
popStyle()
popMatrix()
def drawArm (xpos, ypos, direction, angle):
pushMatrix()
translate(xpos,ypos)
scale(direction,1)
rotate(angle)
rectMode(CORNER)
rect(0,0,30,130)
popMatrix()
def drawBein (xpos, ypos):
pushMatrix()
pushStyle()
fill(10,10,40)
translate(xpos,ypos)
rectMode(CORNER)
rect(0,0,40,90)
popMatrix()
popStyle()
saveFrame("robot_const_###.png")
Midtermbot
"""
midtermbot.py
"""
###Import###
#Import Modules for Project
from PIL import Image, ImageDraw, ImageFont, ImageFilter, ImageColor
import tweepy
import time
import random
import requests
from io import BytesIO
#Import aus Dateien
from twitterkeys import *
from textposts import text
from imagefuncs import blur, emboss, edges, invert, transpose
##############
###Programm###
##############
###Twitter connect###
#TwitterPassVariable for Test without posting on Twitter
#True = Post on Twitter / False = just open Image and show text local
check = False
#Define TwitterKeys to variables
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.secure = True
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
#Find Images and URL in Account on Twitter
timeline = api.user_timeline(screen_name = "C64_Bot")
for tweet in timeline:
for media in tweet.entities.get("media",[{}]):
if media.get("type",None) == "photo":
url = media["media_url"]
###Load Image from URL###
#"http://maui.hawaii.edu/tlc/wp-content/uploads/sites/53/2013/11/testing.jpg"
response = requests.get(url)
image = Image.open(BytesIO(response.content))
#Test Bild laden
#image = Image.open("test.png")
#Liste der verschiedenen Funktionen erstellen
functions_list = [blur, emboss, edges, invert, transpose]
#Mainfunction
if __name__ == "__main__":
#Random eine Funktion aufrufen
imagefunc = random.choice(functions_list)
#Random Funktion anwenden
image = imagefunc(image)
#2.Runde Random Filter anwenden
#Random eine Funktion aufrufen
imagefunc = random.choice(functions_list)
#Random Funktion anwenden
image = imagefunc(image)
if check == True:
filename = "final.png"
image.save(filename)
api.update_with_media(filename,text)
else:
image.show()
print(text)
"""
imagefuncs.py
"""
from PIL import Image, ImageDraw, ImageFont, ImageFilter, ImageColor, ImageEnhance
#verschiedene Bildbearbeitungfunktionen
#Bild blur
def blur (image):
return image.filter(ImageFilter.BLUR)
def emboss (image):
return image.filter(ImageFilter.EMBOSS)
def edges (image):
return image.filter(ImageFilter.FIND_EDGES)
def transpose(image):
return image.transpose(Image.FLIP_LEFT_RIGHT)
def invert(image):
return image.point(lambda x: 255-x)
""" textposts.py """ #Import Modules for Project import random #Verschiedene Texte die gepostet werden können a="Yeah, a new Image is Ready" b="I'am an artist.What you think about?" c="Uh, which great Effekt" d="Nice" e="Thats what I do" f="Mhmmm, what you mean? Is this art?" g="Yes I post" h="I should do an exhibition whith this works." i="Tell me what you think about." j="This is my job! Post Pictures..." k="Funky..." #Liste mit allen Textinhalten erstellen text_list = [a, b, c, d, e, f, g, h, i, j, k] #Zufällige auswahl eines Inhalts text = random.choice(text_list)

