def getimgur(number): """Get list of imgur image-links""" images = [] # ensure api keys are set API_KEY, API_SECRET = apiKeys() if not API_KEY: warnings.warn("API_KEY not set") if not API_SECRET: warnings.warn("API_SECRET not set") return images client = ImgurClient(API_KEY, API_SECRET) get_images = client.memes_subgallery(sort='viral', page=0, window='week') for image in get_images: if responseOk(image.link) == True: if image.link is not None: if len(images) < number: images.append(image.link) else: return images else: for e in imgurScrape(image.link): if e is not None: if len(images) < number: images.append(e) else: return images return images
async def meme(self): """Sends a meme""" client = ImgurClient(clientid, clientsecret) items = client.memes_subgallery() item = random.choice(items) await self.bot.say(item.title) await self.bot.say(item.link)
#! /usr/bin/env python from imgurpython import ImgurClient client_id = '0f354899f3c1841' client_secret = '771df959e3b381b5035854dbad02f226abb81ba1' client = ImgurClient(client_id, client_secret) # Example request items = client.memes_subgallery(sort='viral', page=0) for item in items: print(item.link)
ret[i]['original link'] = item.link i = i + 1 return ret if __name__ == '__main__': memes = top_10('week') for m in memes: print(m['id'], "(", len(m['images']), "images )", m['images'][0], sep=" ") if __name__ == '__test_old__': timeframe = 'all' search = 'e' # Request for viral memes from past timeframe items = client.memes_subgallery(sort='viral', page=0, window=timeframe) for item in items: if search in item.title: print(item.title) print(type(item.title)) print(dir(item)) print(item.link) print(item.section) print # Newline
class ImgurScraper(object): #==========[ Parameters ]========== client_id = '8e6c102fd0cb416' client_secret = 'a2ab9f76a1b6706b00200fa74270a281c32248bb' base_data_dir = os.path.join(os.path.split(os.path.abspath(__file__))[0], 'data/imgur/') block_size = 500 print_size = 60 def __init__(self): #=====[ Step 1: get data_dir ]===== self.data_dir = os.path.join(self.base_data_dir, str(datetime.datetime.now().date())) if not os.path.exists(self.data_dir): os.mkdir(self.data_dir) #=====[ Step 2: get client ]===== self.client = ImgurClient(self.client_id, self.client_secret) self.num_scraped = 0 ################################################################################ ####################[ DATA STORAGE ]############################################ ################################################################################ def get_dump_filepath(self, memes): """returns filename for scraped memes""" filename = '%s-%s.pkl' % (self.num_scraped - len(memes), self.num_scraped) filepath = os.path.join(self.data_dir, filename) return filepath def dump_memes(self, memes, verbose=True): """saves array of memes to disk""" path = self.get_dump_filepath(memes) print '-----> Saving %d memes to %s...' % (len(memes), path) pickle.dump(memes, open(path, 'w')) print '\tSuccess.' ################################################################################ ####################[ GRABBING MEMES ]########################################## ################################################################################ def make_image_url(self, image_id): return 'http://imgur.com/t/meme/%s' % image_id def get_image_page(self, image_id): return requests.get(self.make_image_url(image_id)) def extract_description(self, image_id): page = self.get_image_page(image_id) tree = html.fromstring(page.text) description = tree.xpath('//meta[@name="description"]')[0] return description.get('content') def image_to_meme(self, image): """GalleryImage -> Meme""" content = self.extract_description(image.id) return Meme(id=image.id, views=image.views, score=image.score, content=content) def get_gallery_page(self, page, verbose=True): """returns list of GalleryImages""" # return self.client.memes_subgallery(sort='top', page=page, window="day") return self.client.memes_subgallery(sort='time', page=page) def scrape_memes(self, page_ix=0): memes = [] num_failed = 0 self.num_scraped = 60*page_ix while (True): #=====[ Step 1: get images ]===== try: images = self.get_gallery_page(page_ix) except: print '>>gallery failed; continuing<<' num_failed += 1 if num_failed >= 10: break else: continue #=====[ Step 2: get memes ]===== for image in images: try: memes.append(self.image_to_meme(image)) self.num_scraped += 1 print '.', except: e = sys.exc_info()[0] print 'x', time.sleep(0.3) #=====[ Step 3: print if appropriate ]===== if self.num_scraped % self.print_size == 0: print '\nscraped %d' % self.num_scraped #=====[ Step 4: dump if appropriate ]===== if (self.num_scraped % self.block_size) == 0: self.dump_memes(memes) memes = [] page_ix += 1 if self.num_scraped >= 2000: print '\n>>>FINISHED<<<' break self.dump_memes(memes)
if __name__ == "__main__": try: with open(page_path, "rb") as f: page_start = pickle.load(f) print("Starting at page {}.".format(page_start)) except FileNotFoundError: with open(page_path, "wb") as f: pickle.dump(page_start, f, pickle.HIGHEST_PROTOCOL) print("Starting fresh at page 0.") client = ImgurClient(CLIENT_ID, CLIENT_SECRET) for page in range(page_start, page_start + page_range): items = client.memes_subgallery(page=page) for item in items: if isValid(item): media_name = media_path + item.link.split("/")[-1] r = requests.get(item.link, allow_redirects=True) with open(media_name, "wb") as f: f.write(r.content) data_name = data_path + item.id + ".pkl" with open(data_name, "wb") as f: pickle.dump(item, f, pickle.HIGHEST_PROTOCOL) print(page, item.id, item.width, item.height, item.size, item.link, item.score) with open(page_path, "wb") as f: pickle.dump(page + 1, f, pickle.HIGHEST_PROTOCOL) print(client.get_credits())
elif score in range(25, 74): await client.edit_message(tmp, '**Analysiere Personen auf potenzielle Korpulationschancen:** :hearts:') await client.send_message(message.channel, "**" + prince +"** und **" + princess + "** connecten zu **" + str(score) +"\%**!") else: await client.edit_message(tmp, '**Analysiere Personen auf potenzielle Korpulationschancen:** ::broken_heart:') await client.send_message(message.channel, "**" + prince +"** und **" + princess + "** connecten zu **" + str(score) +"\%**!") except IndexError: text = '\n'.join(("Falscher Input, behinderter Spasti", "`Usage: !loveCheck [Person1] [Person2]`")) await client.send_message(message.channel, text) # !meme # Postet ein zufälliges Meme aus Imgur elif message.content.startswith('!meme'): try: memes = imgurclient.memes_subgallery(sort='viral', page=0, window='week') await client.send_message(message.channel, random.choice(memes).link) except ImgurClientError: await client.send_message(message.channel, 'Imgur-Client spinnt. :(') # !paragon # Postet ein Todd Howard Meme aus Imgur elif message.content.startswith('!paragon'): try: paragon = imgurclient.subreddit_gallery('gayfortodd', sort='time', window='week', page=0) await client.send_message(message.channel, random.choice(paragon).link) except ImgurClientError: await client.send_message(message.channel, 'Imgur-Client spinnt. :(') # !shibe # Postet ein süßes Bild von einem Shiba Inu