# Major Upgrade!
* Server implementation complete. * Cross-compatibility with discover * switch to fetch api * Easy to make into a hugo shortcodemain
parent
bee3e314d1
commit
ca4b7635a4
@ -0,0 +1 @@
|
||||
*__pycache__
|
@ -1 +0,0 @@
|
||||
<! not sure how to slim it down yet>
|
@ -0,0 +1,22 @@
|
||||
from flask import Flask,request,redirect
|
||||
import json,requests,time
|
||||
import simple_cache
|
||||
|
||||
|
||||
|
||||
app = Flask('interverse-proxy')
|
||||
cache = simple_cache.Cache()
|
||||
|
||||
|
||||
|
||||
@app.route("/", methods=['GET'])
|
||||
def interverse_proxy():
|
||||
url = request.args.get('url')
|
||||
if url == None:
|
||||
return redirect("https://codeberg.org/gabe/Interverse",307)
|
||||
return "See <a href='https://codeberg.org/gabe/Interverse'>Interverse</a>"
|
||||
data = cache.load_data(url)
|
||||
return json.dumps(data)
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run()
|
@ -0,0 +1,62 @@
|
||||
import requests,time,json
|
||||
ideal_delta = 60*5 #5 minutes
|
||||
|
||||
crawler_header = {'User-agent': 'interverse-crawler','info':'https://libresolutions.network/videos/interverse-demo-1/'}
|
||||
schemes = ['http://','https://']
|
||||
locations = [
|
||||
'/.well-known/discover.json',
|
||||
'/.well-known/interverse',
|
||||
'/interverse.json',
|
||||
'/discover.json'
|
||||
]
|
||||
|
||||
|
||||
|
||||
class Cache:
|
||||
def __init__(self,delta=None):
|
||||
if delta==None:
|
||||
self.delta = ideal_delta
|
||||
else:
|
||||
self.delta = delta
|
||||
self.links={}
|
||||
# link = key:{data,time}
|
||||
|
||||
|
||||
def load_data(self,url):
|
||||
data = None
|
||||
t = time.time()
|
||||
if url in self.links:
|
||||
if t - self.links[url]['time'] <= self.delta:
|
||||
print(f"Using cached result for {url}")
|
||||
return self.links[url]['data']
|
||||
for s in schemes:
|
||||
for l in locations:
|
||||
try:
|
||||
data = requests.get(s+url+l,headers=crawler_header,timeout=3).json()
|
||||
if l.find('discover'):
|
||||
#translate discover to interverse
|
||||
data = json.loads(json.dumps(data).replace("preview_connections","connection_groups"))
|
||||
print(f"Interverse connection found at {l}")
|
||||
t = time.time()
|
||||
self.links[url] = {
|
||||
'time':t,
|
||||
'data':data,
|
||||
}
|
||||
|
||||
return data
|
||||
except:
|
||||
pass
|
||||
if data != None:
|
||||
t = time.time()
|
||||
self.links[url] = {
|
||||
'time':t,
|
||||
'data':data,
|
||||
}
|
||||
|
||||
if data == None:
|
||||
#If no data is returned, wait longer before attempting again
|
||||
self.links[url] = {
|
||||
'data':None,
|
||||
'time':t+ideal_delta
|
||||
}
|
||||
return data
|
Loading…
Reference in New Issue