|
|
Line 394: |
Line 394: |
| return text | | return text |
| </source> | | </source> |
|
| |
| === Source Code: ===
| |
|
| |
| ==== Mainbot ====
| |
| <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>
| |
|
| |
|
| |
| ==== Bildfunktionen + Random Auswahl ====
| |
| <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>
| |
|
| |
|
| |
| ==== Textfunktion ====
| |
| <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>
| |
|
| |
|
| |
| === Bilder des Bots: ===
| |
|
| |
| [[File:Bot01.JPG]]
| |
|
| |
| [[File:Bot02.JPG]]
| |
|
| |
| [[File:Bot03.JPG]]
| |
|
| |
| [[File:Bot04.JPG]]
| |
|
| |
| [[File:Bot05.JPG]]
| |
|
| |
| [[File:Bot06.JPG]]
| |
|
| |
|
| |
| === Thanks for Help ===
| |
|
| |
| Thanks to [http://stackoverflow.com/ Stackoverflow], thanks to the smaller Blogs and Forums I arrieved via Google, thanks to [http://effbot.org/ effbot], thanks to [https://pillow.readthedocs.org// Pillow] and last but not least thanks to Martin and Sebastian.
| |