Spaces:
Sleeping
Sleeping
from flask import Flask, Response, render_template, send_file, stream_with_context, request, session, redirect, url_for | |
import requests | |
import random | |
import pickle as pkl | |
import pycountry | |
import datetime as dt | |
import pytz | |
from io import BytesIO | |
import logging | |
import os | |
import time | |
app = Flask(__name__) | |
app.secret_key = 'green-flounder' | |
with open('video_urls.pkl', 'rb') as f: | |
live_urls = pkl.load(f) | |
live_urls = [i for i in live_urls if i!= 'http://2.40.36.158:8084/img/video.mjpeg'] | |
live_urls[4161] = live_urls[1163] | |
with open('owner_dict.pkl', 'rb') as f: | |
owner_dict = pkl.load(f) | |
from urllib.parse import urlsplit, urlunsplit, quote, parse_qsl, urlencode | |
def encode_url(url): | |
scheme, netloc, path, query_string, fragment = urlsplit(url) | |
query_params = parse_qsl(query_string) | |
encoded_query_params = [(key, quote(value)) for key, value in query_params] | |
encoded_query_string = urlencode(encoded_query_params) | |
finished = urlunsplit((scheme, netloc, path, encoded_query_string, fragment)) | |
return finished | |
from geolite2 import geolite2 | |
def get_location(ip): | |
start_time = time.time() | |
reader = geolite2.reader() | |
location = reader.get(ip) | |
geolite2.close() | |
end_time = time.time() | |
elapsed_time = end_time - start_time | |
print(f"\nTime taken for get_location: {elapsed_time} seconds\n") | |
if location: | |
return {'country': location['country']['names']['en'] if 'country' in location else 'unknown country', | |
'city': location['city']['names']['en'] if 'city' in location else 'unknown city', | |
'region': location['subdivisions'][0]['names']['en'] if 'subdivisions' in location else 'unknown region', | |
'loc': str(location['location']['latitude']) + ',' + str(location['location']['longitude']) if 'location' in location else '0,0', | |
'timezone': location['location']['time_zone'] if 'location' in location and 'time_zone' in location['location'] else 'America/New_York'} | |
else: | |
return {'country': 'unknown country', | |
'city': 'unknown city', | |
'region': 'unknown region', | |
'loc': str(0) + ',' + str(0), | |
'timezone':'America/New_York'} | |
def latlon_to_pixel(loc): | |
latitude = float(loc.split(',')[0]) | |
longitude = float(loc.split(',')[1]) | |
y = ((90-latitude)/180) | |
x = ((longitude+180)/360) | |
return x*100, y*100 | |
from urllib.parse import urlparse, parse_qs | |
def proxy(url): | |
start_time = time.time() | |
full_url = url | |
query_string = request.query_string.decode("utf-8") | |
if query_string: | |
full_url += "?" + query_string | |
headers = { | |
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', | |
'Accept-Encoding': 'gzip, deflate', | |
'Accept-Language': 'en-US,en;q=0.9', | |
'Cache-Control': 'max-age=0', | |
'Connection': 'keep-alive', | |
'Dnt': '1', | |
'Upgrade-Insecure-Requests': '1', | |
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36' | |
} | |
clean_url = full_url.replace('proxy/', '') | |
clean_url = encode_url(clean_url) | |
try: | |
req = requests.get(clean_url, headers=headers, stream=True, timeout=1) | |
end_time = time.time() | |
elapsed_time = end_time - start_time | |
print(f"\n{clean_url}\nTime taken for proxy: {elapsed_time} seconds\n") | |
return Response(req.iter_content(chunk_size=1024), content_type=req.headers['content-type']) | |
except Exception as e: | |
print(e) | |
return Response("Error", status=500) | |
def index(): | |
id = request.args.get('id') | |
if 'current_feed' in session and request.args.get('new', 'false') == 'false': | |
feed = session['current_feed'] | |
url = live_urls[int(feed)] | |
else: | |
feed = random.randint(0, len(live_urls) - 1) | |
url = live_urls[int(feed)] | |
session['current_feed'] = feed | |
if id: | |
url = live_urls[int(id)] | |
feed = id | |
session['current_feed'] = id | |
url = encode_url(url) | |
url = url.replace('640x480','1280x960').replace('COUNTER','') | |
id = feed | |
ip = ''.join(url.split('//')[-1]).split(':')[0] | |
info = get_location(ip) | |
country = info['country'].lower() | |
name = (info['city'] + ", " + info['region']).lower() | |
page_title = (info['city'] + ", " + info['region'] + ", " + country).lower() | |
timezone = pytz.timezone(info['timezone']) | |
time = dt.datetime.now(timezone) | |
time = time.strftime("%I:%M:%S %p") | |
loc = info['loc'] | |
X, Y = latlon_to_pixel(info['loc']) | |
proxy_url = 'proxy/' + url | |
logging.info(f"Generated proxy URL: {proxy_url}") | |
loc_link = f"https://www.google.com/maps/search/{loc}" | |
ip_link = url | |
try: | |
owner = owner_dict[ip] | |
except: | |
owner = 'unknown' | |
return render_template('index.html', | |
name=name, | |
url=encode_url(proxy_url), | |
info=info, | |
country=country, | |
time=time, | |
timezone=timezone, | |
ip=ip, | |
ip_link=ip_link, | |
loc=loc, | |
loc_link=loc_link, | |
owner=owner, | |
X=X, | |
Y=Y, | |
id=id, | |
page_title=page_title) | |
if __name__ == '__main__': | |
app.run(host='0.0.0.0', port='7860') | |