diff --git a/rtv/mime_parsers.py b/rtv/mime_parsers.py index 59c28ab..e0e883b 100644 --- a/rtv/mime_parsers.py +++ b/rtv/mime_parsers.py @@ -128,43 +128,119 @@ class RedditUploadsMIMEParser(BaseMIMEParser): return url, content_type -class ImgurMIMEParser(BaseMIMEParser): +class ImgurApiMIMEParser(BaseMIMEParser): + """ + Imgur now provides a json API exposing its entire infrastructure. Each Imgur + page has an associated hash and can either contain an album, a gallery, + or single image. + + The default client token for RTV is shared among users and allows a maximum + global number of requests per day of 12,500. If we find that this limit is + not sufficient for all of rtv's traffic, this method will be revisited. + + Reference: + https://apidocs.imgur.com """ - Imgur provides a json api exposing its entire infrastructure. Each imgur - page has an associated hash and can either contain an album, a gallery, or single image. - see https://apidocs.imgur.com + pattern = re.compile(r'https?://(w+\.)?(m\.)?imgur\.com/((?Pa|album|gallery)/)?(?P[a-zA-Z0-9]+)[^.]+$') + client_id = None + + @classmethod + def get_mimetype(cls, url): + + endpoint = 'https://api.imgur.com/3/{domain}/{page_hash}' + headers = {'authorization': 'Client-ID {0}'.format(cls.client_id)} + + m = cls.pattern.match(url) + page_hash = m.group('hash') + domain = 'album' if m.group('domain') in ('a', 'album') else 'gallery' + + url = endpoint.format(domain=domain, page_hash=page_hash) + r = requests.get(url, headers=headers) + + if r.status_code != 200: + url = endpoint.format(domain='image', page_hash=page_hash) + r = requests.get(url, headers=headers) + + if r.status_code != 200: + if domain == 'album': + return ImgurScrapeAlbumMIMEParser.get_mimetype(url) + else: + return ImgurScrapeMIMEParser.get_mimetype(url) + + data = r.json()['data'] + if 'images' in data: + # TODO: handle imgur albums with mixed content, i.e. jpeg and gifv + link = ' '.join([d['link'] for d in data['images'] if not d['animated']]) + mime = 'image/x-imgur-album' + else: + link = data['mp4'] if data['animated'] else data['link'] + mime = 'video/mp4' if data['animated'] else data['type'] + + link = link.replace('http://', 'https://') + return link, mime + + +class ImgurScrapeMIMEParser(BaseMIMEParser): + """ + The majority of imgur links don't point directly to the image, so we need + to open the provided url and scrape the page for the link. + + Scrape the actual image url from an imgur landing page. Imgur intentionally + obscures this on most reddit links in order to draw more traffic for their + advertisements. + + There are a couple of tags that supply the relevant info: + + + """ pattern = re.compile(r'https?://(w+\.)?(m\.)?imgur\.com/[^.]+$') @staticmethod def get_mimetype(url): - endpoint = 'https://api.imgur.com/3/{domain}/{page_hash}' - header = {'authorization': 'Client-ID {}'.format('d8842d573e8b9dd')} + page = requests.get(url) + soup = BeautifulSoup(page.content, 'html.parser') + tag = soup.find('meta', attrs={'name': 'twitter:image'}) + if tag: + url = tag.get('content') + if GifvMIMEParser.pattern.match(url): + return GifvMIMEParser.get_mimetype(url) + return BaseMIMEParser.get_mimetype(url) - pattern = re.compile(r'https?://(w+\.)?(m\.)?imgur\.com/((?Pa|album|gallery)/)?(?P.+)$') - m = pattern.match(url) - page_hash = m.group('hash') - domain = 'album' if m.group('domain') in ['a', 'album'] else 'gallery' - r = requests.get(endpoint.format(domain=domain, page_hash=page_hash), - headers=header) - if r.status_code != 200: - r = requests.get(endpoint.format(domain='image', - page_hash=page_hash), headers=header) - if r.status_code != 200: - return url, None +class ImgurScrapeAlbumMIMEParser(BaseMIMEParser): + """ + Imgur albums can contain several images, which need to be scraped from the + landing page. Assumes the following html structure: - data = r.json()['data'] - if 'images' in data: - # TODO: handle imgur albums with mixed content, i.e. jpeg and gifv - links = ' '.join([d['link'] for d in data['images'] if not d['animated']]) - return links.replace('http://', 'https://'), 'image/x-imgur-album' - else : - link = data['mp4'] if data['animated'] else data['link'] - mime = 'video/mp4' if data['animated'] else data['type'] - return link.replace('http://', 'https://'), mime +
+ + Close up + Close up + +
+ """ + pattern = re.compile(r'https?://(w+\.)?(m\.)?imgur\.com/a(lbum)?/[^.]+$') + @staticmethod + def get_mimetype(url): + page = requests.get(url) + soup = BeautifulSoup(page.content, 'html.parser') + + urls = [] + for div in soup.find_all('div', class_='post-image'): + img = div.find('img') + src = img.get('src') if img else None + if src: + urls.append('http:{0}'.format(src)) + + if urls: + return " ".join(urls), 'image/x-imgur-album' + else: + return url, None class InstagramMIMEParser(OpenGraphMIMEParser): """ @@ -203,7 +279,7 @@ parsers = [ VidmeMIMEParser, InstagramMIMEParser, GfycatMIMEParser, - ImgurMIMEParser, + ImgurApiMIMEParser, RedditUploadsMIMEParser, YoutubeMIMEParser, GifvMIMEParser, diff --git a/rtv/templates/rtv.cfg b/rtv/templates/rtv.cfg index 36fcc7e..54556d8 100644 --- a/rtv/templates/rtv.cfg +++ b/rtv/templates/rtv.cfg @@ -63,6 +63,11 @@ oauth_redirect_port = 65000 ; Access permissions that will be requested. oauth_scope = edit,history,identity,mysubreddits,privatemessages,read,report,save,submit,subscribe,vote +; This is a separate token for the imgur api. It is used to extract images from +; convoluted imgur links and albums so they can be opened with mailcap. +; See https://imgur.com/account/settings/apps to generate your own key. +imgur_client_id = 93396265f59dec9 + [bindings] ############## # Key Bindings diff --git a/rtv/terminal.py b/rtv/terminal.py index 401f942..196cdf1 100644 --- a/rtv/terminal.py +++ b/rtv/terminal.py @@ -60,6 +60,9 @@ class Terminal(object): self._display = None self._mailcap_dict = mailcap.getcaps() + # Hack to allow setting the Imgur OAuth cred in the config file + mime_parsers.ImgurApiMIMEParser.client_id = config['imgur_client_id'] + @property def up_arrow(self): symbol = '^' if self.config['ascii'] else '▲' diff --git a/tests/cassettes/test_parser[instagram_image].yaml b/tests/cassettes/test_parser[instagram_image].yaml index 42250de..5fabaf2 100644 --- a/tests/cassettes/test_parser[instagram_image].yaml +++ b/tests/cassettes/test_parser[instagram_image].yaml @@ -11,142 +11,142 @@ interactions: response: body: string: !!binary | - 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 - AA== + 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 + wztcHsFrXeArYv8XX77GaVVsAAA= headers: Cache-Control: ['private, no-cache, no-store, must-revalidate'] Connection: [keep-alive] Content-Encoding: [gzip] Content-Language: [en] - Content-Length: ['6898'] + Content-Length: ['6917'] Content-Type: [text/html] - Date: ['Thu, 01 Jun 2017 03:06:07 GMT'] + Date: ['Thu, 01 Jun 2017 03:00:05 GMT'] Expires: ['Sat, 01 Jan 2000 00:00:00 GMT'] Pragma: [no-cache] - Set-Cookie: [rur=PRN; Path=/, 's_network=""; expires=Thu, 01-Jun-2017 04:06:07 - GMT; Max-Age=3600; Path=/', 'csrftoken=GD3Xd2TfnuoXzfisSfnDgnCpfkjXXOgR; - expires=Thu, 31-May-2018 03:06:07 GMT; Max-Age=31449600; Path=/; Secure', - 'mid=WS-EnwAEAAGn6azL7mpBTqbZcdZl; expires=Wed, 27-May-2037 03:06:07 GMT; + Set-Cookie: [rur=PRN; Path=/, 's_network=""; expires=Thu, 01-Jun-2017 04:00:05 + GMT; Max-Age=3600; Path=/', 'csrftoken=pPVjn4n5smFrkGq5yEmdhAUPsFk6sBfi; + expires=Thu, 31-May-2018 03:00:05 GMT; Max-Age=31449600; Path=/; Secure', + 'mid=WS-DNQAEAAGY4W0-gaOJcn_obrnE; expires=Wed, 27-May-2037 03:00:05 GMT; Max-Age=630720000; Path=/'] Strict-Transport-Security: [max-age=86400] Vary: ['Cookie, Accept-Language, Accept-Encoding']