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 @app.route('/proxy/') 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) @app.route('/') 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')