diff --git a/README.md b/README.md index a85e2a7..e9771c4 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ - Teddit: [https://codeberg.org/teddit/teddit/src/branch/main/instances.json](https://codeberg.org/teddit/teddit/src/branch/main/instances.json) - Rimgo: [https://codeberg.org/video-prize-ranch/rimgo/src/branch/main/instances.json](https://codeberg.org/video-prize-ranch/rimgo/src/branch/main/instances.json) - Scribe: [https://git.sr.ht/~edwardloveall/scribe/tree/main/item/docs/instances.json](https://git.sr.ht/~edwardloveall/scribe/tree/main/item/docs/instances.json) +- LibMedium: [https://github.com/realaravinth/libmedium#instances](https://github.com/realaravinth/libmedium#instances) - Quetre: [https://github.com/zyachel/quetre#instances](https://github.com/zyachel/quetre#instances) - libremdb: [https://github.com/zyachel/libremdb#instances](https://github.com/zyachel/libremdb#instances) - Librarian: [https://codeberg.org/librarian/librarian/src/branch/main/instances.json](https://codeberg.org/librarian/librarian/src/branch/main/instances.json) @@ -21,6 +22,8 @@ - LingvaTranslate: [https://github.com/thedaviddelta/lingva-translate/blob/main/instances.json](https://github.com/thedaviddelta/lingva-translate/blob/main/instances.json) - LibreTranslate: [https://github.com/LibreTranslate/LibreTranslate#mirrors](https://github.com/LibreTranslate/LibreTranslate#mirrors) - Send: [https://github.com/timvisee/send-instances](https://github.com/timvisee/send-instances) +- Dumb: [https://github.com/rramiachraf/dumb#public-instances](https://github.com/rramiachraf/dumb#public-instances) +- AnonymousOverflow: [https://github.com/httpjamesm/AnonymousOverflow#clearnet-instances](https://github.com/httpjamesm/AnonymousOverflow#clearnet-instances) ## How to run: diff --git a/blacklist.json b/blacklist.json index 49b4d18..db89464 100644 --- a/blacklist.json +++ b/blacklist.json @@ -5,10 +5,9 @@ "https://yt.oelrichsgarcia.de", "https://piped.video", "https://piped.tokhmi.xyz", - "https://piped.moomoo.me", "https://piped.mha.fi", "https://piped.garudalinux.org", - "https://watch.leptons.xyz", + "https://efy.piped.pages.dev", "https://piped.lunar.icu", "https://piped.video", "https://proxitok.marcopisco.com", @@ -62,11 +61,15 @@ "https://search.albony.xyz", "https://search.garudalinux.org", "https://search.dr460nf1r3.org", + "https://whoogle.hxvy0.gq", "https://whoogle.lunar.icu", "https://whoogle.rhyshl.live", "https://rimgo.privacytools.io", "https://rimgo.marcopisco.com", "https://rimgo.lunar.icu", - "https://beatbump.ml" + "https://imgur.010032.xyz", + "https://beatbump.ml", + "https://dumb.lunar.icu", + "https://overflow.lunar.icu" ] } \ No newline at end of file diff --git a/cloudflare.py b/cloudflare.py new file mode 100644 index 0000000..e36aeab --- /dev/null +++ b/cloudflare.py @@ -0,0 +1,53 @@ +import traceback +import logging +import requests +import json +from urllib.parse import urlparse +import re +from colorama import Fore, Style +import socket + +def get_cloudflare_ips(): + r = requests.get('https://www.cloudflare.com/ips-v4') + return r.text.split('\n') + + +cloudflare_ips = get_cloudflare_ips() + + + +def ip2bin(ip): return "".join( + map( + str, + [ + "{0:08b}".format(int(x)) for x in ip.split(".") + ] + ) +) + + +def is_cloudflare(url): + instance_ip = None + try: + instance_ip = socket.gethostbyname(urlparse(url).hostname) + if instance_ip is None: + return False + except Exception: + return False + instance_bin = ip2bin(instance_ip) + + for cloudflare_ip_mask in cloudflare_ips: + cloudflare_ip = cloudflare_ip_mask.split('/')[0] + cloudflare_bin = ip2bin(cloudflare_ip) + + mask = int(cloudflare_ip_mask.split('/')[1]) + cloudflare_bin_masked = cloudflare_bin[:mask] + instance_bin_masked = instance_bin[:mask] + + if cloudflare_bin_masked == instance_bin_masked: + print(url + ' is behind ' + Fore.RED + + 'cloudflare' + Style.RESET_ALL) + return True + return False + +is_cloudflare('https://pipedapi-libre.kavin.rocks') \ No newline at end of file diff --git a/data.json b/data.json index 3d4058f..08610eb 100644 --- a/data.json +++ b/data.json @@ -10,34 +10,34 @@ "https://invidious.nerdvpn.de", "https://invidious.tiekoetter.com", "https://yt.artemislena.eu", - "https://invidious.flokinet.to", "https://inv.bp.projectsegfau.lt", "https://inv.odyssey346.dev", "https://invidious.baczek.me", "https://invidious.snopyta.org", "https://invidious.sethforprivacy.com", "https://yt.funami.tech", - "https://invidious.drivet.xyz", - "https://iv.ggtyler.dev", "https://invidious.epicsite.xyz", - "https://invidious.silur.me", + "https://iv.ggtyler.dev", + "https://yt.oelrichsgarcia.de", "https://vid.priv.au", - "https://invidious.slipfox.xyz", "https://inv.vern.cc", - "https://invidious.weblibre.org", - "https://invidious.esmailelbob.xyz", - "https://iv.melmac.space", - "https://invidious.dhusch.de", - "https://invidious.privacydev.net", "https://invidious.slipfox.xyz", + "https://invidious.esmailelbob.xyz", + "https://invidious.dhusch.de", + "https://invidious.weblibre.org", + "https://iv.melmac.space", + "https://invidious.silur.me", "https://invidious.lidarshield.cloud", + "https://invidious.drivet.xyz", + "https://invidious.privacydev.net", + "https://invidious.flokinet.to", "https://invidious.namazso.eu" ], "tor": [ "http://w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd.onion", "http://kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad.onion", "http://grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad.onion", - "http://osbivz6guyeahrwp2lnwyjk2xos342h4ocsxyqrlaopqjuhwn2djiiyd.onion", + "http://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion", "http://u2cvlit75owumwpy4dj2hsmvkq7nvrclkpht7xgyye2pyoxhpmclkrad.onion", "http://euxxcnhsynwmfidvhjf6uzptsmh4dipkmgdmcmxxuo7tunp3ad2jrwyd.onion", "http://invidious.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd.onion", @@ -46,7 +46,7 @@ "http://ng27owmagn5amdm7l5s3rsqxwscl5ynppnis5dqcasogkyxcfqn7psid.onion", "http://iv.odysfvr23q5wgt7i456o5t3trw2cw5dgn56vbjfbq2m7xsc5vqbqpcyd.onion", "http://invidious.g4c3eya4clenolymqbpgwz3q3tawoxw56yhzk4vugqrl6dtu3ejvhjid.onion", - "http://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion" + "http://osbivz6guyeahrwp2lnwyjk2xos342h4ocsxyqrlaopqjuhwn2djiiyd.onion" ], "i2p": [ "http://verni6dr4qxjgjumnvesxerh5rvhv6oy5ddeibaqy5d7tgbiiyfa.b32.i2p" @@ -57,22 +57,18 @@ "clearnet": [ "https://piped.video", "https://piped.tokhmi.xyz", - "https://piped.moomoo.me", "https://piped.mha.fi", "https://watch.whatever.social", "https://piped.garudalinux.org", - "https://watch.leptons.xyz", + "https://efy.piped.pages.dev", "https://piped.lunar.icu", "https://piped.video", "https://yt.jae.fi", "https://il.ax", - "https://piped.esmailelbob.xyz", "https://piped.projectsegfau.lt", "https://piped.privacydev.net", - "https://piped.palveluntarjoaja.eu", "https://piped.smnz.de", "https://piped.adminforge.de", - "https://piped.qdi.fi", "https://piped.hostux.net", "https://pd.vern.cc", "https://piped.chauvet.pro" @@ -562,7 +558,6 @@ "searx": { "clearnet": [ "https://jsearch.pw", - "https://search.kvj.ovh", "https://search.stinpriza.org", "https://search.trom.tf", "https://searx.bissisoft.com", @@ -587,11 +582,9 @@ ], "tor": [ "http://3afisqjw2rxm6z7mmstyt5rx75qfqrgxnkzftknbp2vhipr2nrmrjdyd.onion", - "http://searchvrzxoqa4k76duqh4wtzpr553hfl53qpytclxf7zci53lwklfyd.onion", "http://z5vawdol25vrmorm4yydmohsd4u6rdoj2sylvoi3e3nqvxkvpqul7bqd.onion", "http://zbuc3bbzbfdqqo2x46repx2ddajbha6fpsjeeptjhhhhzji3zopxdqyd.onion", "http://f4qfqajszpx5b7itzxt6mb7kj4ktpgbdq7lq6xaiqyqx6a7de3epptad.onion", - "http://searx.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd.onion", "http://searxfilowxokbogygrigir4wqxfxqzuxofxgdon7dg6rsii4yxzytyd.onion", "http://searx.micohauwkjbyw5meacrb4ipicwvwg4xtzl7y7viv53kig2mdcsvwkyyd.onion" ], @@ -608,8 +601,8 @@ "https://darmarit.org/searx", "https://dynabyte.ca", "https://etsi.me", - "https://gsch.eu", "https://intelwinds.com", + "https://myprivatesrx.us", "https://northboot.xyz", "https://notsearch.uk", "https://ooglester.com", @@ -632,6 +625,7 @@ "https://search.disroot.org", "https://search.gcomm.ch", "https://search.kiwitalk.de", + "https://search.kvj.ovh", "https://search.leptons.xyz", "https://search.mdosch.de", "https://search.mpx.wtf", @@ -692,13 +686,16 @@ "http://4n53nafyi77iplnbrpmxnp3x4exbswwxigujaxy3b37fvr7bvlopxeyd.onion", "http://privateoz3u5utrimal2edr56j3r5caakektxxgixigdkycuxigvquid.onion", "http://searxyqdegtqksicnwpxa24ipnb2ylmp6iutnnwtazbhup4dit4eeyqd.onion", + "http://searchvrzxoqa4k76duqh4wtzpr553hfl53qpytclxf7zci53lwklfyd.onion", "http://gbat2pbpg7ys3fi3pbp64667tt5x66mg45xok35bxdw7v55brm7a27yd.onion", "http://qyyb5xsar7gp4q3agxnrxgajx4nnnihptqhmyee5nolidtkhxjks6ayd.onion", "http://searxdr3pqz4nydgnqocsia2xbywptxbkympa2emn7zlgggrir4bkfad.onion", + "http://searx.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd.onion", "http://searx.privpw3tndpkw6pnp3g727zfgfdzbu3k6a7chv226s3xymv2p4eiuqyd.onion", "http://rq2w52kyrif3xpfihkgjnhqm3a5aqhoikpv72z3drpjglfzc2wr5z4yd.onion", "http://fub6vgedgeadlu3ctskrpkcqjruh76tckwtj5swfhyblgml2tzgzckqd.onion/searx", - "http://searx3aolosaf3urwnhpynlhuokqsgz47si4pzz5hvb7uuzyjncl2tid.onion" + "http://searx3aolosaf3urwnhpynlhuokqsgz47si4pzz5hvb7uuzyjncl2tid.onion", + "https://lgmekfnpealdqhnctyg3p5fuelpdwnbqbwnl2ickpdoodzatzgz27ryd.onion" ], "i2p": [], "loki": [] @@ -715,7 +712,7 @@ "https://gowogle.voring.me", "https://whoogle.privacydev.net", "https://wg.vern.cc", - "https://www.indexia.gq", + "https://whoogle.hxvy0.gq", "https://whoogle.lunar.icu", "https://whoogle.rhyshl.live", "https://wgl.frail.duckdns.org" @@ -736,6 +733,7 @@ "https://search.femboy.hu", "https://lx.vern.cc", "https://librex.sesu.cc", + "https://librex.zzls.xyz", "https://librex.mikata.ru", "https://librex.terryiscool160.xyz", "https://librex.nekus.gay", @@ -757,13 +755,15 @@ "http://search.cepyxplublbyw2f4axy4pyztfbxmf63lrt2c7uwv6wl4iixz53czload.onion", "http://lx.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion", "http://librex.swxoebbpeqiiixyhbuh3vbw53pdrmtbiaj2sqveol6kkn5rpapfi4aad.onion", + "http://librex.zzlsghu6mvvwyy75mvga6gaf4znbp3erk5xwfzedb4gg6qqh2j6rlvid.onion", "http://f7ssz7l3biu4fugwctfpcx4txg5yq4gqhrt473ledsuc3ivtd3omniid.onion", "http://librex.n53wt4ivvfdfaqkwldgdzfsubszukie2an6auja6x2wp3e3oa7v2gqyd.onion", "http://5yblccekvswxl4n43bn5eg4pr7c4xygvu5lhhdb6ulzmislvahmhitad.onion" ], "i2p": [ "http://vernziqfqvweijfaacmwazohgpdo2bt2ib2jlupt2pwwu27bhgxq.b32.i2p", - "http://lqbchqljxiwl3bbjt4vqe76luovk5ly6khqhg7mt5qcqfn6e4sbq.b32.i2p" + "http://lqbchqljxiwl3bbjt4vqe76luovk5ly6khqhg7mt5qcqfn6e4sbq.b32.i2p", + "http://7huurwog32tny663wkglrhozfoyqyqmsuxjbd7dtudccx44awjda.b32.i2p" ], "loki": [] }, @@ -781,17 +781,20 @@ "https://rimgo.hostux.net", "https://ri.zzls.xyz", "https://rimgo.marcopisco.com", - "https://rimgo.lunar.icu" + "https://rimgo.lunar.icu", + "https://imgur.010032.xyz" ], "tor": [ "http://rimgo.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd.onion", "http://imgur.lpoaj7z2zkajuhgnlltpeqh3zyq7wk2iyeggqaduhgxhyajtdt2j7wad.onion", "http://rimgo.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion", "http://tdp6uqjtmok723suum5ms3jbquht6d7dssug4cgcxhfniatb25gcipad.onion", - "http://i.habeehrhadazsw3izbrbilqajalfyqqln54mrja3iwpqxgcuxnus7eid.onion" + "http://i.habeehrhadazsw3izbrbilqajalfyqqln54mrja3iwpqxgcuxnus7eid.onion", + "http://rimgo.zzlsghu6mvvwyy75mvga6gaf4znbp3erk5xwfzedb4gg6qqh2j6rlvid.onion" ], "i2p": [ - "rimgov7l2tqyrm5txrtvhtnfyrzkc5d7ipafofavchbnnyog4r3q.b32.i2p" + "rimgov7l2tqyrm5txrtvhtnfyrzkc5d7ipafofavchbnnyog4r3q.b32.i2p", + "p57356k2xwhxrg2lxrjajcftkrptv4zejeeblzfgkcvpzuetkz2a.b32.i2p" ], "loki": [] }, @@ -862,10 +865,10 @@ "https://breezewiki.com", "https://antifandom.com", "https://breezewiki.pussthecat.org", + "https://bw.projectsegfau.lt", "https://breeze.hostux.net", - "https://bw.us.projectsegfau.lt", - "https://bw.eu.projectsegfau.lt", "https://bw.artemislena.eu", + "https://breeze.777.tf", "https://breezewiki.esmailelbob.xyz" ], "tor": [], @@ -888,5 +891,52 @@ "tor": [], "i2p": [], "loki": [] + }, + "libMedium": { + "clearnet": [ + "https://libmedium.batsense.net", + "https://md.vern.cc" + ], + "tor": [ + "http://md.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion" + ], + "i2p": [ + "http://vernaqj2qr2pijpgvf3od6ssc3ulz3nv52gwr3hba5l6humuzmgq.b32.i2p" + ], + "loki": [] + }, + "dumb": { + "clearnet": [ + "https://dm.vern.cc", + "https://sing.whatever.social", + "https://dumb.lunar.icu", + "https://dumb.esmailelbob.xyz" + ], + "tor": [ + "http://dm.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion", + "http://dumb.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd.onion" + ], + "i2p": [ + "http://vernxpcpqi2y4uhu7to4rnjmyjjgzh3x3qxyzpmkhykefchkmleq.b32.i2p" + ], + "loki": [] + }, + "anonymousOverflow": { + "clearnet": [ + "https://code.whatever.social", + "https://overflow.777.tf", + "https://ao.vern.cc", + "https://overflow.smnz.de", + "https://anonymousoverflow.esmailelbob.xyz", + "https://overflow.lunar.icu" + ], + "tor": [ + "http://ao.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion", + "http://anonymousoverflow.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd.onion" + ], + "i2p": [ + "http://vernmzgraj6aaoafmehupvtkkynpaa67rxcdj2kinwiy6konn6rq.b32.i2p" + ], + "loki": [] } } \ No newline at end of file diff --git a/instances.py b/instances.py index aa4b395..59e25d8 100755 --- a/instances.py +++ b/instances.py @@ -98,22 +98,23 @@ def is_cloudflare(url): return False -def fetchCache(frontend, name): +def fetchCache(frontend): try: with open('./data.json') as file: mightyList[frontend] = json.load(file)[frontend] - print(Fore.YELLOW + 'Failed' + Style.RESET_ALL + ' to fetch ' + name) + print(Fore.YELLOW + 'Failed' + Style.RESET_ALL + ' to fetch ' + frontend) except Exception: - print(Fore.RED + 'Failed' + Style.RESET_ALL + ' to get cached ' + name) + print(Fore.RED + 'Failed' + Style.RESET_ALL + + ' to get cached ' + frontend) -def fetchFromFile(frontend, name): +def fetchFromFile(frontend): with open('./fixed/' + frontend + '.json') as file: mightyList[frontend] = json.load(file) - print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + name) + print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + frontend) -def fetchJsonList(frontend, name, url, urlItem, jsonObject): +def fetchJsonList(frontend, url, urlItem, jsonObject): try: r = requests.get(url) rJson = json.loads(r.text) @@ -150,13 +151,13 @@ def fetchJsonList(frontend, name, url, urlItem, jsonObject): _list['clearnet'].append(tmpItem) mightyList[frontend] = _list - print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + name) + print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + frontend) except Exception: - fetchCache(frontend, name) + fetchCache(frontend, frontend) logging.error(traceback.format_exc()) -def fetchRegexList(frontend, name, url, regex): +def fetchRegexList(frontend, url, regex): try: r = requests.get(url) _list = {} @@ -177,13 +178,13 @@ def fetchRegexList(frontend, name, url, regex): else: _list['clearnet'].append(item) mightyList[frontend] = _list - print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + name) + print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + frontend) except Exception: - fetchCache(frontend, name) + fetchCache(frontend, ) logging.error(traceback.format_exc()) -def fetchTextList(frontend, name, url, prepend): +def fetchTextList(frontend, url, prepend): try: _list = {} for network in networks: @@ -212,9 +213,9 @@ def fetchTextList(frontend, name, url, prepend): else: _list['clearnet'].append(item) mightyList[frontend] = _list - print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + name) + print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + frontend) except Exception: - fetchCache(frontend, name) + fetchCache(frontend, frontend) logging.error(traceback.format_exc()) @@ -276,62 +277,62 @@ def piped(): def pipedMaterial(): - fetchRegexList('pipedMaterial', 'Piped-Material', 'https://raw.githubusercontent.com/mmjee/Piped-Material/master/README.md', + fetchRegexList('pipedMaterial', 'https://raw.githubusercontent.com/mmjee/Piped-Material/master/README.md', r"\| (https?:\/{2}(?:\S+\.)+[a-zA-Z0-9]*) +\| Production") def cloudtube(): - fetchFromFile('cloudtube', 'Cloudtube') + fetchFromFile('cloudtube') def proxitok(): - fetchRegexList('proxiTok', 'ProxiTok', 'https://raw.githubusercontent.com/wiki/pablouser1/ProxiTok/Public-instances.md', + fetchRegexList('proxiTok', 'https://raw.githubusercontent.com/wiki/pablouser1/ProxiTok/Public-instances.md', r"\| \[.*\]\(([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)\)(?: \(Official\))? +\|(?:(?: [A-Z]*.*\|.*\|)|(?:$))") def send(): - fetchRegexList('send', 'Send', 'https://gitlab.com/timvisee/send-instances/-/raw/master/README.md', + fetchRegexList('send', 'https://gitlab.com/timvisee/send-instances/-/raw/master/README.md', r"- ([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z0-9]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)\)*\|*[A-Z]{0,}") def nitter(): - fetchRegexList('nitter', 'Nitter', 'https://raw.githubusercontent.com/wiki/zedeus/nitter/Instances.md', + fetchRegexList('nitter', 'https://raw.githubusercontent.com/wiki/zedeus/nitter/Instances.md', r"(?:(?:\| )|(?:- ))\[(?:(?:\S+\.)+[a-zA-Z0-9]+)\/?\]\((https?:\/{2}(?:\S+\.)+[a-zA-Z0-9]+)\/?\)(?:(?: (?:\((?:\S+ ?\S*)\) )? *\| [^❌]{1,4} +\|(?:(?:\n)|(?: ❌)|(?: ✅)|(?: ❓)|(?: \[)))|(?:\n))") def libreddit(): - fetchJsonList('libreddit', 'Libreddit', 'https://github.com/libreddit/libreddit-instances/raw/master/instances.json', + fetchJsonList('libreddit', 'https://github.com/libreddit/libreddit-instances/raw/master/instances.json', {'clearnet': 'url', 'tor': 'onion', 'i2p': 'i2p', 'loki': None}, True) def teddit(): - fetchJsonList('teddit', 'Teddit', 'https://codeberg.org/teddit/teddit/raw/branch/main/instances.json', + fetchJsonList('teddit', 'https://codeberg.org/teddit/teddit/raw/branch/main/instances.json', {'clearnet': 'url', 'tor': 'onion', 'i2p': 'i2p', 'loki': None}, False) def scribe(): - fetchJsonList('scribe', 'Scribe', - 'https://git.sr.ht/~edwardloveall/scribe/blob/main/docs/instances.json', None, False) + fetchJsonList( + 'scribe', 'https://git.sr.ht/~edwardloveall/scribe/blob/main/docs/instances.json', None, False) def quetre(): - fetchRegexList('quetre', 'Quetre', 'https://raw.githubusercontent.com/zyachel/quetre/main/README.md', + fetchRegexList('quetre', 'https://raw.githubusercontent.com/zyachel/quetre/main/README.md', r"\| \[.*\]\(([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z0-9]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)\)*\|*[A-Z]{0,}.*\|.*\|") def libremdb(): - fetchRegexList('libremdb', 'libremdb', 'https://raw.githubusercontent.com/zyachel/libremdb/main/README.md', + fetchRegexList('libremdb', 'https://raw.githubusercontent.com/zyachel/libremdb/main/README.md', r"\| \[.*\]\(([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z0-9]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)\)*\|*[A-Z]{0,}.*\|.*\|") def simplytranslate(): - fetchTextList('simplyTranslate', 'SimplyTranslate', {'clearnet': 'https://simple-web.org/instances/simplytranslate', 'tor': 'https://simple-web.org/instances/simplytranslate_onion', + fetchTextList('simplyTranslate', {'clearnet': 'https://simple-web.org/instances/simplytranslate', 'tor': 'https://simple-web.org/instances/simplytranslate_onion', 'i2p': 'https://simple-web.org/instances/simplytranslate_i2p', 'loki': 'https://simple-web.org/instances/simplytranslate_loki'}, {'clearnet': 'https://', 'tor': 'http://', 'i2p': 'http://', 'loki': 'http://'}) def linvgatranslate(): - fetchJsonList('lingva', 'LingvaTranslate', - 'https://raw.githubusercontent.com/TheDavidDelta/lingva-translate/main/instances.json', None, False) + fetchJsonList( + 'lingva', 'https://raw.githubusercontent.com/TheDavidDelta/lingva-translate/main/instances.json', None, False) def searx_searxng(): @@ -371,63 +372,78 @@ def searx_searxng(): def whoogle(): - fetchRegexList('whoogle', 'Whoogle', 'https://raw.githubusercontent.com/benbusby/whoogle-search/main/README.md', + fetchRegexList('whoogle', 'https://raw.githubusercontent.com/benbusby/whoogle-search/main/README.md', r"\| \[https?:\/{2}(?:[^\s\/]+\.)*(?:[^\s\/]+\.)+[a-zA-Z0-9]+\]\((https?:\/{2}(?:[^\s\/]+\.)*(?:[^\s\/]+\.)+[a-zA-Z0-9]+)\/?\) \| ") def librex(): - fetchJsonList('librex', 'LibreX', 'https://raw.githubusercontent.com/hnhx/librex/main/instances.json', + fetchJsonList('librex', 'https://raw.githubusercontent.com/hnhx/librex/main/instances.json', {'clearnet': 'clearnet', 'tor': 'tor', 'i2p': 'i2p', 'loki': None}, True) def rimgo(): - fetchJsonList('rimgo', 'rimgo', 'https://codeberg.org/video-prize-ranch/rimgo/raw/branch/main/instances.json', + fetchJsonList('rimgo', 'https://codeberg.org/video-prize-ranch/rimgo/raw/branch/main/instances.json', {'clearnet': 'url', 'tor': 'onion', 'i2p': 'i2p', 'loki': None}, False) def librarian(): - fetchJsonList('librarian', 'Librarian', - 'https://codeberg.org/librarian/librarian/raw/branch/main/instances.json', 'url', True) + fetchJsonList( + 'librarian', 'https://codeberg.org/librarian/librarian/raw/branch/main/instances.json', 'url', True) def beatbump(): - fetchFromFile('beatbump', 'Beatbump') + fetchFromFile('beatbump') def hyperpipe(): - fetchJsonList('hyperpipe', 'Hyperpipe', - 'https://codeberg.org/Hyperpipe/pages/raw/branch/main/api/frontend.json', 'url', False) + fetchJsonList( + 'hyperpipe', 'https://codeberg.org/Hyperpipe/pages/raw/branch/main/api/frontend.json', 'url', False) def facil(): - fetchFromFile('facil', 'FacilMap') + fetchFromFile('facil') def osm(): - fetchFromFile('osm', 'OpenStreetMap') + fetchFromFile('osm') def libreTranslate(): - fetchRegexList('libreTranslate', 'LibreTranslate', 'https://raw.githubusercontent.com/LibreTranslate/LibreTranslate/main/README.md', + fetchRegexList('libreTranslate', 'https://raw.githubusercontent.com/LibreTranslate/LibreTranslate/main/README.md', r"\[(?:[^\s\/]+\.)+[a-zA-Z0-9]+\]\((https?:\/{2}(?:[^\s\/]+\.)+[a-zA-Z0-9]+)\/?\)\|") def breezeWiki(): - fetchJsonList('breezeWiki', 'BreezeWiki', - 'https://docs.breezewiki.com/files/instances.json', 'instance', False) + fetchJsonList( + 'breezeWiki', 'https://docs.breezewiki.com/files/instances.json', 'instance', False) def privateBin(): - fetchJsonList('privateBin', 'PrivateBin', - 'https://privatebin.info/directory/api?top=100&https_redirect=true&min_rating=A&csp_header=true&min_uptime=100&attachments=true', 'url', False) + fetchJsonList('privateBin', 'https://privatebin.info/directory/api?top=100&https_redirect=true&min_rating=A&csp_header=true&min_uptime=100&attachments=true', 'url', False) def neuters(): - fetchFromFile('neuters', 'Neuters') + fetchFromFile('neuters') + + +def libMedium(): + fetchRegexList('libMedium', 'https://raw.githubusercontent.com/realaravinth/libmedium/master/README.md', + r"\| (https?:\/{2}(?:[^\s\/]+\.)+[a-zA-Z0-9]+)\/? +\|") + + +def dumb(): + fetchRegexList('dumb', 'https://raw.githubusercontent.com/rramiachraf/dumb/main/README.md', + r"\| <(https?:\/{2}(?:[^\s\/]+\.)+[a-zA-Z0-9]+)\/?> +\|") def ruralDictionary(): - fetchJsonList('ruralDictionary', 'Rural Dictionary', 'https://codeberg.org/zortazert/rural-dictionary/raw/branch/master/instances.json', 'clearnet', False) + fetchJsonList('ruralDictionary', + 'https://codeberg.org/zortazert/rural-dictionary/raw/branch/master/instances.json', 'clearnet', False) + + +def anonymousOverflow(): + fetchRegexList('anonymousOverflow', 'https://raw.githubusercontent.com/httpjamesm/AnonymousOverflow/main/README.md', + r"\| \[(?:[^\s\/]+\.)+[a-zA-Z0-9]+\]\((https?:\/{2}(?:[^\s\/]+\.)+[a-zA-Z0-9]+)\/?\) +\|") def isValid(url): # This code is contributed by avanitrachhadiya2155 @@ -466,6 +482,9 @@ breezeWiki() # privateBin() neuters() ruralDictionary() +libMedium() +dumb() +anonymousOverflow() mightyList = filterLastSlash(mightyList) mightyList = idnaEncode(mightyList)