(Midtermbot) |
No edit summary |
||
| Line 1: | Line 1: | ||
==== Page of Constantin Oestreich ==== | ==== Page of Constantin Oestreich ==== | ||
Twitterbot: [https://twitter.com/picturius @Picturus Bottian] | |||
==== Twitterbot Picturius Bottian ==== | |||
=== Source Code: === | |||
<pre style="font-size:smaller" > | |||
""" | |||
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() | |||
</pre> | |||
<pre style="font-size:smaller" > | |||
""" | |||
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 | |||
</pre> | |||
<pre style="font-size:smaller" > | |||
""" | |||
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 | |||
</pre> | |||
[[File:Robot_const.jpg]] | [[File:Robot_const.jpg]] | ||
Revision as of 15:05, 15 September 2015
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)

