56
edits
|  (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]] | ||
edits