Last active
September 20, 2016 14:05
-
-
Save sebble/dd4e1de5a79881c0508d8fceb3bdb2e4 to your computer and use it in GitHub Desktop.
Best match gist redirection (no cache, no rate-limit protection)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
from SimpleHTTPServer import SimpleHTTPRequestHandler | |
from SocketServer import TCPServer | |
from requests import get | |
from os import environ | |
cache = {} | |
user = environ.get('GITHUB_USERNAME','sebble') | |
def find(key): | |
m = [x['id'] for x in cache if x['id'][:len(key)]==key] | |
return m[0] if len(m) else None | |
def update(): | |
global cache | |
cache = get('https://api.github.com/users/%s/gists?per_page=100'%user).json() | |
class MyRedirector(SimpleHTTPRequestHandler): | |
def do_GET(self): | |
global cache | |
key = self.path.split('/')[1] | |
gist = find(key) | |
if gist is None: | |
try: | |
update() | |
gist = find(key) | |
if gist is None: | |
self.send_response(404) | |
self.end_headers() | |
return | |
except: | |
self.send_response(500) | |
self.end_headers() | |
return | |
url = 'https://bl.ocks.org/%s/%s'%(user,gist) | |
self.send_response(302) | |
self.send_header('Location',url) | |
self.end_headers() | |
TCPServer(('0.0.0.0', environ.get('PORT',8080)), MyRedirector).serve_forever() | |
# docker run --rm -it -v "$PWD/server.py:/server.py" -p 8081:8080 python:2-alpine sh -c 'pip install requests && /server.py' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment