GMU:Bots 'n' Plots/Constantin Oestreich

From Medien Wiki

Page of Constantin Oestreich

Twitterbot: @Picturus Bottian

Twitterbot Picturius Bottian

Source Code:

Mainbot



#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()


Bildfunktionen + Random Auswahl


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


Textfunktion


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



Bilder des Bots:

Bot01.JPG

Bot02.JPG

Bot03.JPG

Bot04.JPG

Bot05.JPG

Bot06.JPG


Thanks for Help

Thanks to Stackoverflow, thanks to the smaller Blogs and Forums I arrieved via Google, thanks to effbot, thanks to Pillow and last but not least thanks to Martin and Sebastian.


Weiteres aus dem Kurs...

Robot const.jpg

Animated Robot

Robot Const.gif

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)