import json import sys import locadslib import time import datetime import base64 import os from urllib.parse import urlparse #import yotlib as yot # https://www.google.com/maps/preview/lp?authuser=0&hl=en&gl=id&pb=!1m3!1sDtyOX_6IDc-f9QOK7ZS4DA!7e81!15i60107!2m9!1m3!1d1!2d(lng)!3d(lat)!2m0!3m2!1i1366!2i657!4f0.1!5m2!3b0!5e11 #PROXY_SITE = "http://localhost:8080" PROXY_SITE = "" template = '''
''' try: import httpx as httpapi hsession = httpapi.Client(http2=True) htimeout = httpapi.Timeout(read=900, write=900, pool=900, connect_timeout=900) except Exception: import requests as httpapi hsession = httpapi.Session() adapter = httpapi.adapters.HTTPAdapter( pool_connections=128, pool_maxsize=128 ) hsession.mount("http://", adapter) hsession.mount("https://", adapter) #htimeout = httpapi.Timeout(900) htimeout = 900 def main(): global PROXY_SITE OUTP = None loadani_chars = ["/","-","\\","|"] failnoad = True TRIES = 25 NOTFOUNDAD = [] if len(sys.argv) > 2: if sys.argv[2] == "-keepsearch": failnoad = False elif sys.argv[2] == "-proxy": PROXY_SITE = sys.argv[3] elif sys.argv[2] == "-outp": OUTP = sys.argv[3] if ((PROXY_SITE or OUTP) and len(sys.argv) > 4) or (len(sys.argv) > 3): if (PROXY_SITE or OUTP): if sys.argv[4] == "-keepsearch": failnoad = False elif sys.argv[4] == "-proxy": PROXY_SITE = sys.argv[5] elif sys.argv[4] == "-outp": OUTP = sys.argv[5] else: if sys.argv[3] == "-keepsearch": failnoad = False elif sys.argv[3] == "-proxy": PROXY_SITE = sys.argv[4] elif sys.argv[3] == "-outp": OUTP = sys.argv[4] if ((PROXY_SITE or OUTP) and len(sys.argv) > 5) or (len(sys.argv) > 4): if (PROXY_SITE or OUTP): if sys.argv[5] == "-keepsearch": failnoad = False elif sys.argv[5] == "-proxy": PROXY_SITE = sys.argv[6] elif sys.argv[5] == "-outp": OUTP = sys.argv[6] else: if sys.argv[4] == "-keepsearch": failnoad = False elif sys.argv[4] == "-proxy": PROXY_SITE = sys.argv[5] elif sys.argv[4] == "-outp": OUTP = sys.argv[5] mdata = list(json.load(open(sys.argv[1], "r", encoding="utf-8")).values()) # print(OUTP) if not OUTP: if PROXY_SITE: outfo = f"linead_px_{base64.encodebytes(PROXY_SITE.encode('utf-8')).decode('utf-8')[:-1]}_{datetime.datetime.now().strftime('%y-%m-%d_%H-%M-%S')}" else: outfo = f"linead_{datetime.datetime.now().strftime('%y-%m-%d_%H-%M-%S')}" else: outfo = OUTP if not os.path.exists(outfo): os.mkdir(outfo) si = 1 indx = open(f"{outfo}/index.html", "w", encoding="utf-8") for mdat in mdata: retries = 0 skip = False lat, lng = tuple(urlparse(mdat['url']).path.split("/")[2][1:].split(",")[:2]) mapad = locadslib.MapAds([None]) startloc = f"{lat}, {lng}" tick = time.perf_counter()+0.05 lt = 0 print(f"Index {si}: Searching ads for {mdat['line-1']}, {mdat['line-2']} in {lat}, {lng}... [{loadani_chars[lt]}] 0 tries", end="\r") while mapad.noads: if time.perf_counter() >= tick: lt += 1 if lt > 3: lt = 0 print(f"Index {si}: Searching ads for {mdat['line-1']}, {mdat['line-2']} in {lat}, {lng}... [{loadani_chars[lt]}] {retries} tries", end="\r") if PROXY_SITE: hapi = httpapi.get(f"https://www.google.com/maps/preview/lp?authuser=0&hl=en&gl=us&pb=!1m3!1s0!7e81!15i60107!2m9!1m3!1d1!2d{lng}!3d{lat}!2m0!3m2!1i32767!2i32767!4f14!5m2!3b0!5e11", timeout=htimeout, proxies={"http":PROXY_SITE,"https":PROXY_SITE}) else: hapi = httpapi.get(f"https://www.google.com/maps/preview/lp?authuser=0&hl=en&gl=us&pb=!1m3!1s0!7e81!15i60107!2m9!1m3!1d1!2d{lng}!3d{lat}!2m0!3m2!1i32767!2i32767!4f14!5m2!3b0!5e11", timeout=htimeout) hapi.raise_for_status() o = hapi.content.decode("utf-8").replace(")]}'\n","") jsfile = json.loads(o) mapad = locadslib.MapAds(jsfile) if mapad.noads and failnoad: if retries >= TRIES: print() print(f"No ad found for {lat}, {lng}!") NOTFOUNDAD.append(f"{startloc} - {mdat['line-1']} - {mdat['line-2']}") hsession.cookies.clear() # prevent TFA floodgates skip = True break else: retries += 1 if skip: si += 1 continue print() print(f"Ad Found! for {lat}, {lng}") ''' for mapa in mapad.mapads: print(f"Ad Name: {mapa.get('adName')}") print(f"Ad Location: {mapa.get('adLocation')}") print(f"Ad Link: {mapa.get('adLink')}") print(f"Ad Site: {mapa.get('adSite')}") print(f"Ad WTA: {mapa.get('adWhy')}") if mapa.get('promoData'): print(f"Have Promo: yes") else: print(f"Have Promo: no") ''' htmldata = json.dumps({"startLocation": startloc, "adList": mapad.mapads}) outtemp = template.replace("(ADDATA)", htmldata) outfn = f"{outfo}/{base64.encodebytes(startloc.encode('utf-8')).decode('utf-8')[:-1]}.html" open(outfn, "w", encoding="utf-8").write(outtemp) indx.write(f'''{startloc} - {mdat['line-1']} - {mdat['line-2']}
\n''') indx.flush() #open("htmldump", "w", encoding="utf-8").write(htmldata) #open("dump", "w", encoding="utf-8").write(json.dumps(mapad.mapads)) hsession.cookies.clear() # prevent TFA floodgates si += 1 print("Location with no ads:") print() for na in NOTFOUNDAD: print(na) print() if __name__ == "__main__": main()