Adding imgur client id to the config file

This commit is contained in:
Michael Lazar
2017-06-07 22:40:45 -04:00
parent fd6e6cc8ec
commit e964cb7ca3
4 changed files with 239 additions and 155 deletions

View File

@@ -128,43 +128,119 @@ class RedditUploadsMIMEParser(BaseMIMEParser):
return url, content_type 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/((?P<domain>a|album|gallery)/)?(?P<hash>[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 <meta> tags that supply the relevant info:
<meta name="twitter:image" content="https://i.imgur.com/xrqQ4LEh.jpg">
<meta property="og:image" content="http://i.imgur.com/xrqQ4LE.jpg?fb">
<link rel="image_src" href="http://i.imgur.com/xrqQ4LE.jpg">
""" """
pattern = re.compile(r'https?://(w+\.)?(m\.)?imgur\.com/[^.]+$') pattern = re.compile(r'https?://(w+\.)?(m\.)?imgur\.com/[^.]+$')
@staticmethod @staticmethod
def get_mimetype(url): def get_mimetype(url):
endpoint = 'https://api.imgur.com/3/{domain}/{page_hash}' page = requests.get(url)
header = {'authorization': 'Client-ID {}'.format('d8842d573e8b9dd')} 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/((?P<domain>a|album|gallery)/)?(?P<hash>.+)$')
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), class ImgurScrapeAlbumMIMEParser(BaseMIMEParser):
headers=header) """
if r.status_code != 200: Imgur albums can contain several images, which need to be scraped from the
r = requests.get(endpoint.format(domain='image', landing page. Assumes the following html structure:
page_hash=page_hash), headers=header)
if r.status_code != 200:
return url, None
data = r.json()['data'] <div class="post-image">
if 'images' in data: <a href="//i.imgur.com/L3Lfp1O.jpg" class="zoom">
# TODO: handle imgur albums with mixed content, i.e. jpeg and gifv <img class="post-image-placeholder"
links = ' '.join([d['link'] for d in data['images'] if not d['animated']]) src="//i.imgur.com/L3Lfp1Og.jpg" alt="Close up">
return links.replace('http://', 'https://'), 'image/x-imgur-album' <img class="js-post-image-thumb"
else : src="//i.imgur.com/L3Lfp1Og.jpg" alt="Close up">
link = data['mp4'] if data['animated'] else data['link'] </a>
mime = 'video/mp4' if data['animated'] else data['type'] </div>
return link.replace('http://', 'https://'), mime """
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): class InstagramMIMEParser(OpenGraphMIMEParser):
""" """
@@ -203,7 +279,7 @@ parsers = [
VidmeMIMEParser, VidmeMIMEParser,
InstagramMIMEParser, InstagramMIMEParser,
GfycatMIMEParser, GfycatMIMEParser,
ImgurMIMEParser, ImgurApiMIMEParser,
RedditUploadsMIMEParser, RedditUploadsMIMEParser,
YoutubeMIMEParser, YoutubeMIMEParser,
GifvMIMEParser, GifvMIMEParser,

View File

@@ -63,6 +63,11 @@ oauth_redirect_port = 65000
; Access permissions that will be requested. ; Access permissions that will be requested.
oauth_scope = edit,history,identity,mysubreddits,privatemessages,read,report,save,submit,subscribe,vote 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] [bindings]
############## ##############
# Key Bindings # Key Bindings

View File

@@ -60,6 +60,9 @@ class Terminal(object):
self._display = None self._display = None
self._mailcap_dict = mailcap.getcaps() 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 @property
def up_arrow(self): def up_arrow(self):
symbol = '^' if self.config['ascii'] else '' symbol = '^' if self.config['ascii'] else ''

View File

@@ -11,142 +11,142 @@ interactions:
response: response:
body: body:
string: !!binary | string: !!binary |
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
AA== wztcHsFrXeArYv8XX77GaVVsAAA=
headers: headers:
Cache-Control: ['private, no-cache, no-store, must-revalidate'] Cache-Control: ['private, no-cache, no-store, must-revalidate']
Connection: [keep-alive] Connection: [keep-alive]
Content-Encoding: [gzip] Content-Encoding: [gzip]
Content-Language: [en] Content-Language: [en]
Content-Length: ['6898'] Content-Length: ['6917']
Content-Type: [text/html] 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'] Expires: ['Sat, 01 Jan 2000 00:00:00 GMT']
Pragma: [no-cache] Pragma: [no-cache]
Set-Cookie: [rur=PRN; Path=/, 's_network=""; expires=Thu, 01-Jun-2017 04:06:07 Set-Cookie: [rur=PRN; Path=/, 's_network=""; expires=Thu, 01-Jun-2017 04:00:05
GMT; Max-Age=3600; Path=/', 'csrftoken=GD3Xd2TfnuoXzfisSfnDgnCpfkjXXOgR; GMT; Max-Age=3600; Path=/', 'csrftoken=pPVjn4n5smFrkGq5yEmdhAUPsFk6sBfi;
expires=Thu, 31-May-2018 03:06:07 GMT; Max-Age=31449600; Path=/; Secure', expires=Thu, 31-May-2018 03:00:05 GMT; Max-Age=31449600; Path=/; Secure',
'mid=WS-EnwAEAAGn6azL7mpBTqbZcdZl; expires=Wed, 27-May-2037 03:06:07 GMT; 'mid=WS-DNQAEAAGY4W0-gaOJcn_obrnE; expires=Wed, 27-May-2037 03:00:05 GMT;
Max-Age=630720000; Path=/'] Max-Age=630720000; Path=/']
Strict-Transport-Security: [max-age=86400] Strict-Transport-Security: [max-age=86400]
Vary: ['Cookie, Accept-Language, Accept-Encoding'] Vary: ['Cookie, Accept-Language, Accept-Encoding']