Initial commit

This commit is contained in:
Joe
2026-06-26 14:12:10 +02:00
commit 12518b259c
5258 changed files with 732924 additions and 0 deletions
Vendored
BIN
View File
Binary file not shown.
+688
View File
@@ -0,0 +1,688 @@
[
{
"name": "ats.io",
"status": "done",
"data": {
"title": "Best Online Casinos USA (2026): List of Real Money Gambling Sites",
"casinos": [
{
"pos": 1,
"name": "ATS.io",
"link": "https://cookiedatabase.org"
},
{
"pos": 2,
"name": "U.S. Online s",
"link": "https://www.google.com"
},
{
"pos": 3,
"name": "ATS.io",
"link": "https://cookiedatabase.org"
},
{
"pos": 4,
"name": "ATS.io",
"link": "https://www.google.com"
},
{
"pos": 5,
"name": "ATS.io",
"link": "https://www.google.com"
},
{
"pos": 6,
"name": "U.S. Online s",
"link": "https://www.google.com"
},
{
"pos": 7,
"name": "BetMGM Online",
"link": "https://www.google.com"
},
{
"pos": 8,
"name": "Caesars Palace Online",
"link": "https://www.google.com"
},
{
"pos": 9,
"name": "DraftKings Online",
"link": "https://www.google.com"
},
{
"pos": 10,
"name": "Golden Nugget Online",
"link": "https://www.google.com"
},
{
"pos": 11,
"name": "bet365 Online",
"link": "https://www.google.com"
},
{
"pos": 12,
"name": "FanDuel Online",
"link": "https://www.google.com"
},
{
"pos": 13,
"name": "BetRivers Online",
"link": "https://www.google.com"
},
{
"pos": 14,
"name": "Horseshoe Online",
"link": "https://www.google.com"
},
{
"pos": 15,
"name": "Fanatics Online",
"link": "https://www.google.com"
},
{
"pos": 16,
"name": "Monopoly Online",
"link": "https://www.google.com"
},
{
"pos": 17,
"name": "ATS.io",
"link": "https://www.facebook.com"
},
{
"pos": 18,
"name": "DMCA Protected",
"link": "https://www.facebook.com"
}
]
}
},
{
"name": "best-casino-directory.com",
"status": "done",
"data": {
"title": "Best Casino Directory - Gambling's News and Guides",
"casinos": [
{
"pos": 1,
"name": "Best Directory",
"link": "https://kiffslots.co.za"
},
{
"pos": 2,
"name": "Best Bonus",
"link": "https://kiffslots.co.za"
},
{
"pos": 3,
"name": "DMCA.com Protection",
"link": "https://certify.gpwa.org"
}
]
}
},
{
"name": "best-casino-reviews.com",
"status": "done",
"data": {
"title": "Best Online Casino Reviews & Rankings 2026 | Best-Casino-Reviews",
"casinos": []
}
},
{
"name": "best-casinos.net",
"status": "done",
"data": {
"title": "Philippines Online Casino Guide | .Games",
"casinos": []
}
},
{
"name": "best-online-casinos.org",
"status": "done",
"data": {
"title": "Best Online Casinos - We Rate the Top Casinos",
"casinos": [
{
"pos": 1,
"name": "Malta",
"link": "https://www.inclave.org"
},
{
"pos": 2,
"name": "Malta",
"link": "https://www.inclave.org"
},
{
"pos": 3,
"name": "Prima Play",
"link": "https://www.inclave.org"
},
{
"pos": 4,
"name": "Cosmo",
"link": "https://www.inclave.org"
},
{
"pos": 5,
"name": "DuckyLuck",
"link": "https://www.inclave.org"
}
]
}
},
{
"name": "bestpokiesau.com",
"status": "done",
"data": {
"title": "Best Online Casinos 2026 Top Australian Pokies for Real Money",
"casinos": [
{
"pos": 1,
"name": "David Turner",
"link": "https://winshark.link"
},
{
"pos": 2,
"name": "Winshark",
"link": "https://winshark.link"
},
{
"pos": 3,
"name": "Wild Tokyo",
"link": "https://gowildtokyo.com"
},
{
"pos": 4,
"name": "Stonevegas",
"link": "https://stnvgs.plfexa.com"
},
{
"pos": 5,
"name": "SkyCrown",
"link": "https://skycrownlink.com"
},
{
"pos": 6,
"name": "Slotsgem",
"link": "https://top.aglobally.com"
},
{
"pos": 7,
"name": "HellSpin",
"link": "https://top.aglobally.com"
},
{
"pos": 8,
"name": "Best Online s 2026",
"link": "https://www.gamstop.co.uk"
}
]
}
},
{
"name": "betanews.com",
"status": "done",
"data": {
"title": "Best Online Casinos That Pay Real Money - March 2026 Update",
"casinos": [
{
"pos": 1,
"name": "Super Slots",
"link": "http://www.gamblersanonymous.org"
},
{
"pos": 2,
"name": "Super Slots",
"link": "http://www.gamblersanonymous.org"
},
{
"pos": 3,
"name": "Ignition",
"link": "http://www.gamblersanonymous.org"
},
{
"pos": 4,
"name": "slots lv",
"link": "http://www.gamblersanonymous.org"
},
{
"pos": 5,
"name": "Cafe",
"link": "http://www.gamblersanonymous.org"
},
{
"pos": 6,
"name": "Mystake",
"link": "http://www.gamblersanonymous.org"
}
]
}
},
{
"name": "bettergambling.ie",
"status": "done",
"data": {
"title": "All Online Casino Sites Ireland 2026 | BetterGambling.ie",
"casinos": [
{
"pos": 1,
"name": "Vegasino IE",
"link": "https://bgredir.com"
},
{
"pos": 2,
"name": "Hercules IE",
"link": "https://bgredir.com"
},
{
"pos": 3,
"name": "Ivibet IE",
"link": "https://bgredir.com"
},
{
"pos": 4,
"name": "Coinsgame IE",
"link": "https://bgredir.com"
},
{
"pos": 5,
"name": "Slotozen IE",
"link": "https://bgredir.com"
},
{
"pos": 6,
"name": "Spinoloco IE",
"link": "https://bgredir.com"
},
{
"pos": 7,
"name": "Gomblingo IE",
"link": "https://bgredir.com"
},
{
"pos": 8,
"name": "Theclubhouse IE",
"link": "https://bgredir.com"
},
{
"pos": 9,
"name": "Hellspin IE",
"link": "https://bgredir.com"
},
{
"pos": 10,
"name": "Midnite IE",
"link": "https://bgredir.com"
}
]
}
},
{
"name": "bojoko.ca",
"status": "done",
"data": {
"title": "The Best Casino Sites 2026 - Top 100 Online Casinos in Canada",
"casinos": [
{
"pos": 1,
"name": "UK",
"link": "https://bojoko.com"
},
{
"pos": 2,
"name": "Mr Vegas cover",
"link": "https://trk.affiliates.mrvegas.com"
},
{
"pos": 3,
"name": "Videoslots.com cover",
"link": "https://trk.affiliates.videoslots.com"
},
{
"pos": 4,
"name": "PlayGrand cover",
"link": "https://welcome.playgrandaffiliates.com"
},
{
"pos": 5,
"name": "Corgibet cover",
"link": "https://corgibet.com"
},
{
"pos": 6,
"name": "Bluffbet cover",
"link": "https://record.gb1aff.com"
},
{
"pos": 7,
"name": "Bulletz cover",
"link": "https://record.kaboom.partners"
},
{
"pos": 8,
"name": "Wildz cover",
"link": "https://go.wildzaffiliates.com"
},
{
"pos": 9,
"name": "Sportuna cover",
"link": "https://sprt.pclira.com"
},
{
"pos": 10,
"name": "Nine cover",
"link": "https://www.ontrklnk.com"
},
{
"pos": 11,
"name": "N1 cover",
"link": "https://partnerscontents.com"
},
{
"pos": 12,
"name": "Players Palace cover",
"link": "https://iredirect.net"
}
]
}
},
{
"name": "cardmates.co.uk",
"status": "done",
"data": {
"title": "Best Online Casinos UK 2026 | Safe & Trusted UKGC Casino Sites",
"casinos": [
{
"pos": 1,
"name": "Oksana Kumetska",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 2,
"name": "Cardmates",
"link": "https://cardmates.net"
},
{
"pos": 3,
"name": "Best Online Sites",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 4,
"name": "New Online Sites",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 5,
"name": "Best Mobile Sites",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 6,
"name": "Best Live Sites",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 7,
"name": "Jackpot Mobile",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 8,
"name": "visa",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 9,
"name": "mastercard",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 10,
"name": "paypal",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 11,
"name": "googlepay",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 12,
"name": "Mr Vegas",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 13,
"name": "visa",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 14,
"name": "mastercard",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 15,
"name": "applepay",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 16,
"name": "paypal",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 17,
"name": "Jeffbet",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 18,
"name": "visa",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 19,
"name": "mastercard",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 20,
"name": "applepay",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 21,
"name": "neteller",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 22,
"name": "PlayUK",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 23,
"name": "visa",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 24,
"name": "mastercard",
"link": "https://www.gamblingcommission.gov.uk"
},
{
"pos": 25,
"name": "paypal",
"link": "https://www.gamblingcommission.gov.uk"
}
]
}
},
{
"name": "casino.guru",
"status": "done",
"data": {
"title": "Online Casino Reviews by Experts and Players | Casino Guru",
"casinos": [
{
"pos": 1,
"name": "Online Reviews by Experts and Players | Guru",
"link": "https://www.facebook.com"
},
{
"pos": 2,
"name": "menu-img-s.png",
"link": "https://www.facebook.com"
},
{
"pos": 3,
"name": "null",
"link": "https://translate.google.com"
},
{
"pos": 4,
"name": "silver",
"link": "https://translate.google.com"
},
{
"pos": 5,
"name": "N1",
"link": "https://translate.google.com"
},
{
"pos": 6,
"name": "bronze",
"link": "https://translate.google.com"
},
{
"pos": 7,
"name": "Andy Jessop",
"link": "https://www.linkedin.com"
},
{
"pos": 8,
"name": "Matej Novota",
"link": "https://www.linkedin.com"
}
]
}
},
{
"name": "casinogrounds.com",
"status": "done",
"data": {
"title": "Online Casino Reviews by Professional Gamblers (Updated)",
"casinos": [
{
"pos": 1,
"name": "CG",
"link": "https://www.youtube.com"
},
{
"pos": 2,
"name": "Youtube",
"link": "https://www.youtube.com"
},
{
"pos": 3,
"name": "Malta Flag",
"link": "https://streamgrounds.com"
},
{
"pos": 4,
"name": "wild-fortune",
"link": "https://streamgrounds.com"
},
{
"pos": 5,
"name": "Skrill",
"link": "https://streamgrounds.com"
},
{
"pos": 6,
"name": "leovegas",
"link": "https://streamgrounds.com"
},
{
"pos": 7,
"name": "royal-panda",
"link": "https://streamgrounds.com"
},
{
"pos": 8,
"name": "marvel",
"link": "https://streamgrounds.com"
},
{
"pos": 9,
"name": "thrill",
"link": "https://streamgrounds.com"
},
{
"pos": 10,
"name": "Ripple",
"link": "https://streamgrounds.com"
},
{
"pos": 11,
"name": "bombastic",
"link": "https://streamgrounds.com"
},
{
"pos": 12,
"name": "Bitcoin Cash",
"link": "https://streamgrounds.com"
},
{
"pos": 13,
"name": "playzee",
"link": "https://streamgrounds.com"
},
{
"pos": 14,
"name": "spinyoo",
"link": "https://streamgrounds.com"
},
{
"pos": 15,
"name": "ultra-",
"link": "https://streamgrounds.com"
},
{
"pos": 16,
"name": "spin-samurai",
"link": "https://streamgrounds.com"
},
{
"pos": 17,
"name": "betsio-com",
"link": "https://streamgrounds.com"
},
{
"pos": 18,
"name": "shuffle",
"link": "https://streamgrounds.com"
},
{
"pos": 19,
"name": "riviera",
"link": "https://streamgrounds.com"
},
{
"pos": 20,
"name": "Interac",
"link": "https://streamgrounds.com"
},
{
"pos": 21,
"name": "lucky-hunter",
"link": "https://streamgrounds.com"
}
]
}
}
]
+1
View File
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
{"seedsDone":22,"allSites":[{"url":"https://cdn.speedcurve.com","title":"cdn.speedcurve.com","domain":"cdn.speedcurve.com","isAffiliateCandidate":false},{"url":"https://assets.adobedtm.com","title":"assets.adobedtm.com","domain":"assets.adobedtm.com","isAffiliateCandidate":false},{"url":"https://googletagmanager.com","title":"googletagmanager.com","domain":"googletagmanager.com","isAffiliateCandidate":false},{"url":"https://objects.kaxmedia.com","title":"objects.kaxmedia.com","domain":"objects.kaxmedia.com","isAffiliateCandidate":false},{"url":"https://kazinoazov.net","title":"kazinoazov.net","domain":"kazinoazov.net","isAffiliateCandidate":false},{"url":"https://kasinoguru-bg.com","title":"kasinoguru-bg.com","domain":"kasinoguru-bg.com","isAffiliateCandidate":false},{"url":"https://kasinoguru-cz.com","title":"kasinoguru-cz.com","domain":"kasinoguru-cz.com","isAffiliateCandidate":false},{"url":"https://gmpg.org","title":"gmpg.org","domain":"gmpg.org","isAffiliateCandidate":false},{"url":"https://cloudflare.com","title":"cloudflare.com","domain":"cloudflare.com","isAffiliateCandidate":false},{"url":"https://open.spotify.com","title":"open.spotify.com","domain":"open.spotify.com","isAffiliateCandidate":false}],"verified":[{"url":"https://www.casino.org/","title":"Casino.org","domain":"casino.org","casinoLinks":0},{"url":"https://www.casinoreviews.net/","title":"CasinoReviews.net","domain":"casinoreviews.net","casinoLinks":0},{"url":"https://www.gambling.com/","title":"Gambling.com","domain":"gambling.com","casinoLinks":0},{"url":"https://casino.guru/","title":"Casino Guru","domain":"casino.guru","casinoLinks":0},{"url":"https://chipy.com/","title":"Chipy","domain":"chipy.com","casinoLinks":0},{"url":"https://www.racingpost.com/online-casino/best-sites/","title":"Racing Post Casinos","domain":"racingpost.com","casinoLinks":0},{"url":"https://www.betting.co.uk/casino/","title":"Betting.co.uk Casino","domain":"betting.co.uk","casinoLinks":0},{"url":"https://www.pokerlistings.com/casino-sites","title":"PokerListings","domain":"pokerlistings.com","casinoLinks":0},{"url":"https://slotcatalog.com/en/best-online-casinos","title":"SlotCatalog","domain":"slotcatalog.com","casinoLinks":0},{"url":"https://www.whichbingo.co.uk/casino-sites/","title":"WhichBingo Casino","domain":"whichbingo.co.uk","casinoLinks":0},{"url":"https://www.livecasinocomparer.com/online-casino/","title":"LiveCasinoComparer","domain":"livecasinocomparer.com","casinoLinks":0},{"url":"https://first.com/casino/best-casinos","title":"FIRST.com Casinos","domain":"first.com","casinoLinks":0},{"url":"https://www.oddschecker.com/casino-bonus","title":"Oddschecker Casino","domain":"oddschecker.com","casinoLinks":0},{"url":"https://next.io/online-casinos-uk/","title":"NEXT.io UK Casinos","domain":"next.io","casinoLinks":0},{"url":"https://www.askgamblers.com/online-casinos/reviews","title":"AskGamblers","domain":"askgamblers.com","casinoLinks":0},{"url":"https://www.freebets.com/casino/","title":"FreeBets Casino","domain":"freebets.com","casinoLinks":0},{"url":"https://www.gamblinginsider.com/uk/online-casinos","title":"GamblingInsider UK","domain":"gamblinginsider.com","casinoLinks":0},{"url":"https://gg.co.uk/online-casinos/top-20/","title":"GG.co.uk Top 20","domain":"gg.co.uk","casinoLinks":0}]}
+1
View File
File diff suppressed because one or more lines are too long
+1
View File
File diff suppressed because one or more lines are too long
+1
View File
File diff suppressed because one or more lines are too long
+172
View File
@@ -0,0 +1,172 @@
[
"focus-asia.com",
"rated-casino.com",
"siege.gg",
"slotcatalog.com",
"top-casino-reviews.com",
"tribuna.com",
"wizardofodds.com",
"www.glasgowtimes.co.uk",
"www.strafe.com",
"www.top10casinos.com",
"www.whichbingo.co.uk",
"dappradar.com",
"esports-news.co.uk",
"forum.mr-gamble.com",
"onlinegamblingme.com",
"safe-casinos.net",
"top-casinos.com",
"www.gambling.com",
"www.sportsbookreview.com",
"best-casino-reviews.com",
"best-online-casinos.org",
"bestpokiesau.com",
"bojoko.ca",
"casinologia.com",
"europeangaming.eu",
"first.com",
"gamezinger.com",
"getb8.us",
"gg.co.uk",
"licensed-online-casinos.com",
"sigma.world",
"slotsspot.com",
"top-casinoreviews.com",
"trusted-casino-list.com",
"trusted-casino.com",
"www.betting.co.uk",
"www.casino.us",
"www.legalsportsreport.com",
"www.profitduel.com",
"www.racingpost.com",
"www.sportsline.com",
"ats.io",
"best-casino-directory.com",
"betanews.com",
"casinogrounds.com",
"esportsinsider.com",
"justgamblers.com",
"muddyrivernews.com",
"www.askgamblers.com",
"www.businessworld.ie",
"www.similarweb.com",
"best-casinos.net",
"cardmates.co.uk",
"casino.guru",
"casinoreviews.com",
"chipy.com",
"comparasino.com",
"gamingamerica.com",
"lcb.org",
"legal-online-casinos.com",
"mega-casinos.com",
"mrq.com",
"next.io",
"northeasttimes.com",
"pokerfuse.com",
"pokie.inc",
"pro-casinos.com",
"rg.org",
"rsrglobal.org",
"thegilbreths.com",
"timesofmalta.com",
"top-10-casinos.com",
"top-4-casinos.com",
"top-casino-directory.com",
"top-casino-list.com",
"top-casino.info",
"top-casino.net",
"top-casinos.org",
"top-online-casinos.com",
"top.michigancasinosites.org",
"trusted-online-casinos.org",
"verified-casinos.com",
"wikibingo.co.uk",
"www.actionnetwork.com",
"www.baseballamerica.com",
"www.bitdegree.org",
"www.blackjackreview.com",
"www.bonus.com",
"www.bonusfinder.com",
"www.bookmakersreview.com",
"www.businesstoday.com.mt",
"www.cardplayer.com",
"www.casino.org",
"www.casinomeister.com",
"www.casinoreviews.net",
"www.covers.com",
"www.fqmagazine.co.uk",
"www.freebets.com",
"www.freep.com",
"www.gameshub.com",
"www.gamesreviews.com",
"www.ginx.tv",
"www.hltv.org",
"www.livecasinocomparer.com",
"www.maltatoday.com.mt",
"www.metropolitancasinos.com",
"www.oddschecker.com",
"www.pennlive.com",
"www.playmichigan.com",
"www.pokernews.com",
"www.pokerology.com",
"www.pokerstrategy.com",
"www.slotstemple.com",
"www.thelines.com",
"www.thesportsgeek.com",
"www.trustpilot.com",
"www.vegasinsider.com",
"bettergambling.ie",
"mr-gamble.com",
"safe-casino.org",
"theplaybookusa.com",
"deadspin.com",
"exclusive-casino.net",
"exclusive-casino.org",
"fast-casino.com",
"fast-casinos.com",
"fast-casinos.info",
"fast-casinos.net",
"fast-casinos.org",
"getbets.us",
"globallawexperts.com",
"igamingfuture.com",
"legal-casino.com",
"legal-casino.net",
"legal-casinos.net",
"mega-casino.info",
"mega-casino.net",
"mega-casino.org",
"premium-casinos.com",
"safe-casino.com",
"safe-casino.net",
"safe-casinos.info",
"super-casino.net",
"super-casino.org",
"super-casinos.net",
"toomaisquare.co.uk",
"trusted-casinos.net",
"ultra-casino.com",
"ultra-casino.info",
"ultra-casino.net",
"ultra-casino.org",
"ultra-casinos.com",
"www.al.com",
"www.bettingusa.com",
"www.betvictor.com",
"www.casinorating.com",
"www.casinos.com",
"www.casinoslists.com",
"www.casinovendors.com",
"www.gamblingnerd.com",
"www.gamblingsite.com",
"www.gamblingsites.com",
"www.gamingtoday.com",
"www.metrotimes.com",
"www.mlive.com",
"www.mrgreen.com",
"www.pokerlistings.com",
"www.pokertube.com",
"www.rotowire.com",
"www.slotsup.com"
]
+271
View File
@@ -0,0 +1,271 @@
{
"collected": [
{
"url": "https://timesofmalta.com/article/10-best-online-casino-sites-malta-a2.1108064",
"title": "10 best online casino sites in Malta",
"domain": "timesofmalta.com"
},
{
"url": "https://www.freep.com/story/sports/best-online-casinos-for-real-money/86800526007/",
"title": "Best online casinos for real money in the U.S. (June 2026)",
"domain": "freep.com"
},
{
"url": "https://casino.guru/casino-reviews",
"title": "Online Casino Reviews by Experts and Players",
"domain": "casino.guru"
},
{
"url": "https://www.gamingtoday.com/",
"title": "Gaming Today | Americas Home for Gambling News & Reviews",
"domain": "gamingtoday.com"
},
{
"url": "https://www.casino.org/reviews/",
"title": "100% Independent & Trusted Online Casino Reviews (2026)",
"domain": "casino.org"
},
{
"url": "https://siege.gg/news/the-top-5-best-casino-review-sites-you-can-trust",
"title": "The Top 5 Best Casino Review Sites You Can Trust - SiegeGG",
"domain": "siege.gg"
},
{
"url": "https://www.askgamblers.com/online-casinos/reviews",
"title": "Trusted Online Casino Reviews & Ratings ✔️ (2026)",
"domain": "askgamblers.com"
},
{
"url": "https://www.sportsline.com/casinos/",
"title": "Best online casinos for real money: Picking the top online casino for 2026",
"domain": "sportsline.com"
},
{
"url": "https://www.al.com/casinos/real-money-casinos/",
"title": "The best online casinos for real money in the U.S. for 2026",
"domain": "al.com"
},
{
"url": "https://www.pokerlistings.com/casino-sites",
"title": "Best Online Casino Sites Reviews (June 2026) Top Real ...",
"domain": "pokerlistings.com"
},
{
"url": "https://casinogrounds.com/casinos/",
"title": "Online Casino Reviews by Professional Gamblers (Updated)",
"domain": "casinogrounds.com"
},
{
"url": "https://mrq.com/",
"title": "Play the best UK online casino games today at MrQ",
"domain": "mrq.com"
},
{
"url": "https://www.quora.com/Which-is-the-most-trusted-online-casino-review-site",
"title": "Which is the most trusted online casino review site? - Quora",
"domain": "quora.com"
},
{
"url": "https://chipy.com/casinos",
"title": "Authentic Online Casino Reviews by Real Players ⭐ - Chipy.com",
"domain": "chipy.com"
},
{
"url": "https://www.casinomeister.com/online-casinos/reviews/",
"title": "Bluntly Honest Online Casino Reviews (2026) - Casinomeister",
"domain": "casinomeister.com"
},
{
"url": "https://www.oddschecker.com/us/casino",
"title": "Best US Online Casino Bonuses: Claim $10k+ of Sign up Bonuses",
"domain": "oddschecker.com"
},
{
"url": "https://best.unitestatesonlinecasino.net/",
"title": "Best Online Casino for Real Money & Top Offshore Casinos 2026",
"domain": "best.unitestatesonlinecasino.net"
},
{
"url": "https://wizardofodds.com/online-casinos/reviews/",
"title": "Best Online Casinos: #1 List of Reviewed & Rated Operators! 2026 (1268 Reviewed)",
"domain": "wizardofodds.com"
},
{
"url": "https://www.profitduel.com/casino-reviews",
"title": "Casino Reviews U.S. | Top 38 Online Casinos Ranked | ProfitDuel",
"domain": "profitduel.com"
},
{
"url": "https://www.glasgowtimes.co.uk/news/25703087.top-six-best-online-casino-review-sites/",
"title": "Top six best online casino review sites | Glasgow Times",
"domain": "glasgowtimes.co.uk"
},
{
"url": "https://gamingamerica.com/online-casinos",
"title": "Best Real Money Online Casinos (New Casinos Reviewed in June 2026)",
"domain": "gamingamerica.com"
},
{
"url": "https://www.betvictor.com/en-gb/casino",
"title": "Play Online Casino Games at BetVictor's UK Casino Site",
"domain": "betvictor.com"
},
{
"url": "https://europeangaming.eu/portal/best-online-casinos-europe/",
"title": "Best Online Casinos Europe 2026: Top 15 EU Casino Sites",
"domain": "europeangaming.eu"
},
{
"url": "https://www.mrgreen.com/",
"title": "Mr Green Online Casino Award-Winning Slots & Big Jackpots",
"domain": "mrgreen.com"
},
{
"url": "https://www.gamblingsites.com/",
"title": "Best Online Gambling Sites in 2026 - Ranked by Real Players",
"domain": "gamblingsites.com"
},
{
"url": "https://www.casinos.com/best-sites",
"title": "What makes the best online casino sites 'the best'?",
"domain": "casinos.com"
},
{
"url": "https://www.gamblinginsider.com/us/online-casinos",
"title": "Best Real Money Online Casinos in the US in 2026 - Gambling Insider",
"domain": "gamblinginsider.com"
},
{
"url": "https://www.actionnetwork.com/casino",
"title": "Best U.S. Real Money Online Casinos - December 2023",
"domain": "actionnetwork.com"
},
{
"url": "https://www.baseballamerica.com/stories/best-payout-online-casinos/",
"title": "15 Best Payout Online Casinos 2026: High RTP Sites & Games",
"domain": "baseballamerica.com"
},
{
"url": "https://www.mga.org.mt/",
"title": "Malta Gaming Authority: Home",
"domain": "mga.org.mt"
},
{
"url": "https://www.rotowire.com/betting/casinos",
"title": "Best Online Casinos Guide For Real Money June 2026 | RotoWire",
"domain": "rotowire.com"
},
{
"url": "https://www.gambling.com/us/online-casinos",
"title": "Best Real Money Online Casinos in the US (June 2026)",
"domain": "gambling.com"
},
{
"url": "https://www.similarweb.com/top-websites/gambling/casinos/",
"title": "Top Casinos Websites Ranking | Similarweb",
"domain": "similarweb.com"
},
{
"url": "https://www.cardplayer.com/online-casinos",
"title": "Best Real Money Online Casinos in the US (June 2026 )",
"domain": "cardplayer.com"
},
{
"url": "https://www.metrotimes.com/discover/best-gambling-sites-38226192/",
"title": "Best Gambling Sites That Pay Out Real Money in May, 2026",
"domain": "metrotimes.com"
},
{
"url": "https://lcb.org/",
"title": "3669 Online Casinos Reviewed with 8681 Bonuses ranked by Game",
"domain": "lcb.org"
},
{
"url": "https://comparasino.com/",
"title": "Comparasino | Less Searching, More Playing",
"domain": "comparasino.com"
},
{
"url": "https://mr-gamble.com/en/online-casino/",
"title": "Compare Online Casinos 2026 — Compare Gambling Sites",
"domain": "mr-gamble.com"
},
{
"url": "https://www.vegasinsider.com/casinos/bonuses/",
"title": "Best Online Casino Bonuses 2026 | Top Signup Offers",
"domain": "vegasinsider.com"
},
{
"url": "https://rg.org/casinos",
"title": "Best Real Money Online Casinos June 2026: All Legal States - RG.org",
"domain": "rg.org"
},
{
"url": "https://www.hltv.org/betting/online-casinos",
"title": "Best Online Casino Sites June 2026 | HLTV.org",
"domain": "hltv.org"
},
{
"url": "https://www.bonusfinder.com/",
"title": "Compare Best Casino Bonuses and Latest Offers | BonusFinder US",
"domain": "bonusfinder.com"
},
{
"url": "https://www.pokerstrategy.com/online-casinos/",
"title": "Top Online Casinos for Real Money in the USA 2026",
"domain": "pokerstrategy.com"
},
{
"url": "https://www.pennlive.com/online-casinos/2026/03/best-real-money-online-casino-bonuses-fanatics-casino-promo-code-vs-betparx-casino-promo-code-pennlive.html",
"title": "Online Casino Bonus Comparison: Fanatics vs. betPARX + ...",
"domain": "pennlive.com"
},
{
"url": "https://www.bonus.com/",
"title": "Compare Top Gambling Sites and Latest Offers | Bonus.com",
"domain": "bonus.com"
},
{
"url": "https://pokerfuse.com/online-casinos/bonuses/",
"title": "Where to Play: Comparing the Best US Online Casino Bonuses 2026 | Pokerfuse",
"domain": "pokerfuse.com"
},
{
"url": "https://esports-news.co.uk/gambling-sites/",
"title": "Best Gambling Websites in 2026 - Top 10 Online Casinos UK",
"domain": "esports-news.co.uk"
},
{
"url": "https://next.io/sweepstakes-casinos-us/log-in-bonus/",
"title": "US Sweepstakes Casino Log-In Bonus List 2026: Claim Daily ...",
"domain": "next.io"
},
{
"url": "https://igamingfuture.com/sweepstakes-casinos/promo-codes/no-deposit-bonus/",
"title": "Sweepstakes Casino No Deposit Bonuses for June 2026",
"domain": "igamingfuture.com"
},
{
"url": "https://www.businesstoday.com.mt/gaming/gaming/2871/best_online_casinos_in_malta_for_specific_player_types",
"title": "Best Online Casinos in Malta for Specific Player Types",
"domain": "businesstoday.com.mt"
}
],
"verified": [
{
"url": "https://casino.guru/casino-reviews",
"title": "Online Casino Reviews by Experts and Players",
"domain": "casino.guru",
"casinoLinks": 11
},
{
"url": "https://wizardofodds.com/online-casinos/reviews/",
"title": "Best Online Casinos: #1 List of Reviewed & Rated Operators! 2026 (1268 Reviewed)",
"domain": "wizardofodds.com",
"casinoLinks": 8
}
],
"phase": "done",
"lastBand": 0,
"lastPage": 16
}
+9203
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+187
View File
@@ -0,0 +1,187 @@
# Casino Affiliate Crawler
Headless browser crawler that scrapes casino affiliate ranking pages, stores extracted data in PostgreSQL, and provides a React backoffice dashboard for viewing results.
## Architecture
```
crawler/ # Backend (Node.js / Express)
├── src/
│ ├── app.js # Express server entry point
│ ├── setup-db.js # Database initialisation script
│ ├── db.js # PostgreSQL pool config
│ ├── middleware/auth.js # JWT authentication middleware
│ ├── routes/
│ │ ├── auth.js # Login, register, profile endpoints
│ │ └── crawler.js # Crawl data & trigger endpoints
│ └── services/
│ ├── crawler.js # Puppeteer crawl + DOM extraction
│ └── scheduler.js # Periodic crawl job (every hour)
├── screenshots/ # Full-page screenshots per crawl
└── package.json
casino-dashboard/ # Frontend (React / Vite)
├── src/
│ ├── api.js # Axios client + auth helpers
│ ├── App.jsx # Router + AuthProvider wrapper
│ └── components/
│ ├── Login.jsx # Sign-in form with JWT
│ ├── Dashboard.jsx # Crawl history list + run button
│ ├── CrawlDetail.jsx # Casino table, screenshot viewer
│ └── Sidebar.jsx # Navigation shell
└── package.json
```
## Prerequisites
- **Node.js** 18+
- **Google Chrome** installed on the system
- **PostgreSQL** reachable at `192.168.21.197:5432` with user `postgres`
## Quick Start
### 1. Install dependencies
```bash
# Backend
cd crawler
npm install
# Frontend
cd casino-dashboard
npm install
```
### 2. Initialise the database
```bash
cd ../
node src/setup-db.js
```
This creates the `casino_crawler` database and tables (`crawls`, `casinos`, `users`). A default admin user is seeded:
| Username | Password |
|----------|----------|
| `admin` | `admin123` |
### 3. Start both servers
```bash
# Terminal 1 Backend
cd crawler
npm start
# Terminal 2 Frontend
cd casino-dashboard
npm run dev
```
- **Backend API**: http://localhost:3001
- **Frontend Dashboard**: http://localhost:5173
- First crawl runs automatically ~5 s after backend starts, then every hour.
## How It Works
### Crawler (`src/services/crawler.js`)
Uses Puppeteer + `puppeteer-extra-plugin-stealth` to bypass CloudFront bot detection. Each run:
1. Navigates to the target affiliate ranking page
2. Waits for network idle + 5 s buffer for lazy-loaded content
3. Takes a full-page screenshot stored in `screenshots/`
4. Extracts casino name, position, bonus offer, and affiliate link via site-specific DOM strategies
5. Inserts records into PostgreSQL
Two targeted extractors are implemented:
| Site | Selector Strategy |
|------|------------------|
| **top10onlineslots.co.uk** | Finds divs containing "Get Bonus" text + logo `<img>`, pulls bonus from child spans |
| **ubet.co.uk** | Targets `.mainProduct.row-index-N` cards, reads `wss-vendorName-*` for name and `coupon-container` for the offer |
A generic fallback covers any future affiliate site.
### Scheduled Runs
Every hour the scheduler triggers crawls for all configured sites (see `src/services/scheduler.js`). A crawl can also be triggered manually via button in the dashboard or a POST to `/api/crawler/run-all`.
## Database Schema
### `crawls`
| Column | Type | Description |
|--------|------|-------------|
| id | SERIAL PK | Auto-increment |
| url | TEXT | Crawled page URL |
| site_name | VARCHAR(255) | Human-readable site label |
| crawled_at | TIMESTAMP | When the crawl ran |
| status | VARCHAR(50) | `completed` or `failed: ...` |
| screenshot_path | TEXT | Filename in `screenshots/` |
### `casinos`
| Column | Type | Description |
|--------|------|-------------|
| id | SERIAL PK | Auto-increment |
| crawl_id | INT FK → crawls.id | Which crawl this casino belongs to |
| position | INT | Rank on the page |
| casino_name | VARCHAR(255) | Casino brand name |
| url | TEXT | Affiliate redirect URL |
| bonus_offer | TEXT | Welcome bonus / free spins text |
### `users`
| Column | Type | Description |
|--------|------|-------------|
| id | SERIAL PK | Auto-increment |
| username | VARCHAR(100) UNIQUE | Login name |
| password_hash | VARCHAR(255) | bcrypt hash |
| role | VARCHAR(50) | Currently always `admin` |
| created_at | TIMESTAMP | Account creation time |
## API Endpoints
All authenticated endpoints require `Authorization: Bearer <token>` header.
### Auth
| Method | Path | Description |
|--------|------|-------------|
| POST | `/api/auth/login` | Login, returns JWT + user object |
| POST | `/api/auth/register` | Create new admin user |
| GET | `/api/auth/me` | Current user profile |
### Crawler
| Method | Path | Description |
|--------|------|-------------|
| GET | `/api/crawler/all` | All crawls with nested casino arrays |
| GET | `/api/crawler/:id` | Single crawl detail + screenshot path |
| POST | `/api/crawler/run-all` | Trigger immediate crawl of all sites |
| POST | `/api/crawler/run` | Crawl a single custom URL (body: `{url, siteName}`) |
### Health
| Method | Path | Description |
|--------|------|-------------|
| GET | `/api/health` | DB connectivity check |
## Adding New Sites
1. Add the site config object to `src/services/scheduler.js` under `sites[]`.
2. Write a new extractor method in `src/services/crawler.js` and add a URL-based dispatch in `extractCasinoData()`.
3. Restart the backend.
## Screenshots
Full-page screenshots are saved as PNGs in `screenshots/` and served statically at `/screenshots/<filename>`. Each crawl writes one file named `<siteName>_<timestamp>.png`. The dashboard viewer loads them through the Vite proxy → Express static route.
## Production Build
```bash
cd casino-dashboard
npm run build # outputs to dist/
```
The `dist/` folder can be served by any static server or reverse-proxied behind Nginx alongside the Express API on port 3001. Set `VITE_API_URL=https://yourdomain.com/api` as an environment variable so the frontend talks to the correct backend.
+1
View File
@@ -0,0 +1 @@
{"sites":{"casino.org":{"url":"https://www.casino.org/reviews/","title":"Seed site","casinoBrands":99},"casino.guru":{"url":"https://casino.guru/casino-reviews","title":"Seed site","casinoBrands":99},"gambling.com":{"url":"https://www.gambling.com/uk/online-casinos","title":"Seed site","casinoBrands":99},"next.io":{"url":"https://next.io/online-casinos-uk/","title":"Seed site","casinoBrands":99}},"visited":["https://www.casino.org/reviews/","https://casino.guru/casino-reviews","https://www.askgamblers.com/online-casinos/reviews","https://chipy.com/casinos","https://www.racingpost.com/online-casino/best-sites/","https://slotcatalog.com/en/best-online-casinos","https://www.gambling.com/uk/online-casinos","https://next.io/online-casinos-uk/","https://first.com/casino/best-casinos","https://www.oddschecker.com/casino-bonus","https://assets.adobedtm.com","https://ecogra.org","https://gambleaware.org","https://mga.org.mt","http://assets.adobedtm.com","https://dmca.com","https://certify.gpwa.org","https://de.casino.guru","https://se.casino.guru","https://kazinoazov.net","https://pt.casino.guru","https://kasinoguru-bg.com","https://casinoguru-gr.com","https://casinoguru-it.com","https://es.casino.guru","https://kasinoguru-cz.com","https://jp.casino.guru","https://sk.casino.guru","https://dk.casino.guru","https://sr.casino.guru","https://use.typekit.net","https://gamcare.org.uk","https://gamblingtherapy.org","https://gamban.com","https://betblocker.org","http://gamcare.org.uk","https://gamecheck.com","https://objects.kaxmedia.com","https://objects2.kaxmedia.com","https://gut.gambling.com","http://objects.kaxmedia.com","http://objects2.kaxmedia.com","http://gut.gambling.com","https://clarity.ms","https://uk1-api.eng.bloomreach.com","https://a.opmnstr.com","https://95632935.adoric-om.com","http://clarity.ms","https://cdn-cookieyes.com","https://googletagmanager.com","https://gamblingcommission.gov.uk","https://gamstop.co.uk","http://cdn-cookieyes.com","http://googletagmanager.com","https://legislation.gov.uk","https://itechlabs.com","https://ibas-uk.com","https://gdcgroup.com","https://x.com","https://open.spotify.com","https://telegram.me","https://wa.me"],"candidates":["assets.adobedtm.com","ecogra.org","gambleaware.org","mga.org.mt","dmca.com","certify.gpwa.org","de.casino.guru","se.casino.guru","kazinoazov.net","pt.casino.guru","kasinoguru-bg.com","casinoguru-gr.com","casinoguru-it.com","es.casino.guru","kasinoguru-cz.com","jp.casino.guru","sk.casino.guru","dk.casino.guru","sr.casino.guru","use.typekit.net","gamcare.org.uk","gamblingtherapy.org","gamban.com","betblocker.org","gamecheck.com","objects.kaxmedia.com","objects2.kaxmedia.com","gut.gambling.com","clarity.ms","uk1-api.eng.bloomreach.com","a.opmnstr.com","95632935.adoric-om.com","cdn-cookieyes.com","googletagmanager.com","gamblingcommission.gov.uk","gamstop.co.uk","legislation.gov.uk","itechlabs.com","ibas-uk.com","gdcgroup.com","x.com","open.spotify.com","telegram.me","wa.me"],"seedsDone":10}
+236
View File
@@ -0,0 +1,236 @@
const puppeteer = require('puppeteer');
const fs = require('fs');
const CSV_FILE = './casino_affiliate_sites.csv';
const CP_FILE = './scraper_checkpoint.json';
// Casino brand keywords for link detection
const CASINO_KW = [
'bet365','888casino','skyvegas','pokerstars','partypoker',
'unibet','bwin','betway','williamhill','ladbrokes',
'betfair','draftkings','fanduel','betmgm','caesars',
'barstoolsports','leovegas','bovada','ignitioncasino',
'mrplay','jackpotcity','casumo','playojo','22bet',
'paddy power','1xbet','betonline','intertops','reddog',
'luckystrike','betclic','betsson','hardrock','betano',
'grosvenor','coral','skybet','mr.green','betsafe',
];
// Domains to skip (social, news, etc.)
const SKIP = [
'youtube.com','facebook.com','twitter.com','linkedin.com','reddit.com',
'instagram.com','tiktok.com','pinterest.com','medium.com','github.com',
'wikipedia.org','google.','amazon.','web.archive.org',
'www.googletagmanager.com','www.google-analytics.com',
'fonts.googleapis.com','cdnjs.cloudflare.com','static.',
];
async function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
// Seed sites: known casino review portals to start crawling from
const SEED_URLS = [
'https://www.casino.org/reviews/',
'https://casino.guru/casino-reviews',
'https://www.askgamblers.com/online-casinos/reviews',
'https://chipy.com/casinos',
'https://www.racingpost.com/online-casino/best-sites/',
'https://slotcatalog.com/en/best-online-casinos',
'https://www.gambling.com/uk/online-casinos',
'https://next.io/online-casinos-uk/',
'https://first.com/casino/best-casinos',
'https://www.oddschecker.com/casino-bonus',
];
/**
* Fetch a page with puppeteer, extract all outbound links.
* Returns {url, title, outboundLinks:[domain,...]} or null on failure.
*/
async function crawlSite(browser, url) {
try {
const page = await browser.newPage();
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120');
await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 15000 });
// Wait briefly for lazy-loaded links
await sleep(2000);
// Extract all hrefs from the page
const result = await page.evaluate((selfDomain) => {
const links = new Set();
const anchors = document.querySelectorAll('a[href]');
for (const a of anchors) {
const href = a.href;
try {
const u = new URL(href);
// Filter: must be http/https, not same domain, not skip list const d = u.hostname.replace('www.', '');
if (!['http','https'].includes(u.protocol)) continue;
if (d === selfDomain) continue;
links.add(d);
} catch {}
}
return [...links];
}, await page.evaluate(() => window.location.hostname));
const title = await page.title();
await page.close();
return { url, title, outboundLinks: result };
} catch (err) {
console.log(` [fail] ${url}: ${err.message}`);
return null;
}
}
/**
* Count how many different casino brand domains a page links to.
*/
function countCasinoBrands(outboundLinks) {
const matched = new Set();
for (const domain of outboundLinks) {
const lo = domain.toLowerCase();
for (const kw of CASINO_KW) { if (lo.includes(kw.toLowerCase())) matched.add(kw); break; }
}
return matched.size;
}
// Load/save checkpoint
function loadCP() {
try { return JSON.parse(fs.readFileSync(CP_FILE, 'utf8')); } catch { return null; }
}
function saveCP(data) { fs.writeFileSync(CP_FILE, JSON.stringify(data)); }
(async () => {
console.log('══════════ Casino Affiliate Crawler v2 ══════════');
console.log(`Seeds : ${SEED_URLS.length}`);
console.log(`Goal : 1000+ sites with ≥5 casino brand links\n`);
const cp = loadCP();
const allSites = new Map(); // domain → {url, title, casinoBrands: n}
const visited = new Set(); // URLs we already crawled for outbound links
const candidates = []; // Queue of candidate DOMAINS to discover
if (cp) {
console.log(`Resuming checkpoint...`);
for (const d of Object.keys(cp.sites)) allSites.set(d, cp.sites[d]);
for (const u of cp.visited || []) visited.add(u);
for (const c of cp.candidates || []) candidates.push(c);
console.log(` ${allSites.size} known sites, ${visited.size} visited, ${candidates.length} candidates\n`);
}
const browser = await puppeteer.launch({
headless: 'new',
args: ['--no-sandbox','--disable-dev-shm-usage','--disable-setuid-sandbox'],
});
// ── Phase 1: Crawl seed sites & extract outbound links ────────
console.log('▶ Phase 1: Crawling seed sites...\n');
for (let i = 0; i < SEED_URLS.length; i++) {
const sUrl = SEED_URLS[i];
if (visited.has(sUrl)) continue;
visited.add(sUrl);
console.log(`[${i+1}/${SEED_URLS.length}] ${sUrl}`);
const data = await crawlSite(browser, sUrl);
if (!data) { await sleep(2000); continue; }
// The seed itself is a confirmed affiliate site
const dName = new URL(sUrl).hostname.replace('www.', '');
allSites.set(dName, { url: sUrl, title: data.title, casinoBrands: 99 });
// Add outbound domains to candidates
for (const od of data.outboundLinks) {
if (SKIP.some(k => od.includes(k))) continue;
if (!allSites.has(od) && !candidates.find(c => c.domain === od)) {
candidates.push({ domain: od, from: dName });
}
}
console.log(` → Found ${data.outboundLinks.length} outbound links\n`);
saveCP({
sites: Object.fromEntries(allSites),
visited: [...visited],
candidates: candidates.filter(c => !allSites.has(c.domain)),
});
await sleep(3000);
}
// ── Phase 2: Verify candidates by checking their outbound links ───────
console.log(`▶ Phase 2: Verifying ${candidates.length} candidate sites...\n`);
const CONC = 3; // concurrent pages in puppeteer
let verified = allSites.size;
for (let i = 0; i < candidates.length && verified < 1200; i += CONC) {
const batch = candidates.slice(i, i + CONC);
const checks = await Promise.all(
batch.map(async (cand) => {
if (visited.has(`https://${cand.domain}`)) return null;
let tryUrls = [
`https://${cand.domain}`,
cand.domain.startsWith('http') ? cand.domain : `http://${cand.domain}`,
];
for (const u of tryUrls) {
if (visited.has(u)) break;
visited.add(u);
const data = await crawlSite(browser, u);
if (!data) continue;
const brandCount = countCasinoBrands(data.outboundLinks);
return { domain: cand.domain, url: u, title: data.title, brands: brandCount };
}
return null;
})
);
for (const result of checks) {
if (!result) continue;
// Must link to ≥5 different casino brands AND have outbound links suggesting it's an affiliate/review site
if (result.brands >= 5 && result.url) {
allSites.set(result.domain, result);
verified++;
console.log(`${result.domain} (${result.brands} brands)`);
// Discover more candidates from this newly-verified site's outbound links
await crawlSite(browser, result.url).then(d => {
if (!d) return;
for (const od of d.outboundLinks || []) {
if (SKIP.some(k => od.includes(k))) continue;
if (!allSites.has(od) && !candidates.find(c => c.domain === od)) {
candidates.push({ domain: od, from: result.domain });
}
}
});
}
}
// Save checkpoint every 20 sites
if (verified % 20 === 0 || verified === allSites.size) {
saveCP({
sites: Object.fromEntries(allSites),
visited: [...visited],
candidates: candidates.filter(c => !allSites.has(c.domain)),
});
console.log(` ${verified} verified, ${candidates.length - i} remaining\n`);
}
await sleep(4000); // Rate limit to avoid IP bans
}
await browser.close();
// ── Write CSV ───────
const header = 'url,title,domain,casino_brands';
const sorted = [...allSites.values()]
.sort((a, b) => a.url.localeCompare(b.url))
.map(v => `"${v.url}","${(v.title||'').replace(/"/g,"''")}","${v.domain}",${v.casino_brands}`);
fs.writeFileSync(CSV_FILE, [header, ...sorted].join('\n'), 'utf8');
console.log(`\n══════ ${allSites.size} verified sites → ${CSV_FILE} ══════`);
})();
+24
View File
@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
+16
View File
@@ -0,0 +1,16 @@
# React + Vite
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs)
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/)
## React Compiler
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
## Expanding the ESLint configuration
If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project.
+21
View File
@@ -0,0 +1,21 @@
import js from '@eslint/js'
import globals from 'globals'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
import { defineConfig, globalIgnores } from 'eslint/config'
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{js,jsx}'],
extends: [
js.configs.recommended,
reactHooks.configs.flat.recommended,
reactRefresh.configs.vite,
],
languageOptions: {
globals: globals.browser,
parserOptions: { ecmaFeatures: { jsx: true } },
},
},
])
+13
View File
@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>casino-dashboard</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>
+3029
View File
File diff suppressed because it is too large Load Diff
+31
View File
@@ -0,0 +1,31 @@
{
"name": "casino-dashboard",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"lint": "eslint .",
"preview": "vite preview"
},
"dependencies": {
"axios": "^1.18.0",
"chart.js": "^4.5.1",
"react": "^19.2.6",
"react-chartjs-2": "^5.3.1",
"react-dom": "^19.2.6",
"react-router-dom": "^7.18.0"
},
"devDependencies": {
"@eslint/js": "^10.0.1",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^4.7.0",
"eslint": "^10.3.0",
"eslint-plugin-react-hooks": "^7.1.1",
"eslint-plugin-react-refresh": "^0.5.2",
"globals": "^17.6.0",
"vite": "^5.4.21"
}
}
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.3 KiB

+24
View File
@@ -0,0 +1,24 @@
<svg xmlns="http://www.w3.org/2000/svg">
<symbol id="bluesky-icon" viewBox="0 0 16 17">
<g clip-path="url(#bluesky-clip)"><path fill="#08060d" d="M7.75 7.735c-.693-1.348-2.58-3.86-4.334-5.097-1.68-1.187-2.32-.981-2.74-.79C.188 2.065.1 2.812.1 3.251s.241 3.602.398 4.13c.52 1.744 2.367 2.333 4.07 2.145-2.495.37-4.71 1.278-1.805 4.512 3.196 3.309 4.38-.71 4.987-2.746.608 2.036 1.307 5.91 4.93 2.746 2.72-2.746.747-4.143-1.747-4.512 1.702.189 3.55-.4 4.07-2.145.156-.528.397-3.691.397-4.13s-.088-1.186-.575-1.406c-.42-.19-1.06-.395-2.741.79-1.755 1.24-3.64 3.752-4.334 5.099"/></g>
<defs><clipPath id="bluesky-clip"><path fill="#fff" d="M.1.85h15.3v15.3H.1z"/></clipPath></defs>
</symbol>
<symbol id="discord-icon" viewBox="0 0 20 19">
<path fill="#08060d" d="M16.224 3.768a14.5 14.5 0 0 0-3.67-1.153c-.158.286-.343.67-.47.976a13.5 13.5 0 0 0-4.067 0c-.128-.306-.317-.69-.476-.976A14.4 14.4 0 0 0 3.868 3.77C1.546 7.28.916 10.703 1.231 14.077a14.7 14.7 0 0 0 4.5 2.306q.545-.748.965-1.587a9.5 9.5 0 0 1-1.518-.74q.191-.14.372-.293c2.927 1.369 6.107 1.369 8.999 0q.183.152.372.294-.723.437-1.52.74.418.838.963 1.588a14.6 14.6 0 0 0 4.504-2.308c.37-3.911-.63-7.302-2.644-10.309m-9.13 8.234c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.894 0 1.614.82 1.599 1.82.001 1-.705 1.82-1.6 1.82m5.91 0c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.893 0 1.614.82 1.599 1.82 0 1-.706 1.82-1.6 1.82"/>
</symbol>
<symbol id="documentation-icon" viewBox="0 0 21 20">
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="m15.5 13.333 1.533 1.322c.645.555.967.833.967 1.178s-.322.623-.967 1.179L15.5 18.333m-3.333-5-1.534 1.322c-.644.555-.966.833-.966 1.178s.322.623.966 1.179l1.534 1.321"/>
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M17.167 10.836v-4.32c0-1.41 0-2.117-.224-2.68-.359-.906-1.118-1.621-2.08-1.96-.599-.21-1.349-.21-2.848-.21-2.623 0-3.935 0-4.983.369-1.684.591-3.013 1.842-3.641 3.428C3 6.449 3 7.684 3 10.154v2.122c0 2.558 0 3.838.706 4.726q.306.383.713.671c.76.536 1.79.64 3.581.66"/>
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M3 10a2.78 2.78 0 0 1 2.778-2.778c.555 0 1.209.097 1.748-.047.48-.129.854-.503.982-.982.145-.54.048-1.194.048-1.749a2.78 2.78 0 0 1 2.777-2.777"/>
</symbol>
<symbol id="github-icon" viewBox="0 0 19 19">
<path fill="#08060d" fill-rule="evenodd" d="M9.356 1.85C5.05 1.85 1.57 5.356 1.57 9.694a7.84 7.84 0 0 0 5.324 7.44c.387.079.528-.168.528-.376 0-.182-.013-.805-.013-1.454-2.165.467-2.616-.935-2.616-.935-.349-.91-.864-1.143-.864-1.143-.71-.48.051-.48.051-.48.787.051 1.2.805 1.2.805.695 1.194 1.817.857 2.268.649.064-.507.27-.857.49-1.052-1.728-.182-3.545-.857-3.545-3.87 0-.857.31-1.558.8-2.104-.078-.195-.349-1 .077-2.078 0 0 .657-.208 2.14.805a7.5 7.5 0 0 1 1.946-.26c.657 0 1.328.092 1.946.26 1.483-1.013 2.14-.805 2.14-.805.426 1.078.155 1.883.078 2.078.502.546.799 1.247.799 2.104 0 3.013-1.818 3.675-3.558 3.87.284.247.528.714.528 1.454 0 1.052-.012 1.896-.012 2.156 0 .208.142.455.528.377a7.84 7.84 0 0 0 5.324-7.441c.013-4.338-3.48-7.844-7.773-7.844" clip-rule="evenodd"/>
</symbol>
<symbol id="social-icon" viewBox="0 0 20 20">
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M12.5 6.667a4.167 4.167 0 1 0-8.334 0 4.167 4.167 0 0 0 8.334 0"/>
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M2.5 16.667a5.833 5.833 0 0 1 8.75-5.053m3.837.474.513 1.035c.07.144.257.282.414.309l.93.155c.596.1.736.536.307.965l-.723.73a.64.64 0 0 0-.152.531l.207.903c.164.715-.213.991-.84.618l-.872-.52a.63.63 0 0 0-.577 0l-.872.52c-.624.373-1.003.094-.84-.618l.207-.903a.64.64 0 0 0-.152-.532l-.723-.729c-.426-.43-.289-.864.306-.964l.93-.156a.64.64 0 0 0 .412-.31l.513-1.034c.28-.562.735-.562 1.012 0"/>
</symbol>
<symbol id="x-icon" viewBox="0 0 19 19">
<path fill="#08060d" fill-rule="evenodd" d="M1.893 1.98c.052.072 1.245 1.769 2.653 3.77l2.892 4.114c.183.261.333.48.333.486s-.068.089-.152.183l-.522.593-.765.867-3.597 4.087c-.375.426-.734.834-.798.905a1 1 0 0 0-.118.148c0 .01.236.017.664.017h.663l.729-.83c.4-.457.796-.906.879-.999a692 692 0 0 0 1.794-2.038c.034-.037.301-.34.594-.675l.551-.624.345-.392a7 7 0 0 1 .34-.374c.006 0 .93 1.306 2.052 2.903l2.084 2.965.045.063h2.275c1.87 0 2.273-.003 2.266-.021-.008-.02-1.098-1.572-3.894-5.547-2.013-2.862-2.28-3.246-2.273-3.266.008-.019.282-.332 2.085-2.38l2-2.274 1.567-1.782c.022-.028-.016-.03-.65-.03h-.674l-.3.342a871 871 0 0 1-1.782 2.025c-.067.075-.405.458-.75.852a100 100 0 0 1-.803.91c-.148.172-.299.344-.99 1.127-.304.343-.32.358-.345.327-.015-.019-.904-1.282-1.976-2.808L6.365 1.85H1.8zm1.782.91 8.078 11.294c.772 1.08 1.413 1.973 1.425 1.984.016.017.241.02 1.05.017l1.03-.004-2.694-3.766L7.796 5.75 5.722 2.852l-1.039-.004-1.039-.004z" clip-rule="evenodd"/>
</symbol>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

+11
View File
@@ -0,0 +1,11 @@
.app {
display: flex;
min-height: 100vh;
}
.content {
flex: 1;
padding: 2rem 3rem;
overflow-y: auto;
max-height: 100vh;
}
+66
View File
@@ -0,0 +1,66 @@
import { useState, useEffect } from 'react'
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'
import { AuthContext } from './api'
import api from './api'
import Login from './components/Login'
import Dashboard from './components/Dashboard'
import CrawlDetail from './components/CrawlDetail'
import CasinoReport from './components/CasinoReport'
import Sidebar from './components/Sidebar'
import './App.css'
function PrivateRoute({ children }) {
const token = localStorage.getItem('token')
return token ? children : <Navigate to="/login" />
}
function App() {
const [user, setUser] = useState(null)
const [loading, setLoading] = useState(true)
useEffect(() => {
const storedUser = localStorage.getItem('user')
if (storedUser) {
setUser(JSON.parse(storedUser))
}
setLoading(false)
}, [])
const handleLogin = async (data) => {
setUser(data.user)
localStorage.setItem('user', JSON.stringify(data.user))
}
const handleLogout = () => {
api.logout()
setUser(null)
}
if (loading) return <div className="loading">Loading...</div>
return (
<AuthContext.Provider value={{ user, logout: handleLogout }}>
<BrowserRouter>
<div className="app">
<Sidebar onLogout={handleLogout} />
<main className="content">
<Routes>
<Route path="/login" element={<Login onLogin={handleLogin} />} />
<Route path="/" element={
<PrivateRoute><Dashboard /></PrivateRoute>
} />
<Route path="/crawl/:id" element={
<PrivateRoute><CrawlDetail /></PrivateRoute>
} />
<Route path="/report" element={
<PrivateRoute><CasinoReport /></PrivateRoute>
} />
</Routes>
</main>
</div>
</BrowserRouter>
</AuthContext.Provider>
)
}
export default App
+70
View File
@@ -0,0 +1,70 @@
import { useState, createContext, useContext } from 'react'
import axios from 'axios'
const API_URL = import.meta.env.VITE_API_URL || 'http://localhost:3001/api'
export const AuthContext = createContext(null)
export function useAuth() {
return useContext(AuthContext)
}
async function login(username, password) {
const response = await axios.post(`${API_URL}/auth/login`, { username, password })
localStorage.setItem('token', response.data.token)
localStorage.setItem('user', JSON.stringify(response.data.user))
return response.data
}
async function logout() {
localStorage.removeItem('token')
localStorage.removeItem('user')
}
async function register(username, password) {
const response = await axios.post(`${API_URL}/auth/register`, { username, password })
return response.data
}
async function fetchAllCrawls() {
const token = localStorage.getItem('token')
const response = await axios.get(`${API_URL}/crawler/all`, {
headers: { Authorization: `Bearer ${token}` }
})
return response.data
}
async function fetchCrawlById(id) {
const token = localStorage.getItem('token')
const response = await axios.get(`${API_URL}/crawler/${id}`, {
headers: { Authorization: `Bearer ${token}` }
})
return response.data
}
async function runAllCrawls() {
const token = localStorage.getItem('token')
const response = await axios.post(`${API_URL}/crawler/run-all`, {}, {
headers: { Authorization: `Bearer ${token}` }
})
return response.data
}
async function fetchCasinoReport() {
const token = localStorage.getItem('token')
const response = await axios.get(`${API_URL}/crawler/casino-report`, {
headers: { Authorization: `Bearer ${token}` }
})
return response.data
}
async function getPositionHistory(casinoName, siteName) {
const token = localStorage.getItem('token')
const response = await axios.get(`${API_URL}/crawler/position-history`, {
headers: { Authorization: `Bearer ${token}` },
params: { casino_name: casinoName, site_name: siteName }
})
return response.data
}
export default { login, logout, register, fetchAllCrawls, fetchCrawlById, runAllCrawls, fetchCasinoReport, getPositionHistory }
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228"><path fill="#00D8FF" d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z"></path></svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.5 KiB

@@ -0,0 +1,213 @@
.report-header {
margin-bottom: 1.5rem;
}
.report-header h2 {
color: #e8ebf2;
margin: 0 0 0.25rem;
}
.report-subtitle {
color: #6b7280;
font-size: 0.9375rem;
margin: 0;
}
.search-bar {
margin-bottom: 1.5rem;
}
.search-bar input {
width: 100%;
padding: 0.75rem 1rem;
border-radius: 8px;
border: 1px solid #3a3f56;
background: #242840;
color: #e8ebf2;
font-size: 0.9375rem;
outline: none;
}
.search-bar input:focus {
border-color: #6366f1;
}
.report-stats {
display: flex;
gap: 1.5rem;
margin-bottom: 1.5rem;
}
.stat {
background: #242840;
padding: 1rem 1.25rem;
border-radius: 10px;
color: #9ca3af;
font-size: 0.9375rem;
}
.stat strong {
color: #6366f1;
font-weight: 700;
}
.casino-list {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.casino-card {
background: #242840;
border-radius: 10px;
overflow: hidden;
}
.casino-card-header {
width: 100%;
display: flex;
align-items: center;
gap: 0.75rem;
padding: 1.25rem 1.5rem;
background: transparent;
border: none;
color: inherit;
cursor: pointer;
text-align: left;
}
.casino-card-header:hover {
background: rgba(99, 102, 241, 0.05);
}
.expand-icon {
color: #6366f1;
font-size: 0.625rem;
transition: transform 0.2s;
}
.expand-icon.open {
transform: rotate(90deg);
}
.casino-info {
display: flex;
align-items: center;
gap: 0.75rem;
flex: 1;
min-width: 0;
}
.casino-name-group {
display: flex;
flex-direction: column;
min-width: 0;
}
.casino-info h3 {
margin: 0;
color: #e8ebf2;
font-size: 1rem;
font-weight: 500;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.casino-url {
color: #7c3aed;
font-size: 0.8125rem;
text-decoration: none;
word-break: break-all;
}
.casino-url:hover {
text-decoration: underline;
}
.casino-favicon {
width: 24px;
height: 24px;
border-radius: 4px;
object-fit: contain;
flex-shrink: 0;
}
.site-count {
color: #6b7280;
font-size: 0.8125rem;
white-space: nowrap;
}
.sites-table {
border-top: 1px solid #3a3f56;
}
.sites-table table {
width: 100%;
border-collapse: collapse;
}
.sites-table th {
text-align: left;
padding: 0.875rem 1.5rem;
background: #1e2136;
color: #6b7280;
font-size: 0.75rem;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.sites-table td {
padding: 0.875rem 1.5rem;
color: #e8ebf2;
font-size: 0.9375rem;
border-top: 1px solid #3a3f56;
}
.sites-table tr:hover td {
background: rgba(99, 102, 241, 0.03);
}
.position {
font-weight: 700;
color: #6366f1;
text-align: center;
width: 80px;
}
.site-name {
font-weight: 500;
width: 200px;
}
.site-name-link {
background: none;
border: none;
color: #6366f1;
cursor: pointer;
font: inherit;
padding: 0;
text-align: left;
text-decoration: underline;
text-underline-offset: 2px;
}
.site-name-link:hover {
color: #818cf8;
}
.site-url {
width: auto;
}
.site-url a {
color: #6366f1;
word-break: break-all;
}
.crawled-at {
color: #6b7280;
font-size: 0.8125rem;
white-space: nowrap;
}
@@ -0,0 +1,141 @@
import { useState, useEffect } from 'react'
import api from '../api'
import PositionChart from './PositionChart'
import './CasinoReport.css'
export default function CasinoReport() {
const [data, setData] = useState([])
const [loading, setLoading] = useState(true)
const [search, setSearch] = useState('')
const [expanded, setExpanded] = useState({})
const [modalOpen, setModalOpen] = useState(false)
const [selectedCasino, setSelectedCasino] = useState(null)
const [selectedSite, setSelectedSite] = useState(null)
useEffect(() => {
api.fetchCasinoReport().then(
(result) => {
setData(result)
setLoading(false)
}
).catch(() => {
setLoading(false)
})
}, [])
const toggleExpand = (name) => {
setExpanded(prev => ({ ...prev, [name]: !prev[name] }))
}
const openChart = (casinoName, siteName) => {
setSelectedCasino(casinoName)
setSelectedSite(siteName)
setModalOpen(true)
}
const closeChart = () => {
setModalOpen(false)
setSelectedCasino(null)
setSelectedSite(null)
}
const filtered = data.filter(casino =>
casino.casino_name.toLowerCase().includes(search.toLowerCase())
)
return (
<div className="casino-report">
<div className="report-header">
<h2>Casino Report</h2>
<p className="report-subtitle">Which sites each casino appears on</p>
</div>
<div className="search-bar">
<input
type="text"
placeholder="Search casinos..."
value={search}
onChange={(e) => setSearch(e.target.value)}
/>
</div>
{loading ? (
<div className="loading-state">Loading report...</div>
) : filtered.length === 0 ? (
<div className="empty-state">No casinos found</div>
) : (
<div className="report-stats">
<span className="stat">{data.length} unique casinos</span>
<span className="stat">{data.reduce((sum, c) => sum + (c.sites?.length || 0), 0)} casino-site listings</span>
</div>
)}
<div className="casino-list">
{filtered.map((casino) => (
<div key={casino.casino_name} className="casino-card">
<button
className="casino-card-header"
onClick={() => toggleExpand(casino.casino_name)}
>
<span className={`expand-icon ${expanded[casino.casino_name] ? 'open' : ''}`}>&#9654;</span>
<div className="casino-info">
{casino.favicon_url && (
<img src={casino.favicon_url} alt="" className="casino-favicon" />
)}
<div className="casino-name-group">
<h3>{casino.casino_name}</h3>
{casino.casino_url && (
<a href={casino.casino_url} target="_blank" rel="noreferrer" className="casino-url">{casino.casino_url}</a>
)}
</div>
</div>
<div className="site-count">{casino.sites?.length || 0} sites</div>
</button>
{expanded[casino.casino_name] && (
<div className="sites-table">
<table>
<thead>
<tr>
<th>Position</th>
<th>Site Name</th>
<th>Site URL</th>
<th>Last Crawled</th>
</tr>
</thead>
<tbody>
{casino.sites?.map((site) => (
<tr key={site.crawl_id}>
<td className="position">{site.position}</td>
<td className="site-name">
<button
className="site-name-link"
onClick={() => openChart(casino.casino_name, site.site_name)}
>
{site.site_name}
</button>
</td>
<td className="site-url">
<a href={site.site_url} target="_blank" rel="noreferrer">{site.site_url}</a>
</td>
<td className="crawled-at">{new Date(site.crawled_at).toLocaleString()}</td>
</tr>
))}
</tbody>
</table>
</div>
)}
</div>
))}
</div>
{modalOpen && (
<PositionChart
casinoName={selectedCasino}
siteName={selectedSite}
onClose={closeChart}
/>
)}
</div>
)
}
@@ -0,0 +1,116 @@
.crawl-detail {
max-width: 1200px;
}
.detail-header {
display: flex;
align-items: center;
gap: 1rem;
margin-bottom: 1.5rem;
}
.detail-meta {
background: #242840;
padding: 1.5rem;
border-radius: 10px;
margin-bottom: 2rem;
display: flex;
flex-direction: column;
gap: 0.75rem;
}
.detail-meta p {
color: #9ca3af;
font-size: 0.9375rem;
margin: 0;
}
.detail-meta strong {
color: #e8ebf2;
}
.detail-meta a {
color: #6366f1;
}
.screenshot-section {
margin-bottom: 2rem;
}
.screenshot-section h4 {
color: #e8ebf2;
margin-bottom: 1rem;
}
.screenshot {
width: 100%;
max-height: 600px;
object-fit: contain;
border-radius: 10px;
background: #1a1d2e;
border: 1px solid #3a3f56;
}
.casino-table-section h4 {
color: #e8ebf2;
margin-bottom: 1rem;
}
.casino-table {
width: 100%;
border-collapse: collapse;
background: #242840;
border-radius: 10px;
overflow: hidden;
}
.casino-table th {
text-align: left;
padding: 1rem 1.5rem;
background: #1e2136;
color: #9ca3af;
font-size: 0.8125rem;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.casino-table td {
padding: 1rem 1.5rem;
border-top: 1px solid #3a3f56;
color: #e8ebf2;
font-size: 0.9375rem;
}
.casino-table tr:hover td {
background: rgba(99, 102, 241, 0.05);
}
.position {
font-weight: 700;
color: #6366f1;
text-align: center;
width: 60px;
}
.casino-name {
display: flex;
align-items: center;
gap: 0.5rem;
font-weight: 500;
}
.casino-favicon {
width: 24px;
height: 24px;
object-fit: contain;
border-radius: 4px;
}
.bonus {
color: #10b981;
}
.link a {
color: #6366f1;
text-decoration: underline;
}
@@ -0,0 +1,81 @@
import { useState, useEffect } from 'react'
import { useParams } from 'react-router-dom'
import api from '../api'
import './CrawlDetail.css'
export default function CrawlDetail() {
const { id } = useParams()
const [crawl, setCrawl] = useState(null)
const [loading, setLoading] = useState(true)
useEffect(() => {
api.fetchCrawlById(id).then(
(data) => {
setCrawl(data)
setLoading(false)
}
).catch(() => {
setLoading(false)
})
}, [id])
if (loading) return <div className="loading-state">Loading crawl details...</div>
if (!crawl) return <div className="error-state">Crawl not found</div>
const screenshotUrl = crawl.screenshot_path ? `/screenshots/${crawl.screenshot_path}` : null
return (
<div className="crawl-detail">
<h2>Crawl Details</h2>
<div className="detail-header">
<span className={`status-badge status-${crawl.status === 'completed' ? 'success' : crawl.status.includes('failed') ? 'error' : 'pending'}`}>
{crawl.status}
</span>
<h3>{crawl.site_name}</h3>
</div>
<div className="detail-meta">
<p><strong>URL:</strong> <a href={crawl.url} target="_blank" rel="noreferrer">{crawl.url}</a></p>
<p><strong>Crawled at:</strong> {new Date(crawl.crawled_at).toLocaleString()}</p>
<p><strong>Casinos Found:</strong> {crawl.casinos?.length || 0}</p>
</div>
{crawl.screenshot_path && (
<div className="screenshot-section">
<h4>Screenshot</h4>
<img src={screenshotUrl} alt={`Screenshot of ${crawl.site_name}`} className="screenshot" />
</div>
)}
<div className="casino-table-section">
<h4>Casino Rankings</h4>
<table className="casino-table">
<thead>
<tr>
<th>#</th>
<th>Casino Name</th>
<th>Bonus / Offer</th>
<th>Link</th>
</tr>
</thead>
<tbody>
{crawl.casinos?.map((casino) => (
<tr key={casino.id}>
<td className="position">{casino.position}</td>
<td className="casino-name">
{casino.favicon_url && <img src={casino.favicon_url} alt="" className="casino-favicon" />}
{casino.casino_name}
</td>
<td className="bonus">{casino.bonus_offer || '-'}</td>
<td className="link">
{casino.url ? <a href={casino.url} target="_blank" rel="noreferrer">Open</a> : '-'}
</td>
</tr>
))}
</tbody>
</table>
</div>
</div>
)
}
@@ -0,0 +1,112 @@
.dashboard-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 2rem;
}
.crawl-button {
padding: 0.75rem 1.5rem;
border-radius: 8px;
border: none;
background: #4f46e5;
color: #fff;
font-size: 0.9375rem;
cursor: pointer;
transition: background 0.2s;
}
.crawl-button:hover {
background: #4338ca;
}
.crawl-error {
background: rgba(239, 68, 68, 0.1);
border: 1px solid #ef4444;
color: #ef4444;
padding: 0.75rem 1rem;
border-radius: 6px;
margin-bottom: 1rem;
}
.crawl-list {
display: grid;
gap: 1rem;
}
.crawl-card {
background: #242840;
border-radius: 10px;
padding: 1.5rem;
text-decoration: none;
color: inherit;
transition: transform 0.15s, box-shadow 0.15s;
}
.crawl-card:hover {
transform: translateY(-2px);
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.3);
}
.crawl-card-header {
display: flex;
align-items: center;
gap: 1rem;
margin-bottom: 0.75rem;
}
.status-badge {
padding: 0.25rem 0.75rem;
border-radius: 20px;
font-size: 0.75rem;
font-weight: 600;
text-transform: uppercase;
}
.status-success {
background: rgba(16, 185, 129, 0.15);
color: #10b981;
}
.status-error {
background: rgba(239, 68, 68, 0.15);
color: #ef4444;
}
.status-pending {
background: rgba(251, 191, 36, 0.15);
color: #fbbf24;
}
.crawl-card-header h3 {
color: #e8ebf2;
margin: 0;
font-size: 1.125rem;
}
.crawl-url {
color: #6366f1;
font-size: 0.875rem;
word-break: break-all;
}
.crawl-date {
color: #6b7280;
font-size: 0.8125rem;
margin-top: 0.25rem;
}
.crawl-stats {
margin-top: 0.75rem;
color: #9ca3af;
font-size: 0.875rem;
}
.empty-state,
.loading-state {
text-align: center;
padding: 3rem;
color: #6b7280;
background: #242840;
border-radius: 10px;
}
@@ -0,0 +1,80 @@
import { useState, useEffect } from 'react'
import { Link } from 'react-router-dom'
import api from '../api'
import './Dashboard.css'
export default function Dashboard() {
const [crawls, setCrawls] = useState([])
const [loading, setLoading] = useState(true)
const [running, setRunning] = useState(false)
const [runError, setRunError] = useState('')
const loadData = () => {
api.fetchAllCrawls().then(
(data) => {
setCrawls(data)
setLoading(false)
}
).catch(() => {
setLoading(false)
})
}
useEffect(() => {
loadData()
}, [])
const handleRunCrawl = async () => {
setRunning(true)
setRunError('')
try {
await api.runAllCrawls()
loadData()
} catch (err) {
setRunError(err.response?.data?.error || 'Failed to run crawl')
} finally {
setRunning(false)
}
}
return (
<div className="dashboard">
<div className="dashboard-header">
<h2>Crawler Dashboard</h2>
<button className="crawl-button" onClick={handleRunCrawl} disabled={running}>
{running ? 'Running...' : 'Run Crawl Now'}
</button>
</div>
{runError && <div className="crawl-error">{runError}</div>}
{loading ? (
<div className="loading-state">Loading crawl data...</div>
) : crawls.length === 0 ? (
<div className="empty-state">
<p>No crawls yet. Click "Run Crawl Now" to start collecting data.</p>
</div>
) : (
<div className="crawl-list">
{crawls.map((crawl) => (
<Link to={`/crawl/${crawl.crawl_id}`} key={crawl.crawl_id} className="crawl-card">
<div className="crawl-card-header">
<span className={`status-badge status-${crawl.status === 'completed' ? 'success' : crawl.status.includes('failed') ? 'error' : 'pending'}`}>
{crawl.status}
</span>
<h3>{crawl.site_name}</h3>
</div>
<div className="crawl-card-body">
<p className="crawl-url">{crawl.url}</p>
<p className="crawl-date">{new Date(crawl.crawled_at).toLocaleString()}</p>
<div className="crawl-stats">
<span>Casinos Found: <strong>{crawl.casinos?.length || 0}</strong></span>
</div>
</div>
</Link>
))}
</div>
)}
</div>
)
}
+66
View File
@@ -0,0 +1,66 @@
.login-container {
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
background: #1a1d2e;
}
.login-card {
background: #242840;
padding: 3rem;
border-radius: 12px;
box-shadow: 0 20px 60px rgba(0,0,0,0.4);
width: 100%;
max-width: 400px;
}
.login-title {
color: #fff;
margin-bottom: 0.5rem;
font-size: 2rem;
}
.login-subtitle {
color: #8b90a3;
margin-bottom: 2rem;
}
.login-form {
display: flex;
flex-direction: column;
gap: 1rem;
}
.login-input {
padding: 0.75rem 1rem;
border-radius: 8px;
border: 1px solid #3a3f56;
background: #1a1d2e;
color: #fff;
font-size: 1rem;
}
.login-button {
padding: 0.75rem;
border-radius: 8px;
border: none;
background: #4f46e5;
color: #fff;
font-size: 1rem;
cursor: pointer;
transition: background 0.2s;
}
.login-button:hover {
background: #4338ca;
}
.login-error {
background: rgba(239, 68, 68, 0.1);
border: 1px solid #ef4444;
color: #ef4444;
padding: 0.5rem 1rem;
border-radius: 6px;
font-size: 0.875rem;
}
+58
View File
@@ -0,0 +1,58 @@
import { useState } from 'react'
import { useNavigate } from 'react-router-dom'
import api from '../api'
import './Login.css'
export default function Login({ onLogin }) {
const [username, setUsername] = useState('')
const [password, setPassword] = useState('')
const [error, setError] = useState('')
const [loading, setLoading] = useState(false)
const navigate = useNavigate()
const handleSubmit = async (e) => {
e.preventDefault()
setError('')
setLoading(true)
try {
const data = await api.login(username, password)
onLogin(data)
navigate('/')
} catch (err) {
setError(err.response?.data?.error || 'Login failed')
} finally {
setLoading(false)
}
}
return (
<div className="login-container">
<div className="login-card">
<h1 className="login-title">Casino Crawler</h1>
<p className="login-subtitle">Backoffice Dashboard</p>
<form onSubmit={handleSubmit} className="login-form">
{error && <div className="login-error">{error}</div>}
<input
type="text"
placeholder="Username"
value={username}
onChange={(e) => setUsername(e.target.value)}
className="login-input"
required
/>
<input
type="password"
placeholder="Password"
value={password}
onChange={(e) => setPassword(e.target.value)}
className="login-input"
required
/>
<button type="submit" className="login-button" disabled={loading}>
{loading ? 'Signing In...' : 'Sign In'}
</button>
</form>
</div>
</div>
)
}
@@ -0,0 +1,61 @@
.position-chart-overlay {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.6);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
}
.position-chart-modal {
background: #242840;
border-radius: 12px;
padding: 2rem;
width: 90%;
max-width: 900px;
max-height: 85vh;
overflow: auto;
box-shadow: 0 16px 48px rgba(0, 0, 0, 0.4);
}
.chart-header {
position: relative;
margin-bottom: 1.5rem;
}
.chart-header h3 {
color: #e8ebf2;
font-size: 1.125rem;
font-weight: 600;
margin: 0;
word-break: break-word;
}
.close-btn {
position: absolute;
top: -8px;
right: -8px;
background: none;
border: none;
color: #9ca3af;
font-size: 1.5rem;
cursor: pointer;
padding: 4px;
line-height: 1;
}
.close-btn:hover {
color: #e8ebf2;
}
.chart-container {
height: 350px;
}
.chart-loading,
.chart-empty {
color: #9ca3af;
text-align: center;
padding: 4rem 0;
}
@@ -0,0 +1,106 @@
import { useState, useEffect } from 'react'
import { Line } from 'react-chartjs-2'
import {
Chart as ChartJS,
CategoryScale,
LinearScale,
PointElement,
LineElement,
Title,
Tooltip,
} from 'chart.js'
import api from '../api'
import './PositionChart.css'
ChartJS.register(
CategoryScale,
LinearScale,
PointElement,
LineElement,
Title,
Tooltip
)
export default function PositionChart({ casinoName, siteName, onClose }) {
const [history, setHistory] = useState([])
const [loading, setLoading] = useState(true)
useEffect(() => {
api.getPositionHistory(casinoName, siteName).then(
(result) => {
setHistory(result)
setLoading(false)
}
).catch(() => {
setLoading(false)
})
}, [casinoName, siteName])
const chartData = history.length > 0 ? {
labels: history.map(h => h.label),
datasets: [{
label: 'Position',
data: history.map(h => Number(h.position)),
borderColor: '#6366f1',
backgroundColor: 'rgba(99, 102, 241, 0.1)',
fill: true,
tension: 0.3,
pointBackgroundColor: '#6366f1',
pointRadius: history.length > 30 ? 0 : 4,
}],
} : null
return (
<div className="position-chart-overlay" onClick={onClose}>
<div className="position-chart-modal" onClick={(e) => e.stopPropagation()}>
<div className="chart-header">
<h3>Position History: {casinoName} on {siteName}</h3>
<button className="close-btn" onClick={onClose}>&times;</button>
</div>
{loading ? (
<div className="chart-loading">Loading chart...</div>
) : history.length === 0 ? (
<div className="chart-empty">No position history found</div>
) : (
<div className="chart-container">
<Line
data={chartData}
options={{
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
reverse: true,
beginAtZero: false,
title: { display: true, text: 'Position (lower is better)', color: '#9ca3af' },
ticks: { color: '#9ca3af' },
grid: { color: 'rgba(58, 63, 86, 0.5)' },
},
x: {
title: { display: true, text: 'Date', color: '#9ca3af' },
ticks: { color: '#9ca3af', maxRotation: 45 },
grid: { color: 'rgba(58, 63, 86, 0.5)' },
},
},
plugins: {
legend: { display: false },
tooltip: {
backgroundColor: '#1e2136',
titleColor: '#e8ebf2',
bodyColor: '#e8ebf2',
borderColor: '#3a3f56',
borderWidth: 1,
callbacks: {
label: (context) => `Position: ${context.parsed.y}`,
},
},
},
}}
/>
</div>
)}
</div>
</div>
)
}
@@ -0,0 +1,96 @@
.sidebar {
width: 260px;
min-height: 100vh;
background: var(--bg-secondary);
border-right: 1px solid var(--border-color);
display: flex;
flex-direction: column;
padding: 1.5rem 0;
}
.sidebar-header {
padding: 0 1.5rem 1.5rem;
border-bottom: 1px solid var(--border-color);
}
.sidebar-header h3 {
margin: 0;
color: var(--text-primary);
font-size: 1.25rem;
}
.sidebar-nav {
flex: 1;
padding: 1rem 0;
display: flex;
flex-direction: column;
gap: 0.25rem;
}
.nav-link {
display: flex;
align-items: center;
gap: 0.75rem;
padding: 0.75rem 1.5rem;
color: var(--text-secondary);
text-decoration: none;
transition: all 0.15s;
font-size: 0.9375rem;
}
.nav-link:hover {
background: rgba(99, 102, 241, 0.08);
color: var(--text-primary);
}
.nav-link.active {
background: rgba(99, 102, 241, 0.12);
color: var(--accent);
border-left: 3px solid var(--accent);
}
.sidebar-footer {
padding: 1rem 1.5rem;
border-top: 1px solid var(--border-color);
}
.user-info {
display: flex;
align-items: center;
gap: 0.75rem;
margin-bottom: 1rem;
}
.user-avatar {
width: 32px;
height: 32px;
border-radius: 50%;
background: var(--accent);
color: #fff;
display: flex;
align-items: center;
justify-content: center;
font-weight: 600;
font-size: 0.875rem;
}
.username {
color: var(--text-primary);
font-size: 0.9375rem;
}
.logout-button {
width: 100%;
padding: 0.625rem;
border-radius: 8px;
border: 1px solid #ef4444;
background: transparent;
color: #ef4444;
font-size: 0.875rem;
cursor: pointer;
transition: all 0.15s;
}
.logout-button:hover {
background: rgba(239, 68, 68, 0.1);
}
@@ -0,0 +1,45 @@
import { Link, useLocation } from 'react-router-dom'
import { useAuth } from '../api'
import './Sidebar.css'
export default function Sidebar({ onLogout }) {
const { user } = useAuth()
const location = useLocation()
return (
<aside className="sidebar">
<div className="sidebar-header">
<h3>Casino Crawler</h3>
</div>
<nav className="sidebar-nav">
<Link to="/" className={`nav-link ${location.pathname === '/' || location.pathname.startsWith('/crawl') ? 'active' : ''}`}>
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
<rect x="3" y="3" width="7" height="7" />
<rect x="14" y="3" width="7" height="7" />
<rect x="3" y="14" width="7" height="7" />
<rect x="14" y="14" width="7" height="7" />
</svg>
Dashboard
</Link>
<Link to="/report" className={`nav-link ${location.pathname === '/report' ? 'active' : ''}`}>
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
<path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2" />
<rect x="8" y="2" width="8" height="4" rx="1" ry="1" />
</svg>
Casino Report
</Link>
</nav>
<div className="sidebar-footer">
<div className="user-info">
<span className="user-avatar">{user?.username?.charAt(0).toUpperCase()}</span>
<span className="username">{user?.username}</span>
</div>
<button onClick={onLogout} className="logout-button">
Sign Out
</button>
</div>
</aside>
)
}
+44
View File
@@ -0,0 +1,44 @@
:root {
--bg-primary: #151827;
--bg-secondary: #1a1d2e;
--border-color: #2e3044;
--text-primary: #e8ebf2;
--text-secondary: #9ca3af;
--accent: #6366f1;
--accent-hover: #4f46e5;
}
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
background: var(--bg-primary);
color: var(--text-primary);
}
.app {
display: flex;
min-height: 100vh;
}
.content {
flex: 1;
padding: 2rem 3rem;
overflow-y: auto;
max-height: 100vh;
}
.loading, .loading-state {
text-align: center;
padding: 4rem;
color: var(--text-secondary);
font-size: 1.125rem;
}
.error-state {
text-align: center;
padding: 3rem;
background: rgba(239, 68, 68, 0.1);
border: 1px solid rgba(239, 68, 68, 0.3);
color: #ef4444;
border-radius: 10px;
}
+10
View File
@@ -0,0 +1,10 @@
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.jsx'
createRoot(document.getElementById('root')).render(
<StrictMode>
<App />
</StrictMode>,
)
+13
View File
@@ -0,0 +1,13 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
server: {
port: 5173,
proxy: {
'/api': 'http://localhost:3001',
'/screenshots': 'http://localhost:3001'
}
}
})
+311
View File
@@ -0,0 +1,311 @@
url,title,domain
"https://www.accc.gov.au/system/files/ACCC+commissioned+report+-+The+impact+of+digital+platforms+on+news+and+journalistic+content,+Centre+for+Media+Transition+(2).pdf","The Impact of Digital Platforms on News and Journalistic Content","accc.gov.au"
"https://www.actionnetwork.com/casino","Best U.S. Real Money Online Casinos - December 2023","actionnetwork.com"
"https://www.al.com/casinos/real-money-casinos/","The best online casinos for real money in the U.S. for 2026","al.com"
"https://www.ananda.org/autobiography/","Autobiography of a Yogi, by Paramhansa Yogananda","ananda.org"
"https://www.antoniocasella.eu/restorative/Milward_2009.pdf","ePapyrus PDF Document - Antonio Casella","antoniocasella.eu"
"https://www.askgamblers.com/online-casinos/reviews","Trusted Online Casino Reviews & Ratings ✔️ (2026)","askgamblers.com"
"https://assets.kpmg.com/content/dam/kpmgsites/ie/pdf/insights/aviation/Aviation_Leaders_Report_2026.pdf.coredownload.inline.pdf","Aviation Leaders Report 2026 - KPMG agentic corporate services","assets.kpmg.com"
"https://ats.io/casinos/","Best Online Casinos USA (2026): List of Real Money Gambling Sites","ats.io"
"https://www.attorneyatwork.com/i-dont-know-what-this-word-means-is-this-post-expansive-or-extensive/","I Dont Know What This Word Means: Is This Post Expansive or Extensive?","attorneyatwork.com"
"https://www.ausonlinecasinosites.us.com/","Best Online Casinos Australia 2026: Real Money AU Casino Sites","ausonlinecasinosites.us.com"
"https://www.baseballamerica.com/stories/best-payout-online-casinos/","15 Best Payout Online Casinos 2026: High RTP Sites & Games","baseballamerica.com"
"https://baselgovernance.org/sites/default/files/2019-02/2016_gcrsport_en.pdf","Global Corruption Report: Sport - Basel Institute on Governance","baselgovernance.org"
"http://bc.math.msu.su/wiki/lib/exe/fetch.php?media=downloads:toffler_alvin_future_shock.pdf","Alvin Toffler Future Shock","bc.math.msu.su"
"https://best-7-online-casinos.com","","best-7-online-casinos.com"
"https://best-9-online-casinos.com","","best-9-online-casinos.com"
"https://best-casino-directory.com","","best-casino-directory.com"
"https://best-casino-list.com","","best-casino-list.com"
"https://best-casino-reviews.com","","best-casino-reviews.com"
"https://best-casino.com","","best-casino.com"
"https://best-casino.net","","best-casino.net"
"https://best-casino.xyz","","best-casino.xyz"
"https://best-casinos.com","","best-casinos.com"
"https://best-casinos.net","","best-casinos.net"
"https://best-online-casinos.com","","best-online-casinos.com"
"https://best-online-casinos.info","","best-online-casinos.info"
"https://best-online-casinos.net","","best-online-casinos.net"
"https://best-online-casinos.org","","best-online-casinos.org"
"https://best-online-casinos.xyz","","best-online-casinos.xyz"
"https://best.unitestatesonlinecasino.net/","Best Online Casino for Real Money & Top Offshore Casinos 2026","best.unitestatesonlinecasino.net"
"https://bestpokiesau.com/","Best Online Casinos 2026 Top Australian Pokies for Real Money","bestpokiesau.com"
"https://betanews.com/gb/most-trusted-online-gambling-sites/","Best Online Casinos That Pay Real Money - March 2026 Update","betanews.com"
"https://betpokies.org/","Best Real Money Online Casinos in Australia 2026","betpokies.org"
"https://bettergambling.ie/casino-sites/","All Online Casino Sites Ireland 2026 | BetterGambling.ie","bettergambling.ie"
"https://www.bettingusa.com/states/de/casino/","Delaware Online Casinos 2026: Legal Sites, Apps & Bonuses","bettingusa.com"
"https://www.betvictor.com/en-gb/casino","Play Online Casino Games at BetVictor's UK Casino Site","betvictor.com"
"https://www.bibliophilebooks.com/WebRoot/Store/Shops/Bibliophile/4DC1/304F/E927/3180/420E/C0A8/647D/D51E/C338WEBCAT.pdf","Gifts For Book Lovers HAPPY NEW YEAR TO ALL OUR LOVELY ...","bibliophilebooks.com"
"https://www.bis.org/publ/gten05.pdf","Report on Consolidation in the Financial Sector","bis.org"
"https://www.bitdegree.org/crypto/shuffle-casino-review","Shuffle Casino Review: Games, Bonuses, and Full Guide","bitdegree.org"
"https://www.blackjackreview.com/wp/2025/06/27/what-is-the-best-safe-gambling-site/","What Is The Best Safe Gambling Site? - Blackjack Review","blackjackreview.com"
"https://www.bluefirereader.com/certification/dictionary.pdf","a dictionary PDF - Bluefire Reader","bluefirereader.com"
"https://bnu.repository.guildhe.ac.uk/id/eprint/9388/1/1.%20Volume%20I%20Pedros%20final%20thesis%20170715.pdf","Consumer Decision Making in Restaurant Selection","bnu.repository.guildhe.ac.uk"
"https://bojoko.ca/casino/","The Best Casino Sites 2026 - Top 100 Online Casinos in Canada","bojoko.ca"
"https://www.bonus.com/online-casinos/delaware/","Delaware (DE) Best Online Casinos & Bonuses 2026","bonus.com"
"https://www.bonusfinder.com/","Compare Best Casino Bonuses and Latest Offers | BonusFinder US","bonusfinder.com"
"https://www.bookmakersreview.com/usa/west-virginia/online-casinos/","West Virginia Online Casinos: Legal Status & Player Guide (2026)","bookmakersreview.com"
"https://www.businesstoday.com.mt/gaming/gaming/2871/best_online_casinos_in_malta_for_specific_player_types","Best Online Casinos in Malta for Specific Player Types","businesstoday.com.mt"
"https://www.businessworld.ie/news/Irishluck-offers-reviews-of-casinos-and-sports-betting-sites-Irish-gamblers-575373.html","Irishluck offers reviews of casinos and sports betting sites Irish ...","businessworld.ie"
"https://cabinjohn.org/index.php/join-listserv/","Join Listserv Community of Cabin John, Maryland","cabinjohn.org"
"https://cardmates.co.uk/online-casinos","Best Online Casino Sites in the UK for 2026 - Cardmates","cardmates.co.uk"
"https://www.cardozolawreview.com/legalized-sports-wagering-in-america/","Legalized Sports Wagering in America - Cardozo Law Review","cardozolawreview.com"
"https://www.cardplayer.com/online-casinos","Best Real Money Online Casinos in the US (June 2026 )","cardplayer.com"
"https://casadelalmendro.com/","Fundacion Casa del Almendro Centro de ayuda familiar al ...","casadelalmendro.com"
"https://casino.guru/top-online-casinos","TOP 10 Online Casinos 2026 [7,000+ Real Money Sites Tested]","casino.guru"
"https://www.casino.org/reviews/","100% Independent & Trusted Online Casino Reviews (2026)","casino.org"
"https://www.casino.us/","Best US Online Casinos | Top 10 Casinos Compared 2026","casino.us"
"https://casinogrounds.com/casinos/","Online Casino Reviews by Professional Gamblers (Updated)","casinogrounds.com"
"https://casinologia.com/top-10-best-casinos-list/","Top 10 Best Online Casinos at the Moment | 2026","casinologia.com"
"https://www.casinomeister.com/online-casinos/reviews/","Bluntly Honest Online Casino Reviews (2026) - Casinomeister","casinomeister.com"
"https://www.casinorating.com/","Licensed Online Casinos by Country 2026","casinorating.com"
"https://casinoreviews.com/","Online Casino Reviews - Trusted Reviews & Ratings | CasinoReviews.com","casinoreviews.com"
"https://www.casinoreviews.net/","Independent Online Casino Reviews 2026 | Casinoreviews.net","casinoreviews.net"
"https://www.casinos.com/best-sites","Best Casino Sites June 2026 | Find Casinos Online","casinos.com"
"https://www.casinoslists.com/","CasinosLists.com: Complete Online Casino Lists & Bonuses","casinoslists.com"
"https://www.casinovendors.com/vendorsatoz/a/","Vendors A-Z (A) - Casino Vendors","casinovendors.com"
"https://cdn.osce.org/sites/default/files/f/documents/b/b/13836.pdf","The Media Freedom Internet Cookbook - OSCE.org","cdn.osce.org"
"https://chipy.com/casinos","Authentic Online Casino Reviews by Real Players ⭐ - Chipy.com","chipy.com"
"https://www.collinsdictionary.com/us/dictionary/english-thesaurus/expansive","Synonyms of 'expansive' in American English","collinsdictionary.com"
"https://commission.europa.eu/system/files/2022-12/Annex%20I_LiteratureReview_20210319_clean_dsj_v3.0_a.pdf","Study on the impact of new technologies on free and fair elections ...","commission.europa.eu"
"https://comparasino.com/casino-bonuses/","Top Online Casino Bonuses 2026 | 10x Wagering Cap Compliant","comparasino.com"
"https://www.covers.com/casino","Best Real Money Online Casinos for US Players 2026 - Covers.com","covers.com"
"https://www.craveguitars.co.uk/tag/guitar-music/page/2/","guitar music Page 2 - CRAVE Guitars","craveguitars.co.uk"
"https://cs.arizona.edu/~mercer/Projects/BoggleWords","Untitled","cs.arizona.edu"
"https://www.cs.princeton.edu/courses/archive/spring18/cos226/assignments/autocomplete/testing/words-333333.txt","words-333333 - cs.Princeton","cs.princeton.edu"
"https://dappradar.com/narratives/gambling/platforms","Best Crypto Gambling Sites 2026: List of Top No KYC Crypto Casinos","dappradar.com"
"https://www.dcaf.ch/sites/default/files/publications/documents/Compendium_Building_Integrity_and_Reducing_Corruption_in_Defence.pdf","Building Integrity and Reducing Corruption in Defence","dcaf.ch"
"https://deadspin.com/sweepstakes-casinos/free-slots-real-money/","Free Online Slots For Real Money: Free Play Casinos Ranked","deadspin.com"
"https://delawarepark.betrivers.com/","BetRivers at Delaware Park Casino & Racing Online Casino ...","delawarepark.betrivers.com"
"https://des.assam.gov.in/sites/default/files/swf_utility_folder/departments/ecostat_medhassu_in_oid_3/this_comm/tourism_sss.pdf","2.Development of a Tourism Convenience Index for the Major ...","des.assam.gov.in"
"https://detective.gumer.info/txt/cambridge.pdf","Cambridge Companion Crime Fiction","detective.gumer.info"
"https://www.dictionary.com/browse/extensive","EXTENSIVE Definition & Meaning | Dictionary.com","dictionary.com"
"https://documents1.worldbank.org/curated/en/990601467315599193/pdf/105761-REVISED-CDI-Report-FinalLatest-PUBLIC.pdf","The Potential Economic Role of the Caribbean Diaspora","documents1.worldbank.org"
"https://doe.gov.in/files/cenetral-pay_document/7cpc_report_eng.pdf","Report of the Seventh Central Pay Commission","doe.gov.in"
"https://dokumen.pub/oxford-thesaurus-of-current-english.html","Oxford Thesaurus of Current English - DOKUMEN.PUB","dokumen.pub"
"https://www.eecis.udel.edu/~lliao/cis320f05/dictionary.txt","Dictionary","eecis.udel.edu"
"https://esports-news.co.uk/gambling-sites/","Best Gambling Websites in 2026 - Top 10 Online Casinos UK","esports-news.co.uk"
"https://esportsinsider.com/us/gambling/best-online-casinos-usa","Best Online Casinos for Real Money in the USA for June 2026","esportsinsider.com"
"https://europeangaming.eu/portal/best-online-casinos-europe/","Best Online Casinos Europe 2026: Top 15 EU Casino Sites","europeangaming.eu"
"https://www.eurosif.org/wp-content/uploads/2021/10/European-SRI-2018-Study.pdf","european sri study | eurosif","eurosif.org"
"https://exclusive-casino.com","","exclusive-casino.com"
"https://exclusive-casino.net","","exclusive-casino.net"
"https://exclusive-casino.org","","exclusive-casino.org"
"https://www.ey.com/content/dam/ey-unified-site/ey-com/en-in/insights/media-entertainment/images/ey-shape-the-future-indian-media-and-entertainment-is-scripting-a-new-story.pdf","Indian media and entertainment is scripting a new story - EY","ey.com"
"https://www.facom.ufu.br/~albertini/2sem2015/ori/dic.txt","dic.txt - Facom/UFU","facom.ufu.br"
"https://fast-casino.com","","fast-casino.com"
"https://fast-casino.xyz","","fast-casino.xyz"
"https://fast-casinos.com","","fast-casinos.com"
"https://fast-casinos.info","","fast-casinos.info"
"https://fast-casinos.net","","fast-casinos.net"
"https://fast-casinos.org","","fast-casinos.org"
"http://www.fatf-gafi.org/content/dam/fatf-gafi/reports/Asset-Recovery-Guidance-Best-Practices.pdf.coredownload.pdf","Asset Recovery Guidance and Best Practices - FATF","fatf-gafi.org"
"https://fbcclassroom.com/wp-content/uploads/2022/07/The-Worlds-Religions-Our-Great-Wisdom-Traditions-by-Huston-Smith-z-lib.org_.pdf","The World's Religions - Global Classroom by Filadelfia Bible College","fbcclassroom.com"
"https://files.spawningpool.net/docs/Vault2.0.-.TTRPG-Gamebooks/Feng%20Shui/Feng%20Shui%20%5B2nd%20ed%5D/FS%202e%20-%20Feng%20Shui%202%20-%20Core%20Rulebook%20v2.1%20%7BAG4020%7D.pdf","FS 2e - Feng Shui 2 - Core Rulebook v2.1 {AG4020}.pdf","files.spawningpool.net"
"https://filmtalk.org/film-books/","FILM BOOKS","filmtalk.org"
"https://focus-asia.com/the-pokies-casino-australia-2026-review/","Australias Top-Rated Real Money Casino Site","focus-asia.com"
"https://forum.mr-gamble.com/topic/6646-top-10-casinos-list/","Top 10 casinos list - Mr. Gamble Casino Forum","forum.mr-gamble.com"
"https://www.fqmagazine.co.uk/gear-and-gadgets-2/gaming/item/69229-exploring-the-top-online-casinos-with-fast-payouts.html","Exploring the Top Online Casinos With Fast Payouts - FQ Magazine","fqmagazine.co.uk"
"https://www.freep.com/story/sports/best-online-casinos-for-real-money/86800526007/","Best online casinos for real money in the U.S. (June 2026)","freep.com"
"https://www.gambling.com/us/online-casinos","How does Gambling.com rate and review online casinos?","gambling.com"
"https://www.gamblingcommission.gov.uk/public-register/business/detail/domain-names/39326","Skill On Net Limited - Domain names - Gambling Commission","gamblingcommission.gov.uk"
"https://www.gamblinginsider.com/news/109371/ireland-gambling-regulator-licensing-fines-grai","Ireland Gambling Regulator Opens Licensing, Fines Up to €20M","gamblinginsider.com"
"https://www.gamblingnerd.com/","Best Online Gambling Sites in 2026 - Trusted Gambling Websites","gamblingnerd.com"
"https://gamblingriskinformednovascotia.ca/wp-content/uploads/2019/01/SEIG_FINAL_REPORT_2011.pdf","The Social and Economic Impacts of Gambling","gamblingriskinformednovascotia.ca"
"https://www.gamblingsite.com/michigan/","Michigan Online Gambling - Best MI Gambling Sites in (2026)","gamblingsite.com"
"https://www.gamblingsites.com/","Best Online Gambling Sites in 2026 - Ranked by Real Players","gamblingsites.com"
"https://www.gameshub.com/australia/online-casinos/pokies/","Best Online Pokies in Australia for Real Money in June","gameshub.com"
"https://www.gamesreviews.com/casino/michigan/","Michigan Online Casinos February, 2026: All Real Money Michigan Online Casinos","gamesreviews.com"
"https://gamezinger.com/casinos/delaware/","Best Delaware Online Casinos - Top DE Casino Sites 2026","gamezinger.com"
"https://gamingamerica.com/online-casinos/michigan","Top Michigan Online Casinos in 2026","gamingamerica.com"
"https://www.gamingtoday.com/","Gaming Today | Americas Home for Gambling News & Reviews","gamingtoday.com"
"https://www.gatesnotes.com/work/save-lives/reader/20-years-to-give-away-virtually-all-my-wealth","20 years to give away virtually all my wealth | Bill Gates","gatesnotes.com"
"https://getb8.us/online-casinos/","Online Casino Reviews - Best Trusted Online Casino Sites 2026 by Getb8","getb8.us"
"https://getbets.us/casinos/","Online Casinos USA 2026 — Tested & Ranked | GetBets","getbets.us"
"https://gg.co.uk/online-casinos/","Best Online Casinos UK - Top Real Money Casinos 2026 - GG.co.uk","gg.co.uk"
"https://www.ginx.tv/en/casino/michigan","Best Michigan Online Casinos 2026 | Trusted Online Casinos in MI","ginx.tv"
"https://www.glasgowtimes.co.uk/news/25703087.top-six-best-online-casino-review-sites/","Top six best online casino review sites | Glasgow Times","glasgowtimes.co.uk"
"https://globallawexperts.com/top-10-jurisdictions-to-launch-your-licensed-gambling-business/","Top 10 Jurisdictions To Launch Your Licensed Gambling Business","globallawexperts.com"
"https://www.grin.com/document/322750?srsltid=AfmBOorZNlBbFWB6hJnbkYgVKE5xOFgl2dqddYD2oVvRr6oLoYiA8Yy1","The Middle Class or You only live twice | Grin","grin.com"
"https://gvrkiran.github.io/content/Betting_apps_India.pdf","Quantifying the Illicit Ecosystem of Betting Apps in India","gvrkiran.github.io"
"https://hendrix-cs.github.io/csci150/data/english3.txt","Common English Words - Hendrix College Computer Science","hendrix-cs.github.io"
"https://www.hltv.org/betting/online-casinos","Best Online Casino Sites June 2026 | HLTV.org","hltv.org"
"https://huggingface.co/microsoft/cocolm-base/resolve/main/dict.txt?download=true","736 kB - Hugging Face","huggingface.co"
"https://icom.museum/wp-content/uploads/2025/02/IRAPFM-FINAL_7fev_2025-1.pdf","A worldwide answer from Museums","icom.museum"
"https://ifdb.org/allreviews?id=lzj370u772du3hx7&sortby=&ratings=yes&pg=all","Ratings and Reviews by Mike Russo","ifdb.org"
"https://igamingfuture.com/sweepstakes-casinos/promo-codes/no-deposit-bonus/","Sweepstakes Casino No Deposit Bonuses for June 2026","igamingfuture.com"
"https://www.imdb.com/list/ls002806018/","Most Handsome Men of All Time - IMDb","imdb.com"
"https://www.institutparisregion.fr/fileadmin/NewEtudes/Etude_481/c146_gb.pdf","Large-Scale Urban Development Projects in Europe","institutparisregion.fr"
"https://inventwithpython.com/dictionary.txt","dictionary.txt - Invent with Python","inventwithpython.com"
"https://justgamblers.com/michigan/online-casinos/","Best MI Online Casinos 2026: List of Legal Michigan Casino Sites","justgamblers.com"
"https://www.kaggle.com/hamedetezadi/spam-e-mails-using-naive-bayes/execution","SPAM E-MAILS USING NAIVE BAYES!","kaggle.com"
"https://www.kit.nl/wp-content/uploads/2024/03/unique-features-of-agricultural-cooperatives-in-sub-Saharan-Africa.pdf","HANDBOOK OF RESEARCH ON COOPERATIVES AND MUTUALS","kit.nl"
"https://lcb.org/","3669 Online Casinos Reviewed with 8681 Bonuses ranked by Game","lcb.org"
"https://legal-casino.com","","legal-casino.com"
"https://legal-casino.net","","legal-casino.net"
"https://legal-casinos.net","","legal-casinos.net"
"https://legal-online-casinos.com","","legal-online-casinos.com"
"https://www.legalsportsreport.com/online-casinos/","Best Online Casinos for Real Money: Top Online Casino for US in June 2026","legalsportsreport.com"
"https://www.lexology.com/library/detail.aspx?g=4375fbe8-4efe-44a4-9b7f-74a3622b1679","First-step analysis: gaming in Malta - Lexology","lexology.com"
"https://www.library.ca.gov/wp-content/uploads/crb-reports/97-003.pdf","GAMBLING IN CALIFORNIA","library.ca.gov"
"https://licensed-casino.com","","licensed-casino.com"
"https://licensed-online-casinos.com","","licensed-online-casinos.com"
"https://www.maltatoday.com.mt/sponsored/sponsored/134110/another_top_10_website_pros_and_cons_of_using_casino_comparison_websites","Another Top 10 website: Pros and cons of using casino comparison ...","maltatoday.com.mt"
"https://manuspillai.com/","Manu S Pillai","manuspillai.com"
"https://maritzburgcollege.co.za/wp-content/uploads/2025/10/2025-10-21-MCollege-Magazine-2024-in-2025-LR-spreads-for-website.pdf","maritzburg college nº 159 september 2025 ma gazine 2024","maritzburgcollege.co.za"
"https://mcds-therapy.eu/","Best Online Casinos Ireland | Top Casino Sites for 2026","mcds-therapy.eu"
"https://mediarep.org/bitstreams/00a072dd-62c7-4cff-baed-acbf163cd05c/download","Game Research Methods. An Overview - Media/Rep","mediarep.org"
"https://mega-casino.com","","mega-casino.com"
"https://mega-casino.info","","mega-casino.info"
"https://mega-casino.net","","mega-casino.net"
"https://mega-casino.org","","mega-casino.org"
"https://mega-casino.site","","mega-casino.site"
"https://mega-casino.xyz","","mega-casino.xyz"
"https://mega-casinos.com","","mega-casinos.com"
"https://mergerscorp.com/businesses-for-sale/","Established Businesses for Sale - MergersCorp M&A International","mergerscorp.com"
"https://www.merriam-webster.com/thesaurus/expansive","EXPANSIVE Synonyms: 28 Similar and Opposite Words | Merriam-Webster Thesaurus","merriam-webster.com"
"https://www.metropolitancasinos.com/","Metropolitan Gaming | Top Casinos, Bars and Restaurants","metropolitancasinos.com"
"https://www.metrotimes.com/discover/best-gambling-sites-38226192/","Best Gambling Sites That Pay Out Real Money in May, 2026","metrotimes.com"
"https://www.mfa.gov.cn/eng/zy/jj/2030kcxfzyc/202406/P020240606605159427708.pdf","China's Progress Report on Implementation of the 2030 Agenda for ...","mfa.gov.cn"
"https://www.mga.org.mt/","Malta Gaming Authority: Home","mga.org.mt"
"https://mgaleg.maryland.gov/cmte_testimony/2025/bat/25362_01302025_15145-69.pdf","MD Senate iGaming Hearing Rebuck Testimony (Extend - Maryland","mgaleg.maryland.gov"
"https://miller.readthedocs.io/en/6.13.0/data/english-words.txt","english-words.txt - Miller","miller.readthedocs.io"
"https://www.mkaugaming.com/what-makes-a-gambling-article-actually-in-depth/","What Makes A Gambling Article Actually In-Depth?","mkaugaming.com"
"https://www.mlive.com/online-casinos/sites/","Best Michigan Online Casinos 2026 Real Money Sites in MI","mlive.com"
"https://www.moenr.gov.bt/?p=7837","Vacancy Announcement - - MoENR","moenr.gov.bt"
"https://montenegrobet.me/wp-content/uploads/2014/11/Journal-Of-Gambling-Issues-kandaska-studija-o-uticaju-udaljenosti-na-maloljetnike.pdf","Journal of Gambling Issues Issue 20, June 2007 - Montenegrobet","montenegrobet.me"
"https://www.moviemaker.com/best-online-pokies-au/","Best Online Pokies in Australia 2026: Top 15 Real Money Sites","moviemaker.com"
"https://mr-gamble.com/en/online-casino/","Compare Online Casinos 2026 — Compare Gambling Sites","mr-gamble.com"
"https://www.mrgreen.com/","Mr Green Online Casino Award-Winning Slots & Big Jackpots","mrgreen.com"
"https://mrq.com/","Play the best UK online casino games today at MrQ","mrq.com"
"https://muddyrivernews.com/igaming-hub/best-online-pokies-australia-2026-top-rated-real-money-pokies-sites-for-aussie-players-updated-june-2026/20260602140000/","Best Online Pokies Australia 2026: Top Rated Real Money Pokies Sites For Aussie Players (Updated June 2026 Muddy River News","muddyrivernews.com"
"https://musicsite1.wordpress.com/music-lists-2/the-guardian-1000-albums-to-hear-before-you-die/","The Guardian 1000 Albums to Hear Before you Die | The Music Site","musicsite1.wordpress.com"
"https://mylanguages.at.ua/Pygmalion-George_Bernard_Shaw.pdf","George Bernard Shaw","mylanguages.at.ua"
"http://ndl.ethernet.edu.et/bitstream/123456789/55467/1/163.pdf.pdf","The Arab Awakening","ndl.ethernet.edu.et"
"https://newrevenue.org/wp-content/uploads/2021/02/how-not-to-be-wrong-ellenberg-20169131536812.pdf","How Not to Be Wrong : The Power of Mathematical Thinking ...","newrevenue.org"
"https://news.ycombinator.com/item?id=48420827","Ask HN: Why is the HN crowd so anti-AI? - Hacker News","news.ycombinator.com"
"https://next.io/online-casinos-us/","Best US Online Casinos 2026: Updated Real Money Casinos List","next.io"
"https://www.nme.com/guides/gaming-guides/connections-answers-hints-groups-today-3557066","'Connections' answers and hints for today, June 21 - NME","nme.com"
"https://northeasttimes.com/online-casinos/","Best Online Casinos That Pay Real Money: June, 2026","northeasttimes.com"
"https://www.oddschecker.com/us/casino","Best US Online Casino Bonuses: Claim $10k+ of Sign up Bonuses","oddschecker.com"
"https://www.oecd.org/content/dam/oecd/en/publications/reports/2025/02/states-of-fragility-2025_c9080496/81982370-en.pdf","States of Fragility 2025 | OECD","oecd.org"
"https://onlinegamblingme.com/casino-reviews/","Best Online Casino Reviews for 2026 - Online Gambling Me","onlinegamblingme.com"
"https://www.oychicago.com/","Top Michigan Online Casinos in 2026","oychicago.com"
"https://www.parliament.uk/globalassets/documents/lords-committees/gambling-committee/gambling-written-evidence-volume.pdf","Contents - UK Parliament","parliament.uk"
"https://peacekeeping.un.org/sites/default/files/securing_development-public_finance_and_the_security_sector.pdf","Securing Development: Public Finance and the Security Sector","peacekeeping.un.org"
"https://www.pennlive.com/online-casinos/2026/03/best-real-money-online-casino-bonuses-fanatics-casino-promo-code-vs-betparx-casino-promo-code-pennlive.html","Online Casino Bonus Comparison: Fanatics vs. betPARX + ...","pennlive.com"
"https://physionet.org/files/deid/1.1/dict/sno_edited.txt?download","Download - PhysioNet","physionet.org"
"https://www.playmichigan.com/online-casino/","Best Michigan Online Casinos 2026 | All Michigan Online Casinos List","playmichigan.com"
"https://pmc.ncbi.nlm.nih.gov/articles/PMC11122160/","Artificial Intelligence and Healthcare: A Journey through History ...","pmc.ncbi.nlm.nih.gov"
"https://pokerfuse.com/online-casinos/bonuses/","Where to Play: Comparing the Best US Online Casino Bonuses 2026 | Pokerfuse","pokerfuse.com"
"https://www.pokerlistings.com/casino-sites","Best Online Casino Sites Reviews (June 2026) Top Real ...","pokerlistings.com"
"https://www.pokernews.com/casino/review/","Online Casino Reviews & Ratings for 2026 | PokerNews","pokernews.com"
"https://www.pokerology.com/best-online-casinos/","Best Online Casinos for Real Money in June, 2026","pokerology.com"
"https://www.pokerstrategy.com/online-casinos/","Top Online Casinos for Real Money in the USA 2026","pokerstrategy.com"
"https://www.pokertube.com/article/fast-payout-casinos","Best Instant Withdrawal Casinos in 2026: 15 Fast Payout Sites","pokertube.com"
"https://pokie.inc/casino-category/real-money-casinos/","Best Real Money Online Casinos Australia 2026 Tested & Ranked","pokie.inc"
"https://premium-casino.xyz","","premium-casino.xyz"
"https://premium-casinos.com","","premium-casinos.com"
"https://pro-casino.com","","pro-casino.com"
"https://pro-casino.site","","pro-casino.site"
"https://pro-casinos.com","","pro-casinos.com"
"https://www.profitduel.com/casino-reviews","Casino Reviews U.S. | Top 38 Online Casinos Ranked | ProfitDuel","profitduel.com"
"https://www.quora.com/Which-is-the-most-trusted-online-casino-review-site","Which is the most trusted online casino review site? - Quora","quora.com"
"https://www.racingpost.com/online-casino/best-sites/","Best Online Casinos (2026): Top 60 UKGC Licensed Sites","racingpost.com"
"https://rated-casino.com","","rated-casino.com"
"https://readingroo.ms/5/7/5/7/57570/57570-h/57570-h.htm","The Project Gutenberg eBook of Famouse Composers And Their ...","readingroo.ms"
"https://www.reddit.com/r/TooAfraidToAsk/comments/1q4257c/looking_for_reliable_best_real_money_casinos_2026/","looking for reliable best real money casinos 2026, where do you actually play?","reddit.com"
"https://repositorio.usp.br/directbitstream/c9aef84e-5dcc-4d9f-8214-6082225699cf/3151853.pdf","A 150 Years' Celebration of Darwin's Book on Human Evolution and ...","repositorio.usp.br"
"https://research.chalmers.se/publication/527805/file/527805_Fulltext.pdf","The Digital Transformation of Labor - research.chalmers.se","research.chalmers.se"
"https://www.researchgate.net/profile/Nataliya-Panasenko/publication/349287090_Tactile_information-processing_channel_in_the_plants_names/links/6027d4c492851c4ed56bdd81/Tactile-information-processing-channel-in-the-plants-names.pdf","LANGUAGE, LITERATURE AND CULTURE IN A CHANGING ...","researchgate.net"
"https://resilientcitiesnetwork.org/downloadable_resources/UR/Resilient-Cities-Resilient-Lives-Learning-from-the-100RC-Network.pdf","Resilient Cities, Resilient Lives Learning from the 100RC Network","resilientcitiesnetwork.org"
"https://rg.org/casinos","Best Real Money Online Casinos June 2026: All Legal States - RG.org","rg.org"
"https://www.right-to-education.org/sites/right-to-education.org/files/resource-attachments/Education_International_Hidden_Privatisation_in_Public_Education.pdf","Hidden Privatisation in Public Education","right-to-education.org"
"https://www.rotowire.com/betting/casinos/delaware","Delaware Online Casinos: Legal Sites and How the Market Works","rotowire.com"
"https://rrc.cvc.uab.es/downloads/GenericVocabulary.txt","generic dictionary - Robust Reading Competition","rrc.cvc.uab.es"
"https://rsrglobal.org/uncategorized/casino-luckysheriff-support/","I Reviewed LuckySheriff Casino RTPs to Industry Average Data for ...","rsrglobal.org"
"https://sabew.org/2026/03/2025-best-in-business-honorees-judging-comments/","2025 Best in Business Honorees Judging Comments - SABEW","sabew.org"
"https://safe-casino.com","","safe-casino.com"
"https://safe-casino.net","","safe-casino.net"
"https://safe-casino.org","","safe-casino.org"
"https://safe-casino.xyz","","safe-casino.xyz"
"https://safe-casinos.info","","safe-casinos.info"
"https://safe-casinos.net","","safe-casinos.net"
"https://www.scribd.com/document/945048280/Bloomsbury-Crossword-Solver-BLOOMSBURY-CROSSWORD-SOLVER-Title-WeLib-org","Bloomsbury Crossword Solver Guide | PDF - Scribd","scribd.com"
"https://siege.gg/news/the-top-5-best-casino-review-sites-you-can-trust","The Top 5 Best Casino Review Sites You Can Trust","siege.gg"
"https://sigma.world/play/online-casinos/","Best Online Casino 2026 | Top Casino Sites - SiGMA","sigma.world"
"https://www.similarweb.com/top-websites/gambling/casinos/","Top Casinos Websites Ranking | Similarweb","similarweb.com"
"https://sites.cc.gatech.edu/classes/AY2012/cs2316_fall/codesamples/6of12.txt","6of12.txt","sites.cc.gatech.edu"
"https://sites.cs.ucsb.edu/~mikec/cs16/misc/demos/savitch10pgms/Chapter07/words.txt","words.txt - UCSB Computer Science","sites.cs.ucsb.edu"
"https://slotsspot.com/online-casinos/reviews/","Best Online Casino Reviews 2026 | 100% Trusted & Independent","slotsspot.com"
"https://www.slotstemple.com/us/states/mi/","Michigan Casinos | Online Casino Michigan Reviews","slotstemple.com"
"https://www.slotsup.com/","SlotsUp: User-Centric Guide in the Online Casino Industry","slotsup.com"
"https://smartintegratedsystem.com/blog/1","Smart Integrated System bersama dengan Revolusi Industri 4.0","smartintegratedsystem.com"
"https://soldier.army.mod.uk/media/0wnn1o3v/soldier-mar-08.pdf","DESIGN FOR LIFE - Soldier magazine - The British Army","soldier.army.mod.uk"
"https://www.sportsbookreview.com/casino/us/michigan/","Michigan Online Casinos: Best Gambling Sites in MI 2026","sportsbookreview.com"
"https://www.sportsline.com/casinos/","Best online casinos for real money: Picking the top online casino for 2026","sportsline.com"
"https://www.strafe.com/esports-betting/casino/","Best Online Casinos 2026: Ratings & Reviews [164+ Toplist]","strafe.com"
"https://www.stripe.press/poor-charlies-almanack/book","Poor Charlie's Almanack: The Essential Wit and Wisdom of Charles ...","stripe.press"
"https://super-casino.com","","super-casino.com"
"https://super-casino.net","","super-casino.net"
"https://super-casino.org","","super-casino.org"
"https://super-casinos.com","","super-casinos.com"
"https://super-casinos.net","","super-casinos.net"
"https://super-online-casinos.net","","super-online-casinos.net"
"https://super.cs.uchicago.edu/usable18/dictionarysmall.txt","English dictionary","super.cs.uchicago.edu"
"https://www.tensai.org/ebooks/Cognitive%20Psychology_Tensai.pdf","Cognitive Psychology - Tensai STEM Academy","tensai.org"
"https://thegilbreths.com/best-online-casino/","TOP 10 Online Casino Australia Real Money: Best Online Casinos ...","thegilbreths.com"
"https://www.thelines.com/casino/bonuses/","Best Real Money Casino Bonuses & Promos for June 2026 in US","thelines.com"
"https://theplaybookusa.com/states/michigan/","Online Casinos Michigan 2026 Best Legal Sites & Bonuses | The Playbook USA","theplaybookusa.com"
"https://www.thesaurus.com/browse/extensive","EXTENSIVE Synonyms & Antonyms - 110 words | Thesaurus.com","thesaurus.com"
"https://www.thesportsgeek.com/online-casinos/delaware/","Best Delaware Online Casinos: Real Money DE Online Casinos 2026","thesportsgeek.com"
"https://timesofmalta.com/article/10-best-online-casino-sites-malta-a2.1108064","10 best online casino sites in Malta","timesofmalta.com"
"https://toomaisquare.co.uk/casinos/online-casinos/paypal/","PayPal Casino UK Choose from 100+ Sites with Bonuses","toomaisquare.co.uk"
"https://top-10-casinos.com","","top-10-casinos.com"
"https://top-10-casinos.net","","top-10-casinos.net"
"https://top-4-casinos.com","","top-4-casinos.com"
"https://top-casino-directory.com","","top-casino-directory.com"
"https://top-casino-list.com","","top-casino-list.com"
"https://top-casino-reviews.com","","top-casino-reviews.com"
"https://top-casino.com","","top-casino.com"
"https://top-casino.info","","top-casino.info"
"https://top-casino.net","","top-casino.net"
"https://top-casino.org","","top-casino.org"
"https://top-casino.xyz","","top-casino.xyz"
"https://top-casinoreviews.com","","top-casinoreviews.com"
"https://top-casinos.com","","top-casinos.com"
"https://top-casinos.org","","top-casinos.org"
"https://top-casinos.xyz","","top-casinos.xyz"
"https://top-online-casinos.com","","top-online-casinos.com"
"https://top.michigancasinosites.org/","Top 10 Michigan Online Casinos & Apps 2026","top.michigancasinosites.org"
"https://www.top10casinos.com/online-casino/index.html","Best Online Casino Sites : Expertly Reviewed Top Casinos","top10casinos.com"
"https://tribuna.com/en/casino/ratings/united-kingdom-casinos/","Best Online Casino in United Kingdom 2026 - Tribuna.com","tribuna.com"
"https://trinket.io/python/56a03639a8","Put Interactive Python Anywhere on the Web - Trinket","trinket.io"
"https://trusted-casino-list.com","","trusted-casino-list.com"
"https://trusted-casino.com","","trusted-casino.com"
"https://trusted-casino.net","","trusted-casino.net"
"https://trusted-casinos.com","","trusted-casinos.com"
"https://trusted-casinos.net","","trusted-casinos.net"
"https://trusted-online-casinos.com","","trusted-online-casinos.com"
"https://trusted-online-casinos.org","","trusted-online-casinos.org"
"https://www.trustpilot.com/categories/casino","Best companies in Casino on Trustpilot","trustpilot.com"
"https://ultimate-casino.com","","ultimate-casino.com"
"https://ultimate-casinos.com","","ultimate-casinos.com"
"https://ultra-casino.com","","ultra-casino.com"
"https://ultra-casino.info","","ultra-casino.info"
"https://ultra-casino.net","","ultra-casino.net"
"https://ultra-casino.org","","ultra-casino.org"
"https://ultra-casinos.com","","ultra-casinos.com"
"http://www.un-documents.net/our-common-future.pdf","Our Common Future: Report of the World Commission on ...","un-documents.net"
"https://www.unodc.org/roseap/uploads/documents/Publications/2024/Casino_Underground_Banking_Report_2024.pdf","Casinos, Money Laundering, Underground Banking, and ...","unodc.org"
"https://users.cis.fiu.edu/~weiss/cop3337_f99/dict.txt","The dictionary","users.cis.fiu.edu"
"https://ustr.gov/sites/default/files/files/Press/Reports/2025NTE.pdf","FOREIGN TRADE BARRIERS - USTR","ustr.gov"
"https://uswfoxtail.blob.core.windows.net/foxtail-prod-uploads/documents/FINAL_ABSTRACTS.pdf","Abstracts","uswfoxtail.blob.core.windows.net"
"https://www.vastdata.com/whitepaper","The VAST Platform White Paper - VAST Data","vastdata.com"
"https://vasylivanovich.com.ua/blog/optymalni-terminy-posadky-sadzhanciv-derev-ta-kushchiv?srsltid=AfmBOorqh2kcpY7Ggd8xuUBrJKl7KECaMgw0KpHkR58B9XjqruDQgK2q","Коли найкращий час для посадки дерев та кущів","vasylivanovich.com.ua"
"https://www.vegasinsider.com/casinos/","Best Online Casinos in the US 2026 — Real Money Sites Ranked","vegasinsider.com"
"https://verified-casinos.com","","verified-casinos.com"
"https://wikibingo.co.uk/","Best Fast Withdrawal & Instant Payout Casinos UK (2026)","wikibingo.co.uk"
"https://www.wits.ac.za/alumni/obituaries/obituary-content-by-year/","Obituary content by year - Wits University","wits.ac.za"
"https://wizardofodds.com/online-casinos/reviews/","Best Online Casinos: #1 List of Reviewed & Rated Operators! 2026 (1268 Reviewed)","wizardofodds.com"
"https://wsgc.wa.gov/sites/default/files/2023-10/Commission%20Packet_5.pdf","WASHINGTON STATE GAMBLING COMMISSION PUBLIC MEETING","wsgc.wa.gov"
"https://yalelawjournal.org/note/amazons-antitrust-paradox","Amazon's Antitrust Paradox - Yale Law Journal","yalelawjournal.org"
1 url title domain
2 https://www.accc.gov.au/system/files/ACCC+commissioned+report+-+The+impact+of+digital+platforms+on+news+and+journalistic+content,+Centre+for+Media+Transition+(2).pdf The Impact of Digital Platforms on News and Journalistic Content accc.gov.au
3 https://www.actionnetwork.com/casino Best U.S. Real Money Online Casinos - December 2023 actionnetwork.com
4 https://www.al.com/casinos/real-money-casinos/ The best online casinos for real money in the U.S. for 2026 al.com
5 https://www.ananda.org/autobiography/ Autobiography of a Yogi, by Paramhansa Yogananda ananda.org
6 https://www.antoniocasella.eu/restorative/Milward_2009.pdf ePapyrus PDF Document - Antonio Casella antoniocasella.eu
7 https://www.askgamblers.com/online-casinos/reviews Trusted Online Casino Reviews & Ratings ✔️ (2026) askgamblers.com
8 https://assets.kpmg.com/content/dam/kpmgsites/ie/pdf/insights/aviation/Aviation_Leaders_Report_2026.pdf.coredownload.inline.pdf Aviation Leaders Report 2026 - KPMG agentic corporate services assets.kpmg.com
9 https://ats.io/casinos/ Best Online Casinos USA (2026): List of Real Money Gambling Sites ats.io
10 https://www.attorneyatwork.com/i-dont-know-what-this-word-means-is-this-post-expansive-or-extensive/ I Don’t Know What This Word Means: Is This Post Expansive or Extensive? attorneyatwork.com
11 https://www.ausonlinecasinosites.us.com/ Best Online Casinos Australia 2026: Real Money AU Casino Sites ausonlinecasinosites.us.com
12 https://www.baseballamerica.com/stories/best-payout-online-casinos/ 15 Best Payout Online Casinos 2026: High RTP Sites & Games baseballamerica.com
13 https://baselgovernance.org/sites/default/files/2019-02/2016_gcrsport_en.pdf Global Corruption Report: Sport - Basel Institute on Governance baselgovernance.org
14 http://bc.math.msu.su/wiki/lib/exe/fetch.php?media=downloads:toffler_alvin_future_shock.pdf Alvin Toffler Future Shock bc.math.msu.su
15 https://best-7-online-casinos.com best-7-online-casinos.com
16 https://best-9-online-casinos.com best-9-online-casinos.com
17 https://best-casino-directory.com best-casino-directory.com
18 https://best-casino-list.com best-casino-list.com
19 https://best-casino-reviews.com best-casino-reviews.com
20 https://best-casino.com best-casino.com
21 https://best-casino.net best-casino.net
22 https://best-casino.xyz best-casino.xyz
23 https://best-casinos.com best-casinos.com
24 https://best-casinos.net best-casinos.net
25 https://best-online-casinos.com best-online-casinos.com
26 https://best-online-casinos.info best-online-casinos.info
27 https://best-online-casinos.net best-online-casinos.net
28 https://best-online-casinos.org best-online-casinos.org
29 https://best-online-casinos.xyz best-online-casinos.xyz
30 https://best.unitestatesonlinecasino.net/ Best Online Casino for Real Money & Top Offshore Casinos 2026 best.unitestatesonlinecasino.net
31 https://bestpokiesau.com/ Best Online Casinos 2026 – Top Australian Pokies for Real Money bestpokiesau.com
32 https://betanews.com/gb/most-trusted-online-gambling-sites/ Best Online Casinos That Pay Real Money - March 2026 Update betanews.com
33 https://betpokies.org/ Best Real Money Online Casinos in Australia 2026 betpokies.org
34 https://bettergambling.ie/casino-sites/ All Online Casino Sites Ireland 2026 | BetterGambling.ie bettergambling.ie
35 https://www.bettingusa.com/states/de/casino/ Delaware Online Casinos 2026: Legal Sites, Apps & Bonuses bettingusa.com
36 https://www.betvictor.com/en-gb/casino Play Online Casino Games at BetVictor's UK Casino Site betvictor.com
37 https://www.bibliophilebooks.com/WebRoot/Store/Shops/Bibliophile/4DC1/304F/E927/3180/420E/C0A8/647D/D51E/C338WEBCAT.pdf Gifts For Book Lovers HAPPY NEW YEAR TO ALL OUR LOVELY ... bibliophilebooks.com
38 https://www.bis.org/publ/gten05.pdf Report on Consolidation in the Financial Sector bis.org
39 https://www.bitdegree.org/crypto/shuffle-casino-review Shuffle Casino Review: Games, Bonuses, and Full Guide bitdegree.org
40 https://www.blackjackreview.com/wp/2025/06/27/what-is-the-best-safe-gambling-site/ What Is The Best Safe Gambling Site? - Blackjack Review blackjackreview.com
41 https://www.bluefirereader.com/certification/dictionary.pdf a dictionary PDF - Bluefire Reader bluefirereader.com
42 https://bnu.repository.guildhe.ac.uk/id/eprint/9388/1/1.%20Volume%20I%20Pedros%20final%20thesis%20170715.pdf Consumer Decision Making in Restaurant Selection bnu.repository.guildhe.ac.uk
43 https://bojoko.ca/casino/ The Best Casino Sites 2026 - Top 100 Online Casinos in Canada bojoko.ca
44 https://www.bonus.com/online-casinos/delaware/ Delaware (DE) Best Online Casinos & Bonuses 2026 bonus.com
45 https://www.bonusfinder.com/ Compare Best Casino Bonuses and Latest Offers | BonusFinder US bonusfinder.com
46 https://www.bookmakersreview.com/usa/west-virginia/online-casinos/ West Virginia Online Casinos: Legal Status & Player Guide (2026) bookmakersreview.com
47 https://www.businesstoday.com.mt/gaming/gaming/2871/best_online_casinos_in_malta_for_specific_player_types Best Online Casinos in Malta for Specific Player Types businesstoday.com.mt
48 https://www.businessworld.ie/news/Irishluck-offers-reviews-of-casinos-and-sports-betting-sites-Irish-gamblers-575373.html Irishluck offers reviews of casinos and sports betting sites Irish ... businessworld.ie
49 https://cabinjohn.org/index.php/join-listserv/ Join Listserv – Community of Cabin John, Maryland cabinjohn.org
50 https://cardmates.co.uk/online-casinos Best Online Casino Sites in the UK for 2026 - Cardmates cardmates.co.uk
51 https://www.cardozolawreview.com/legalized-sports-wagering-in-america/ Legalized Sports Wagering in America - Cardozo Law Review cardozolawreview.com
52 https://www.cardplayer.com/online-casinos Best Real Money Online Casinos in the US (June 2026 ) cardplayer.com
53 https://casadelalmendro.com/ Fundacion Casa del Almendro – Centro de ayuda familiar al ... casadelalmendro.com
54 https://casino.guru/top-online-casinos TOP 10 Online Casinos 2026 [7,000+ Real Money Sites Tested] casino.guru
55 https://www.casino.org/reviews/ 100% Independent & Trusted Online Casino Reviews (2026) casino.org
56 https://www.casino.us/ Best US Online Casinos | Top 10 Casinos Compared 2026 casino.us
57 https://casinogrounds.com/casinos/ Online Casino Reviews by Professional Gamblers (Updated) casinogrounds.com
58 https://casinologia.com/top-10-best-casinos-list/ Top 10 Best Online Casinos at the Moment | 2026 casinologia.com
59 https://www.casinomeister.com/online-casinos/reviews/ Bluntly Honest Online Casino Reviews (2026) - Casinomeister casinomeister.com
60 https://www.casinorating.com/ Licensed Online Casinos by Country 2026 casinorating.com
61 https://casinoreviews.com/ Online Casino Reviews - Trusted Reviews & Ratings | CasinoReviews.com casinoreviews.com
62 https://www.casinoreviews.net/ Independent Online Casino Reviews 2026 | Casinoreviews.net casinoreviews.net
63 https://www.casinos.com/best-sites Best Casino Sites June 2026 | Find Casinos Online casinos.com
64 https://www.casinoslists.com/ CasinosLists.com: Complete Online Casino Lists & Bonuses casinoslists.com
65 https://www.casinovendors.com/vendorsatoz/a/ Vendors A-Z (A) - Casino Vendors casinovendors.com
66 https://cdn.osce.org/sites/default/files/f/documents/b/b/13836.pdf The Media Freedom Internet Cookbook - OSCE.org cdn.osce.org
67 https://chipy.com/casinos Authentic Online Casino Reviews by Real Players ⭐ - Chipy.com chipy.com
68 https://www.collinsdictionary.com/us/dictionary/english-thesaurus/expansive Synonyms of 'expansive' in American English collinsdictionary.com
69 https://commission.europa.eu/system/files/2022-12/Annex%20I_LiteratureReview_20210319_clean_dsj_v3.0_a.pdf Study on the impact of new technologies on free and fair elections ... commission.europa.eu
70 https://comparasino.com/casino-bonuses/ Top Online Casino Bonuses 2026 | 10x Wagering Cap Compliant comparasino.com
71 https://www.covers.com/casino Best Real Money Online Casinos for US Players 2026 - Covers.com covers.com
72 https://www.craveguitars.co.uk/tag/guitar-music/page/2/ guitar music – Page 2 - CRAVE Guitars craveguitars.co.uk
73 https://cs.arizona.edu/~mercer/Projects/BoggleWords Untitled cs.arizona.edu
74 https://www.cs.princeton.edu/courses/archive/spring18/cos226/assignments/autocomplete/testing/words-333333.txt words-333333 - cs.Princeton cs.princeton.edu
75 https://dappradar.com/narratives/gambling/platforms Best Crypto Gambling Sites 2026: List of Top No KYC Crypto Casinos dappradar.com
76 https://www.dcaf.ch/sites/default/files/publications/documents/Compendium_Building_Integrity_and_Reducing_Corruption_in_Defence.pdf Building Integrity and Reducing Corruption in Defence dcaf.ch
77 https://deadspin.com/sweepstakes-casinos/free-slots-real-money/ Free Online Slots For Real Money: Free Play Casinos Ranked deadspin.com
78 https://delawarepark.betrivers.com/ BetRivers at Delaware Park Casino & Racing Online Casino ... delawarepark.betrivers.com
79 https://des.assam.gov.in/sites/default/files/swf_utility_folder/departments/ecostat_medhassu_in_oid_3/this_comm/tourism_sss.pdf 2.Development of a Tourism Convenience Index for the Major ... des.assam.gov.in
80 https://detective.gumer.info/txt/cambridge.pdf Cambridge Companion Crime Fiction detective.gumer.info
81 https://www.dictionary.com/browse/extensive EXTENSIVE Definition & Meaning | Dictionary.com dictionary.com
82 https://documents1.worldbank.org/curated/en/990601467315599193/pdf/105761-REVISED-CDI-Report-FinalLatest-PUBLIC.pdf The Potential Economic Role of the Caribbean Diaspora documents1.worldbank.org
83 https://doe.gov.in/files/cenetral-pay_document/7cpc_report_eng.pdf Report of the Seventh Central Pay Commission doe.gov.in
84 https://dokumen.pub/oxford-thesaurus-of-current-english.html Oxford Thesaurus of Current English - DOKUMEN.PUB dokumen.pub
85 https://www.eecis.udel.edu/~lliao/cis320f05/dictionary.txt Dictionary eecis.udel.edu
86 https://esports-news.co.uk/gambling-sites/ Best Gambling Websites in 2026 - Top 10 Online Casinos UK esports-news.co.uk
87 https://esportsinsider.com/us/gambling/best-online-casinos-usa Best Online Casinos for Real Money in the USA for June 2026 esportsinsider.com
88 https://europeangaming.eu/portal/best-online-casinos-europe/ Best Online Casinos Europe 2026: Top 15 EU Casino Sites europeangaming.eu
89 https://www.eurosif.org/wp-content/uploads/2021/10/European-SRI-2018-Study.pdf european sri study | eurosif eurosif.org
90 https://exclusive-casino.com exclusive-casino.com
91 https://exclusive-casino.net exclusive-casino.net
92 https://exclusive-casino.org exclusive-casino.org
93 https://www.ey.com/content/dam/ey-unified-site/ey-com/en-in/insights/media-entertainment/images/ey-shape-the-future-indian-media-and-entertainment-is-scripting-a-new-story.pdf Indian media and entertainment is scripting a new story - EY ey.com
94 https://www.facom.ufu.br/~albertini/2sem2015/ori/dic.txt dic.txt - Facom/UFU facom.ufu.br
95 https://fast-casino.com fast-casino.com
96 https://fast-casino.xyz fast-casino.xyz
97 https://fast-casinos.com fast-casinos.com
98 https://fast-casinos.info fast-casinos.info
99 https://fast-casinos.net fast-casinos.net
100 https://fast-casinos.org fast-casinos.org
101 http://www.fatf-gafi.org/content/dam/fatf-gafi/reports/Asset-Recovery-Guidance-Best-Practices.pdf.coredownload.pdf Asset Recovery Guidance and Best Practices - FATF fatf-gafi.org
102 https://fbcclassroom.com/wp-content/uploads/2022/07/The-Worlds-Religions-Our-Great-Wisdom-Traditions-by-Huston-Smith-z-lib.org_.pdf The World's Religions - Global Classroom by Filadelfia Bible College fbcclassroom.com
103 https://files.spawningpool.net/docs/Vault2.0.-.TTRPG-Gamebooks/Feng%20Shui/Feng%20Shui%20%5B2nd%20ed%5D/FS%202e%20-%20Feng%20Shui%202%20-%20Core%20Rulebook%20v2.1%20%7BAG4020%7D.pdf FS 2e - Feng Shui 2 - Core Rulebook v2.1 {AG4020}.pdf files.spawningpool.net
104 https://filmtalk.org/film-books/ FILM BOOKS filmtalk.org
105 https://focus-asia.com/the-pokies-casino-australia-2026-review/ Australia’s Top-Rated Real Money Casino Site focus-asia.com
106 https://forum.mr-gamble.com/topic/6646-top-10-casinos-list/ Top 10 casinos list - Mr. Gamble Casino Forum forum.mr-gamble.com
107 https://www.fqmagazine.co.uk/gear-and-gadgets-2/gaming/item/69229-exploring-the-top-online-casinos-with-fast-payouts.html Exploring the Top Online Casinos With Fast Payouts - FQ Magazine fqmagazine.co.uk
108 https://www.freep.com/story/sports/best-online-casinos-for-real-money/86800526007/ Best online casinos for real money in the U.S. (June 2026) freep.com
109 https://www.gambling.com/us/online-casinos How does Gambling.com rate and review online casinos? gambling.com
110 https://www.gamblingcommission.gov.uk/public-register/business/detail/domain-names/39326 Skill On Net Limited - Domain names - Gambling Commission gamblingcommission.gov.uk
111 https://www.gamblinginsider.com/news/109371/ireland-gambling-regulator-licensing-fines-grai Ireland Gambling Regulator Opens Licensing, Fines Up to €20M gamblinginsider.com
112 https://www.gamblingnerd.com/ Best Online Gambling Sites in 2026 - Trusted Gambling Websites gamblingnerd.com
113 https://gamblingriskinformednovascotia.ca/wp-content/uploads/2019/01/SEIG_FINAL_REPORT_2011.pdf The Social and Economic Impacts of Gambling gamblingriskinformednovascotia.ca
114 https://www.gamblingsite.com/michigan/ Michigan Online Gambling - Best MI Gambling Sites in (2026) gamblingsite.com
115 https://www.gamblingsites.com/ Best Online Gambling Sites in 2026 - Ranked by Real Players gamblingsites.com
116 https://www.gameshub.com/australia/online-casinos/pokies/ Best Online Pokies in Australia for Real Money in June gameshub.com
117 https://www.gamesreviews.com/casino/michigan/ Michigan Online Casinos February, 2026: All Real Money Michigan Online Casinos gamesreviews.com
118 https://gamezinger.com/casinos/delaware/ Best Delaware Online Casinos - Top DE Casino Sites 2026 gamezinger.com
119 https://gamingamerica.com/online-casinos/michigan Top Michigan Online Casinos in 2026 gamingamerica.com
120 https://www.gamingtoday.com/ Gaming Today | America’s Home for Gambling News & Reviews gamingtoday.com
121 https://www.gatesnotes.com/work/save-lives/reader/20-years-to-give-away-virtually-all-my-wealth 20 years to give away virtually all my wealth | Bill Gates gatesnotes.com
122 https://getb8.us/online-casinos/ Online Casino Reviews - Best Trusted Online Casino Sites 2026 by Getb8 getb8.us
123 https://getbets.us/casinos/ Online Casinos USA 2026 — Tested & Ranked | GetBets getbets.us
124 https://gg.co.uk/online-casinos/ Best Online Casinos UK - Top Real Money Casinos 2026 - GG.co.uk gg.co.uk
125 https://www.ginx.tv/en/casino/michigan Best Michigan Online Casinos 2026 | Trusted Online Casinos in MI ginx.tv
126 https://www.glasgowtimes.co.uk/news/25703087.top-six-best-online-casino-review-sites/ Top six best online casino review sites | Glasgow Times glasgowtimes.co.uk
127 https://globallawexperts.com/top-10-jurisdictions-to-launch-your-licensed-gambling-business/ Top 10 Jurisdictions To Launch Your Licensed Gambling Business globallawexperts.com
128 https://www.grin.com/document/322750?srsltid=AfmBOorZNlBbFWB6hJnbkYgVKE5xOFgl2dqddYD2oVvRr6oLoYiA8Yy1 The Middle Class or You only live twice | Grin grin.com
129 https://gvrkiran.github.io/content/Betting_apps_India.pdf Quantifying the Illicit Ecosystem of Betting Apps in India gvrkiran.github.io
130 https://hendrix-cs.github.io/csci150/data/english3.txt Common English Words - Hendrix College Computer Science hendrix-cs.github.io
131 https://www.hltv.org/betting/online-casinos Best Online Casino Sites – June 2026 | HLTV.org hltv.org
132 https://huggingface.co/microsoft/cocolm-base/resolve/main/dict.txt?download=true 736 kB - Hugging Face huggingface.co
133 https://icom.museum/wp-content/uploads/2025/02/IRAPFM-FINAL_7fev_2025-1.pdf A worldwide answer from Museums icom.museum
134 https://ifdb.org/allreviews?id=lzj370u772du3hx7&sortby=&ratings=yes&pg=all Ratings and Reviews by Mike Russo ifdb.org
135 https://igamingfuture.com/sweepstakes-casinos/promo-codes/no-deposit-bonus/ Sweepstakes Casino No Deposit Bonuses for June 2026 igamingfuture.com
136 https://www.imdb.com/list/ls002806018/ Most Handsome Men of All Time - IMDb imdb.com
137 https://www.institutparisregion.fr/fileadmin/NewEtudes/Etude_481/c146_gb.pdf Large-Scale Urban Development Projects in Europe institutparisregion.fr
138 https://inventwithpython.com/dictionary.txt dictionary.txt - Invent with Python inventwithpython.com
139 https://justgamblers.com/michigan/online-casinos/ Best MI Online Casinos 2026: List of Legal Michigan Casino Sites justgamblers.com
140 https://www.kaggle.com/hamedetezadi/spam-e-mails-using-naive-bayes/execution SPAM E-MAILS USING NAIVE BAYES! kaggle.com
141 https://www.kit.nl/wp-content/uploads/2024/03/unique-features-of-agricultural-cooperatives-in-sub-Saharan-Africa.pdf HANDBOOK OF RESEARCH ON COOPERATIVES AND MUTUALS kit.nl
142 https://lcb.org/ 3669 Online Casinos Reviewed with 8681 Bonuses ranked by Game lcb.org
143 https://legal-casino.com legal-casino.com
144 https://legal-casino.net legal-casino.net
145 https://legal-casinos.net legal-casinos.net
146 https://legal-online-casinos.com legal-online-casinos.com
147 https://www.legalsportsreport.com/online-casinos/ Best Online Casinos for Real Money: Top Online Casino for US in June 2026 legalsportsreport.com
148 https://www.lexology.com/library/detail.aspx?g=4375fbe8-4efe-44a4-9b7f-74a3622b1679 First-step analysis: gaming in Malta - Lexology lexology.com
149 https://www.library.ca.gov/wp-content/uploads/crb-reports/97-003.pdf GAMBLING IN CALIFORNIA library.ca.gov
150 https://licensed-casino.com licensed-casino.com
151 https://licensed-online-casinos.com licensed-online-casinos.com
152 https://www.maltatoday.com.mt/sponsored/sponsored/134110/another_top_10_website_pros_and_cons_of_using_casino_comparison_websites Another Top 10 website: Pros and cons of using casino comparison ... maltatoday.com.mt
153 https://manuspillai.com/ Manu S Pillai manuspillai.com
154 https://maritzburgcollege.co.za/wp-content/uploads/2025/10/2025-10-21-MCollege-Magazine-2024-in-2025-LR-spreads-for-website.pdf maritzburg college nº 159 september 2025 ma gazine 2024 maritzburgcollege.co.za
155 https://mcds-therapy.eu/ Best Online Casinos Ireland | Top Casino Sites for 2026 mcds-therapy.eu
156 https://mediarep.org/bitstreams/00a072dd-62c7-4cff-baed-acbf163cd05c/download Game Research Methods. An Overview - Media/Rep mediarep.org
157 https://mega-casino.com mega-casino.com
158 https://mega-casino.info mega-casino.info
159 https://mega-casino.net mega-casino.net
160 https://mega-casino.org mega-casino.org
161 https://mega-casino.site mega-casino.site
162 https://mega-casino.xyz mega-casino.xyz
163 https://mega-casinos.com mega-casinos.com
164 https://mergerscorp.com/businesses-for-sale/ Established Businesses for Sale - MergersCorp M&A International mergerscorp.com
165 https://www.merriam-webster.com/thesaurus/expansive EXPANSIVE Synonyms: 28 Similar and Opposite Words | Merriam-Webster Thesaurus merriam-webster.com
166 https://www.metropolitancasinos.com/ Metropolitan Gaming | Top Casinos, Bars and Restaurants metropolitancasinos.com
167 https://www.metrotimes.com/discover/best-gambling-sites-38226192/ Best Gambling Sites That Pay Out Real Money in May, 2026 metrotimes.com
168 https://www.mfa.gov.cn/eng/zy/jj/2030kcxfzyc/202406/P020240606605159427708.pdf China's Progress Report on Implementation of the 2030 Agenda for ... mfa.gov.cn
169 https://www.mga.org.mt/ Malta Gaming Authority: Home mga.org.mt
170 https://mgaleg.maryland.gov/cmte_testimony/2025/bat/25362_01302025_15145-69.pdf MD Senate iGaming Hearing Rebuck Testimony (Extend - Maryland mgaleg.maryland.gov
171 https://miller.readthedocs.io/en/6.13.0/data/english-words.txt english-words.txt - Miller miller.readthedocs.io
172 https://www.mkaugaming.com/what-makes-a-gambling-article-actually-in-depth/ What Makes A Gambling Article Actually In-Depth? mkaugaming.com
173 https://www.mlive.com/online-casinos/sites/ Best Michigan Online Casinos 2026 Real Money Sites in MI mlive.com
174 https://www.moenr.gov.bt/?p=7837 Vacancy Announcement - - MoENR moenr.gov.bt
175 https://montenegrobet.me/wp-content/uploads/2014/11/Journal-Of-Gambling-Issues-kandaska-studija-o-uticaju-udaljenosti-na-maloljetnike.pdf Journal of Gambling Issues Issue 20, June 2007 - Montenegrobet montenegrobet.me
176 https://www.moviemaker.com/best-online-pokies-au/ Best Online Pokies in Australia 2026: Top 15 Real Money Sites moviemaker.com
177 https://mr-gamble.com/en/online-casino/ Compare Online Casinos 2026 — Compare Gambling Sites mr-gamble.com
178 https://www.mrgreen.com/ Mr Green Online Casino – Award-Winning Slots & Big Jackpots mrgreen.com
179 https://mrq.com/ Play the best UK online casino games today at MrQ mrq.com
180 https://muddyrivernews.com/igaming-hub/best-online-pokies-australia-2026-top-rated-real-money-pokies-sites-for-aussie-players-updated-june-2026/20260602140000/ Best Online Pokies Australia 2026: Top Rated Real Money Pokies Sites For Aussie Players (Updated June 2026 – Muddy River News muddyrivernews.com
181 https://musicsite1.wordpress.com/music-lists-2/the-guardian-1000-albums-to-hear-before-you-die/ The Guardian – 1000 Albums to Hear Before you Die | The Music Site musicsite1.wordpress.com
182 https://mylanguages.at.ua/Pygmalion-George_Bernard_Shaw.pdf George Bernard Shaw mylanguages.at.ua
183 http://ndl.ethernet.edu.et/bitstream/123456789/55467/1/163.pdf.pdf The Arab Awakening ndl.ethernet.edu.et
184 https://newrevenue.org/wp-content/uploads/2021/02/how-not-to-be-wrong-ellenberg-20169131536812.pdf How Not to Be Wrong : The Power of Mathematical Thinking ... newrevenue.org
185 https://news.ycombinator.com/item?id=48420827 Ask HN: Why is the HN crowd so anti-AI? - Hacker News news.ycombinator.com
186 https://next.io/online-casinos-us/ Best US Online Casinos 2026: Updated Real Money Casinos List next.io
187 https://www.nme.com/guides/gaming-guides/connections-answers-hints-groups-today-3557066 'Connections' answers and hints for today, June 21 - NME nme.com
188 https://northeasttimes.com/online-casinos/ Best Online Casinos That Pay Real Money: June, 2026 northeasttimes.com
189 https://www.oddschecker.com/us/casino Best US Online Casino Bonuses: Claim $10k+ of Sign up Bonuses oddschecker.com
190 https://www.oecd.org/content/dam/oecd/en/publications/reports/2025/02/states-of-fragility-2025_c9080496/81982370-en.pdf States of Fragility 2025 | OECD oecd.org
191 https://onlinegamblingme.com/casino-reviews/ Best Online Casino Reviews for 2026 - Online Gambling Me onlinegamblingme.com
192 https://www.oychicago.com/ Top Michigan Online Casinos in 2026 oychicago.com
193 https://www.parliament.uk/globalassets/documents/lords-committees/gambling-committee/gambling-written-evidence-volume.pdf Contents - UK Parliament parliament.uk
194 https://peacekeeping.un.org/sites/default/files/securing_development-public_finance_and_the_security_sector.pdf Securing Development: Public Finance and the Security Sector peacekeeping.un.org
195 https://www.pennlive.com/online-casinos/2026/03/best-real-money-online-casino-bonuses-fanatics-casino-promo-code-vs-betparx-casino-promo-code-pennlive.html Online Casino Bonus Comparison: Fanatics vs. betPARX + ... pennlive.com
196 https://physionet.org/files/deid/1.1/dict/sno_edited.txt?download Download - PhysioNet physionet.org
197 https://www.playmichigan.com/online-casino/ Best Michigan Online Casinos 2026 | All Michigan Online Casinos List playmichigan.com
198 https://pmc.ncbi.nlm.nih.gov/articles/PMC11122160/ Artificial Intelligence and Healthcare: A Journey through History ... pmc.ncbi.nlm.nih.gov
199 https://pokerfuse.com/online-casinos/bonuses/ Where to Play: Comparing the Best US Online Casino Bonuses 2026 | Pokerfuse pokerfuse.com
200 https://www.pokerlistings.com/casino-sites Best Online Casino Sites Reviews (June 2026) – Top Real ... pokerlistings.com
201 https://www.pokernews.com/casino/review/ Online Casino Reviews & Ratings for 2026 | PokerNews pokernews.com
202 https://www.pokerology.com/best-online-casinos/ Best Online Casinos for Real Money in June, 2026 pokerology.com
203 https://www.pokerstrategy.com/online-casinos/ Top Online Casinos for Real Money in the USA 2026 pokerstrategy.com
204 https://www.pokertube.com/article/fast-payout-casinos Best Instant Withdrawal Casinos in 2026: 15 Fast Payout Sites pokertube.com
205 https://pokie.inc/casino-category/real-money-casinos/ Best Real Money Online Casinos Australia 2026 – Tested & Ranked pokie.inc
206 https://premium-casino.xyz premium-casino.xyz
207 https://premium-casinos.com premium-casinos.com
208 https://pro-casino.com pro-casino.com
209 https://pro-casino.site pro-casino.site
210 https://pro-casinos.com pro-casinos.com
211 https://www.profitduel.com/casino-reviews Casino Reviews U.S. | Top 38 Online Casinos Ranked | ProfitDuel profitduel.com
212 https://www.quora.com/Which-is-the-most-trusted-online-casino-review-site Which is the most trusted online casino review site? - Quora quora.com
213 https://www.racingpost.com/online-casino/best-sites/ Best Online Casinos (2026): Top 60 UKGC Licensed Sites racingpost.com
214 https://rated-casino.com rated-casino.com
215 https://readingroo.ms/5/7/5/7/57570/57570-h/57570-h.htm The Project Gutenberg eBook of Famouse Composers And Their ... readingroo.ms
216 https://www.reddit.com/r/TooAfraidToAsk/comments/1q4257c/looking_for_reliable_best_real_money_casinos_2026/ looking for reliable best real money casinos 2026, where do you actually play? reddit.com
217 https://repositorio.usp.br/directbitstream/c9aef84e-5dcc-4d9f-8214-6082225699cf/3151853.pdf A 150 Years' Celebration of Darwin's Book on Human Evolution and ... repositorio.usp.br
218 https://research.chalmers.se/publication/527805/file/527805_Fulltext.pdf The Digital Transformation of Labor - research.chalmers.se research.chalmers.se
219 https://www.researchgate.net/profile/Nataliya-Panasenko/publication/349287090_Tactile_information-processing_channel_in_the_plants_names/links/6027d4c492851c4ed56bdd81/Tactile-information-processing-channel-in-the-plants-names.pdf LANGUAGE, LITERATURE AND CULTURE IN A CHANGING ... researchgate.net
220 https://resilientcitiesnetwork.org/downloadable_resources/UR/Resilient-Cities-Resilient-Lives-Learning-from-the-100RC-Network.pdf Resilient Cities, Resilient Lives Learning from the 100RC Network resilientcitiesnetwork.org
221 https://rg.org/casinos Best Real Money Online Casinos June 2026: All Legal States - RG.org rg.org
222 https://www.right-to-education.org/sites/right-to-education.org/files/resource-attachments/Education_International_Hidden_Privatisation_in_Public_Education.pdf Hidden Privatisation in Public Education right-to-education.org
223 https://www.rotowire.com/betting/casinos/delaware Delaware Online Casinos: Legal Sites and How the Market Works rotowire.com
224 https://rrc.cvc.uab.es/downloads/GenericVocabulary.txt generic dictionary - Robust Reading Competition rrc.cvc.uab.es
225 https://rsrglobal.org/uncategorized/casino-luckysheriff-support/ I Reviewed LuckySheriff Casino RTPs to Industry Average Data for ... rsrglobal.org
226 https://sabew.org/2026/03/2025-best-in-business-honorees-judging-comments/ 2025 Best in Business Honorees – Judging Comments - SABEW sabew.org
227 https://safe-casino.com safe-casino.com
228 https://safe-casino.net safe-casino.net
229 https://safe-casino.org safe-casino.org
230 https://safe-casino.xyz safe-casino.xyz
231 https://safe-casinos.info safe-casinos.info
232 https://safe-casinos.net safe-casinos.net
233 https://www.scribd.com/document/945048280/Bloomsbury-Crossword-Solver-BLOOMSBURY-CROSSWORD-SOLVER-Title-WeLib-org Bloomsbury Crossword Solver Guide | PDF - Scribd scribd.com
234 https://siege.gg/news/the-top-5-best-casino-review-sites-you-can-trust The Top 5 Best Casino Review Sites You Can Trust siege.gg
235 https://sigma.world/play/online-casinos/ Best Online Casino 2026 | Top Casino Sites - SiGMA sigma.world
236 https://www.similarweb.com/top-websites/gambling/casinos/ Top Casinos Websites Ranking | Similarweb similarweb.com
237 https://sites.cc.gatech.edu/classes/AY2012/cs2316_fall/codesamples/6of12.txt 6of12.txt sites.cc.gatech.edu
238 https://sites.cs.ucsb.edu/~mikec/cs16/misc/demos/savitch10pgms/Chapter07/words.txt words.txt - UCSB Computer Science sites.cs.ucsb.edu
239 https://slotsspot.com/online-casinos/reviews/ Best Online Casino Reviews 2026 | 100% Trusted & Independent slotsspot.com
240 https://www.slotstemple.com/us/states/mi/ Michigan Casinos | Online Casino Michigan Reviews slotstemple.com
241 https://www.slotsup.com/ SlotsUp: User-Centric Guide in the Online Casino Industry slotsup.com
242 https://smartintegratedsystem.com/blog/1 Smart Integrated System bersama dengan Revolusi Industri 4.0 smartintegratedsystem.com
243 https://soldier.army.mod.uk/media/0wnn1o3v/soldier-mar-08.pdf DESIGN FOR LIFE - Soldier magazine - The British Army soldier.army.mod.uk
244 https://www.sportsbookreview.com/casino/us/michigan/ Michigan Online Casinos: Best Gambling Sites in MI 2026 sportsbookreview.com
245 https://www.sportsline.com/casinos/ Best online casinos for real money: Picking the top online casino for 2026 sportsline.com
246 https://www.strafe.com/esports-betting/casino/ Best Online Casinos 2026: Ratings & Reviews [164+ Toplist] strafe.com
247 https://www.stripe.press/poor-charlies-almanack/book Poor Charlie's Almanack: The Essential Wit and Wisdom of Charles ... stripe.press
248 https://super-casino.com super-casino.com
249 https://super-casino.net super-casino.net
250 https://super-casino.org super-casino.org
251 https://super-casinos.com super-casinos.com
252 https://super-casinos.net super-casinos.net
253 https://super-online-casinos.net super-online-casinos.net
254 https://super.cs.uchicago.edu/usable18/dictionarysmall.txt English dictionary super.cs.uchicago.edu
255 https://www.tensai.org/ebooks/Cognitive%20Psychology_Tensai.pdf Cognitive Psychology - Tensai STEM Academy tensai.org
256 https://thegilbreths.com/best-online-casino/ TOP 10 Online Casino Australia Real Money: Best Online Casinos ... thegilbreths.com
257 https://www.thelines.com/casino/bonuses/ Best Real Money Casino Bonuses & Promos for June 2026 in US thelines.com
258 https://theplaybookusa.com/states/michigan/ Online Casinos Michigan 2026 – Best Legal Sites & Bonuses | The Playbook USA theplaybookusa.com
259 https://www.thesaurus.com/browse/extensive EXTENSIVE Synonyms & Antonyms - 110 words | Thesaurus.com thesaurus.com
260 https://www.thesportsgeek.com/online-casinos/delaware/ Best Delaware Online Casinos: Real Money DE Online Casinos 2026 thesportsgeek.com
261 https://timesofmalta.com/article/10-best-online-casino-sites-malta-a2.1108064 10 best online casino sites in Malta timesofmalta.com
262 https://toomaisquare.co.uk/casinos/online-casinos/paypal/ PayPal Casino UK Choose from 100+ Sites with Bonuses toomaisquare.co.uk
263 https://top-10-casinos.com top-10-casinos.com
264 https://top-10-casinos.net top-10-casinos.net
265 https://top-4-casinos.com top-4-casinos.com
266 https://top-casino-directory.com top-casino-directory.com
267 https://top-casino-list.com top-casino-list.com
268 https://top-casino-reviews.com top-casino-reviews.com
269 https://top-casino.com top-casino.com
270 https://top-casino.info top-casino.info
271 https://top-casino.net top-casino.net
272 https://top-casino.org top-casino.org
273 https://top-casino.xyz top-casino.xyz
274 https://top-casinoreviews.com top-casinoreviews.com
275 https://top-casinos.com top-casinos.com
276 https://top-casinos.org top-casinos.org
277 https://top-casinos.xyz top-casinos.xyz
278 https://top-online-casinos.com top-online-casinos.com
279 https://top.michigancasinosites.org/ Top 10 Michigan Online Casinos & Apps 2026 top.michigancasinosites.org
280 https://www.top10casinos.com/online-casino/index.html Best Online Casino Sites : Expertly Reviewed Top Casinos top10casinos.com
281 https://tribuna.com/en/casino/ratings/united-kingdom-casinos/ Best Online Casino in United Kingdom 2026 - Tribuna.com tribuna.com
282 https://trinket.io/python/56a03639a8 Put Interactive Python Anywhere on the Web - Trinket trinket.io
283 https://trusted-casino-list.com trusted-casino-list.com
284 https://trusted-casino.com trusted-casino.com
285 https://trusted-casino.net trusted-casino.net
286 https://trusted-casinos.com trusted-casinos.com
287 https://trusted-casinos.net trusted-casinos.net
288 https://trusted-online-casinos.com trusted-online-casinos.com
289 https://trusted-online-casinos.org trusted-online-casinos.org
290 https://www.trustpilot.com/categories/casino Best companies in Casino on Trustpilot trustpilot.com
291 https://ultimate-casino.com ultimate-casino.com
292 https://ultimate-casinos.com ultimate-casinos.com
293 https://ultra-casino.com ultra-casino.com
294 https://ultra-casino.info ultra-casino.info
295 https://ultra-casino.net ultra-casino.net
296 https://ultra-casino.org ultra-casino.org
297 https://ultra-casinos.com ultra-casinos.com
298 http://www.un-documents.net/our-common-future.pdf Our Common Future: Report of the World Commission on ... un-documents.net
299 https://www.unodc.org/roseap/uploads/documents/Publications/2024/Casino_Underground_Banking_Report_2024.pdf Casinos, Money Laundering, Underground Banking, and ... unodc.org
300 https://users.cis.fiu.edu/~weiss/cop3337_f99/dict.txt The dictionary users.cis.fiu.edu
301 https://ustr.gov/sites/default/files/files/Press/Reports/2025NTE.pdf FOREIGN TRADE BARRIERS - USTR ustr.gov
302 https://uswfoxtail.blob.core.windows.net/foxtail-prod-uploads/documents/FINAL_ABSTRACTS.pdf Abstracts uswfoxtail.blob.core.windows.net
303 https://www.vastdata.com/whitepaper The VAST Platform White Paper - VAST Data vastdata.com
304 https://vasylivanovich.com.ua/blog/optymalni-terminy-posadky-sadzhanciv-derev-ta-kushchiv?srsltid=AfmBOorqh2kcpY7Ggd8xuUBrJKl7KECaMgw0KpHkR58B9XjqruDQgK2q Коли найкращий час для посадки дерев та кущів vasylivanovich.com.ua
305 https://www.vegasinsider.com/casinos/ Best Online Casinos in the US 2026 — Real Money Sites Ranked vegasinsider.com
306 https://verified-casinos.com verified-casinos.com
307 https://wikibingo.co.uk/ Best Fast Withdrawal & Instant Payout Casinos UK (2026) wikibingo.co.uk
308 https://www.wits.ac.za/alumni/obituaries/obituary-content-by-year/ Obituary content by year - Wits University wits.ac.za
309 https://wizardofodds.com/online-casinos/reviews/ Best Online Casinos: #1 List of Reviewed & Rated Operators! 2026 (1268 Reviewed) wizardofodds.com
310 https://wsgc.wa.gov/sites/default/files/2023-10/Commission%20Packet_5.pdf WASHINGTON STATE GAMBLING COMMISSION PUBLIC MEETING wsgc.wa.gov
311 https://yalelawjournal.org/note/amazons-antitrust-paradox Amazon's Antitrust Paradox - Yale Law Journal yalelawjournal.org
+317
View File
@@ -0,0 +1,317 @@
url,title,domain
"https://www.accc.gov.au/system/files/ACCC+commissioned+report+-+The+impact+of+digital+platforms+on+news+and+journalistic+content,+Centre+for+Media+Transition+(2).pdf","The Impact of Digital Platforms on News and Journalistic Content","accc.gov.au"
"https://www.actionnetwork.com/casino","Best U.S. Real Money Online Casinos - December 2023","actionnetwork.com"
"https://www.al.com/casinos/real-money-casinos/","The best online casinos for real money in the U.S. for 2026","al.com"
"https://www.ananda.org/autobiography/","Autobiography of a Yogi, by Paramhansa Yogananda","ananda.org"
"https://www.antoniocasella.eu/restorative/Milward_2009.pdf","ePapyrus PDF Document - Antonio Casella","antoniocasella.eu"
"https://www.askgamblers.com/online-casinos/reviews","Trusted Online Casino Reviews & Ratings ✔️ (2026)","askgamblers.com"
"https://assets.kpmg.com/content/dam/kpmgsites/ie/pdf/insights/aviation/Aviation_Leaders_Report_2026.pdf.coredownload.inline.pdf","Aviation Leaders Report 2026 - KPMG agentic corporate services","assets.kpmg.com"
"https://ats.io/casinos/","Best Online Casinos USA (2026): List of Real Money Gambling Sites","ats.io"
"https://www.attorneyatwork.com/i-dont-know-what-this-word-means-is-this-post-expansive-or-extensive/","I Dont Know What This Word Means: Is This Post Expansive or Extensive?","attorneyatwork.com"
"https://www.ausonlinecasinosites.us.com/","Best Online Casinos Australia 2026: Real Money AU Casino Sites","ausonlinecasinosites.us.com"
"https://www.baseballamerica.com/stories/best-payout-online-casinos/","15 Best Payout Online Casinos 2026: High RTP Sites & Games","baseballamerica.com"
"https://baselgovernance.org/sites/default/files/2019-02/2016_gcrsport_en.pdf","Global Corruption Report: Sport - Basel Institute on Governance","baselgovernance.org"
"http://bc.math.msu.su/wiki/lib/exe/fetch.php?media=downloads:toffler_alvin_future_shock.pdf","Alvin Toffler Future Shock","bc.math.msu.su"
"https://best-7-online-casinos.com","best-7-online-casinos.com","best-7-online-casinos.com"
"https://best-9-online-casinos.com","best-9-online-casinos.com","best-9-online-casinos.com"
"https://best-casino-directory.com","best-casino-directory.com","best-casino-directory.com"
"https://best-casino-list.com","best-casino-list.com","best-casino-list.com"
"https://best-casino-reviews.com","best-casino-reviews.com","best-casino-reviews.com"
"https://best-casino.com","best-casino.com","best-casino.com"
"https://best-casino.net","best-casino.net","best-casino.net"
"https://best-casino.xyz","best-casino.xyz","best-casino.xyz"
"https://best-casinos.com","best-casinos.com","best-casinos.com"
"https://best-casinos.net","best-casinos.net","best-casinos.net"
"https://best-online-casinos.com","best-online-casinos.com","best-online-casinos.com"
"https://best-online-casinos.info","best-online-casinos.info","best-online-casinos.info"
"https://best-online-casinos.net","best-online-casinos.net","best-online-casinos.net"
"https://best-online-casinos.org","best-online-casinos.org","best-online-casinos.org"
"https://best-online-casinos.xyz","best-online-casinos.xyz","best-online-casinos.xyz"
"https://best.unitestatesonlinecasino.net/","Best Online Casino for Real Money & Top Offshore Casinos 2026","best.unitestatesonlinecasino.net"
"https://bestpokiesau.com/","Best Online Casinos 2026 Top Australian Pokies for Real Money","bestpokiesau.com"
"https://betanews.com/gb/most-trusted-online-gambling-sites/","Best Online Casinos That Pay Real Money - March 2026 Update","betanews.com"
"https://betpokies.org/","Best Real Money Online Casinos in Australia 2026","betpokies.org"
"https://bettergambling.ie/casino-sites/","All Online Casino Sites Ireland 2026 | BetterGambling.ie","bettergambling.ie"
"https://www.betting.co.uk/casino/","Betting.co.uk Casino","betting.co.uk"
"https://www.bettingusa.com/states/de/casino/","Delaware Online Casinos 2026: Legal Sites, Apps & Bonuses","bettingusa.com"
"https://www.betvictor.com/en-gb/casino","Play Online Casino Games at BetVictor's UK Casino Site","betvictor.com"
"https://www.bibliophilebooks.com/WebRoot/Store/Shops/Bibliophile/4DC1/304F/E927/3180/420E/C0A8/647D/D51E/C338WEBCAT.pdf","Gifts For Book Lovers HAPPY NEW YEAR TO ALL OUR LOVELY ...","bibliophilebooks.com"
"https://www.bis.org/publ/gten05.pdf","Report on Consolidation in the Financial Sector","bis.org"
"https://www.bitdegree.org/crypto/shuffle-casino-review","Shuffle Casino Review: Games, Bonuses, and Full Guide","bitdegree.org"
"https://www.blackjackreview.com/wp/2025/06/27/what-is-the-best-safe-gambling-site/","What Is The Best Safe Gambling Site? - Blackjack Review","blackjackreview.com"
"https://www.bluefirereader.com/certification/dictionary.pdf","a dictionary PDF - Bluefire Reader","bluefirereader.com"
"https://bnu.repository.guildhe.ac.uk/id/eprint/9388/1/1.%20Volume%20I%20Pedros%20final%20thesis%20170715.pdf","Consumer Decision Making in Restaurant Selection","bnu.repository.guildhe.ac.uk"
"https://bojoko.ca/casino/","The Best Casino Sites 2026 - Top 100 Online Casinos in Canada","bojoko.ca"
"https://www.bonus.com/online-casinos/delaware/","Delaware (DE) Best Online Casinos & Bonuses 2026","bonus.com"
"https://www.bonusfinder.com/","Compare Best Casino Bonuses and Latest Offers | BonusFinder US","bonusfinder.com"
"https://www.bookmakersreview.com/usa/west-virginia/online-casinos/","West Virginia Online Casinos: Legal Status & Player Guide (2026)","bookmakersreview.com"
"https://www.businesstoday.com.mt/gaming/gaming/2871/best_online_casinos_in_malta_for_specific_player_types","Best Online Casinos in Malta for Specific Player Types","businesstoday.com.mt"
"https://www.businessworld.ie/news/Irishluck-offers-reviews-of-casinos-and-sports-betting-sites-Irish-gamblers-575373.html","Irishluck offers reviews of casinos and sports betting sites Irish ...","businessworld.ie"
"https://cabinjohn.org/index.php/join-listserv/","Join Listserv Community of Cabin John, Maryland","cabinjohn.org"
"https://cardmates.co.uk/online-casinos","Best Online Casino Sites in the UK for 2026 - Cardmates","cardmates.co.uk"
"https://www.cardozolawreview.com/legalized-sports-wagering-in-america/","Legalized Sports Wagering in America - Cardozo Law Review","cardozolawreview.com"
"https://www.cardplayer.com/online-casinos","Best Real Money Online Casinos in the US (June 2026 )","cardplayer.com"
"https://casadelalmendro.com/","Fundacion Casa del Almendro Centro de ayuda familiar al ...","casadelalmendro.com"
"https://casino.guru/casino-reviews","Online Casino Reviews by Experts and Players","casino.guru"
"https://www.casino.org/reviews/","100% Independent & Trusted Online Casino Reviews (2026)","casino.org"
"https://www.casino.us/","Best US Online Casinos | Top 10 Casinos Compared 2026","casino.us"
"https://casinogrounds.com/casinos/","Online Casino Reviews by Professional Gamblers (Updated)","casinogrounds.com"
"https://casinologia.com/top-10-best-casinos-list/","Top 10 Best Online Casinos at the Moment | 2026","casinologia.com"
"https://www.casinomeister.com/online-casinos/reviews/","Bluntly Honest Online Casino Reviews (2026) - Casinomeister","casinomeister.com"
"https://www.casinorating.com/","Licensed Online Casinos by Country 2026","casinorating.com"
"https://casinoreviews.com/","Online Casino Reviews - Trusted Reviews & Ratings | CasinoReviews.com","casinoreviews.com"
"https://www.casinoreviews.net/","Independent Online Casino Reviews 2026 | Casinoreviews.net","casinoreviews.net"
"https://www.casinos.com/us/sitemap","Sitemap - Casinos.com","casinos.com"
"https://www.casinoslists.com/","CasinosLists.com: Complete Online Casino Lists & Bonuses","casinoslists.com"
"https://www.casinovendors.com/vendorsatoz/a/","Vendors A-Z (A) - Casino Vendors","casinovendors.com"
"https://cdn.osce.org/sites/default/files/f/documents/b/b/13836.pdf","The Media Freedom Internet Cookbook - OSCE.org","cdn.osce.org"
"https://chipy.com/casinos","Authentic Online Casino Reviews by Real Players ⭐ - Chipy.com","chipy.com"
"https://www.collinsdictionary.com/us/dictionary/english-thesaurus/expansive","Synonyms of 'expansive' in American English","collinsdictionary.com"
"https://commission.europa.eu/system/files/2022-12/Annex%20I_LiteratureReview_20210319_clean_dsj_v3.0_a.pdf","Study on the impact of new technologies on free and fair elections ...","commission.europa.eu"
"https://comparasino.com/casino-bonuses/","Top Online Casino Bonuses 2026 | 10x Wagering Cap Compliant","comparasino.com"
"https://www.covers.com/casino","Best Real Money Online Casinos for US Players 2026 - Covers.com","covers.com"
"https://www.craveguitars.co.uk/tag/guitar-music/page/2/","guitar music Page 2 - CRAVE Guitars","craveguitars.co.uk"
"https://cs.arizona.edu/~mercer/Projects/BoggleWords","Untitled","cs.arizona.edu"
"https://www.cs.princeton.edu/courses/archive/spring18/cos226/assignments/autocomplete/testing/words-333333.txt","words-333333 - cs.Princeton","cs.princeton.edu"
"https://dappradar.com/narratives/gambling/platforms","Best Crypto Gambling Sites 2026: List of Top No KYC Crypto Casinos","dappradar.com"
"https://www.dcaf.ch/sites/default/files/publications/documents/Compendium_Building_Integrity_and_Reducing_Corruption_in_Defence.pdf","Building Integrity and Reducing Corruption in Defence","dcaf.ch"
"https://deadspin.com/sweepstakes-casinos/free-slots-real-money/","Free Online Slots For Real Money: Free Play Casinos Ranked","deadspin.com"
"https://delawarepark.betrivers.com/","BetRivers at Delaware Park Casino & Racing Online Casino ...","delawarepark.betrivers.com"
"https://des.assam.gov.in/sites/default/files/swf_utility_folder/departments/ecostat_medhassu_in_oid_3/this_comm/tourism_sss.pdf","2.Development of a Tourism Convenience Index for the Major ...","des.assam.gov.in"
"https://detective.gumer.info/txt/cambridge.pdf","Cambridge Companion Crime Fiction","detective.gumer.info"
"https://www.dictionary.com/browse/extensive","EXTENSIVE Definition & Meaning | Dictionary.com","dictionary.com"
"https://documents1.worldbank.org/curated/en/990601467315599193/pdf/105761-REVISED-CDI-Report-FinalLatest-PUBLIC.pdf","The Potential Economic Role of the Caribbean Diaspora","documents1.worldbank.org"
"https://doe.gov.in/files/cenetral-pay_document/7cpc_report_eng.pdf","Report of the Seventh Central Pay Commission","doe.gov.in"
"https://dokumen.pub/oxford-thesaurus-of-current-english.html","Oxford Thesaurus of Current English - DOKUMEN.PUB","dokumen.pub"
"https://www.eecis.udel.edu/~lliao/cis320f05/dictionary.txt","Dictionary","eecis.udel.edu"
"https://esports-news.co.uk/gambling-sites/","Best Gambling Websites in 2026 - Top 10 Online Casinos UK","esports-news.co.uk"
"https://esportsinsider.com/us/gambling/offshore-casinos","Best Offshore Casinos in 2026 for US Players","esportsinsider.com"
"https://europeangaming.eu/portal/best-online-casinos-europe/","Best Online Casinos Europe 2026: Top 15 EU Casino Sites","europeangaming.eu"
"https://www.eurosif.org/wp-content/uploads/2021/10/European-SRI-2018-Study.pdf","european sri study | eurosif","eurosif.org"
"https://exclusive-casino.com","exclusive-casino.com","exclusive-casino.com"
"https://exclusive-casino.net","exclusive-casino.net","exclusive-casino.net"
"https://exclusive-casino.org","exclusive-casino.org","exclusive-casino.org"
"https://www.ey.com/content/dam/ey-unified-site/ey-com/en-in/insights/media-entertainment/images/ey-shape-the-future-indian-media-and-entertainment-is-scripting-a-new-story.pdf","Indian media and entertainment is scripting a new story - EY","ey.com"
"https://www.facom.ufu.br/~albertini/2sem2015/ori/dic.txt","dic.txt - Facom/UFU","facom.ufu.br"
"https://fast-casino.com","fast-casino.com","fast-casino.com"
"https://fast-casino.xyz","fast-casino.xyz","fast-casino.xyz"
"https://fast-casinos.com","fast-casinos.com","fast-casinos.com"
"https://fast-casinos.info","fast-casinos.info","fast-casinos.info"
"https://fast-casinos.net","fast-casinos.net","fast-casinos.net"
"https://fast-casinos.org","fast-casinos.org","fast-casinos.org"
"http://www.fatf-gafi.org/content/dam/fatf-gafi/reports/Asset-Recovery-Guidance-Best-Practices.pdf.coredownload.pdf","Asset Recovery Guidance and Best Practices - FATF","fatf-gafi.org"
"https://fbcclassroom.com/wp-content/uploads/2022/07/The-Worlds-Religions-Our-Great-Wisdom-Traditions-by-Huston-Smith-z-lib.org_.pdf","The World's Religions - Global Classroom by Filadelfia Bible College","fbcclassroom.com"
"https://files.spawningpool.net/docs/Vault2.0.-.TTRPG-Gamebooks/Feng%20Shui/Feng%20Shui%20%5B2nd%20ed%5D/FS%202e%20-%20Feng%20Shui%202%20-%20Core%20Rulebook%20v2.1%20%7BAG4020%7D.pdf","FS 2e - Feng Shui 2 - Core Rulebook v2.1 {AG4020}.pdf","files.spawningpool.net"
"https://filmtalk.org/film-books/","FILM BOOKS","filmtalk.org"
"https://first.com/casino/best-casinos","FIRST.com Casinos","first.com"
"https://focus-asia.com/the-pokies-casino-australia-2026-review/","Australias Top-Rated Real Money Casino Site","focus-asia.com"
"https://forum.mr-gamble.com/topic/6646-top-10-casinos-list/","Top 10 casinos list - Mr. Gamble Casino Forum","forum.mr-gamble.com"
"https://www.fqmagazine.co.uk/gear-and-gadgets-2/gaming/item/69229-exploring-the-top-online-casinos-with-fast-payouts.html","Exploring the Top Online Casinos With Fast Payouts - FQ Magazine","fqmagazine.co.uk"
"https://www.freebets.com/casino/","FreeBets Casino","freebets.com"
"https://www.freep.com/story/sports/best-online-casinos-for-real-money/86800526007/","Best online casinos for real money in the U.S. (June 2026)","freep.com"
"https://www.gambling.com/uk/online-casinos","Best UK Online Casino Sites in 2026 - Gambling.com","gambling.com"
"https://www.gamblingcommission.gov.uk/","Gambling Commission website","gamblingcommission.gov.uk"
"https://www.gamblinginsider.com/news/109371/ireland-gambling-regulator-licensing-fines-grai","Ireland Gambling Regulator Opens Licensing, Fines Up to €20M","gamblinginsider.com"
"https://www.gamblingnerd.com/","Best Online Gambling Sites in 2026 - Trusted Gambling Websites","gamblingnerd.com"
"https://gamblingriskinformednovascotia.ca/wp-content/uploads/2019/01/SEIG_FINAL_REPORT_2011.pdf","The Social and Economic Impacts of Gambling","gamblingriskinformednovascotia.ca"
"https://www.gamblingsite.com/michigan/","Michigan Online Gambling - Best MI Gambling Sites in (2026)","gamblingsite.com"
"https://www.gamblingsites.com/","Best Online Gambling Sites in 2026 - Ranked by Real Players","gamblingsites.com"
"https://www.gameshub.com/australia/online-casinos/pokies/","Best Online Pokies in Australia for Real Money in June","gameshub.com"
"https://www.gamesreviews.com/casino/michigan/","Michigan Online Casinos February, 2026: All Real Money Michigan Online Casinos","gamesreviews.com"
"https://gamezinger.com/casinos/delaware/","Best Delaware Online Casinos - Top DE Casino Sites 2026","gamezinger.com"
"https://gamingamerica.com/gambling-sites","Best Gambling Sites for Real Money - Top Gambling Sites in 2026","gamingamerica.com"
"https://www.gamingtoday.com/","Gaming Today | Americas Home for Gambling News & Reviews","gamingtoday.com"
"https://www.gatesnotes.com/work/save-lives/reader/20-years-to-give-away-virtually-all-my-wealth","20 years to give away virtually all my wealth | Bill Gates","gatesnotes.com"
"https://getb8.us/online-casinos/","Online Casino Reviews - Best Trusted Online Casino Sites 2026 by Getb8","getb8.us"
"https://getbets.us/casinos/","Online Casinos USA 2026 — Tested & Ranked | GetBets","getbets.us"
"https://gg.co.uk/online-casinos/","Best Online Casinos UK - Top Real Money Casinos 2026 - GG.co.uk","gg.co.uk"
"https://www.ginx.tv/en/casino/michigan","Best Michigan Online Casinos 2026 | Trusted Online Casinos in MI","ginx.tv"
"https://www.glasgowtimes.co.uk/news/25703087.top-six-best-online-casino-review-sites/","Top six best online casino review sites | Glasgow Times","glasgowtimes.co.uk"
"https://globallawexperts.com/top-10-jurisdictions-to-launch-your-licensed-gambling-business/","Top 10 Jurisdictions To Launch Your Licensed Gambling Business","globallawexperts.com"
"https://www.grin.com/document/322750?srsltid=AfmBOorZNlBbFWB6hJnbkYgVKE5xOFgl2dqddYD2oVvRr6oLoYiA8Yy1","The Middle Class or You only live twice | Grin","grin.com"
"https://gvrkiran.github.io/content/Betting_apps_India.pdf","Quantifying the Illicit Ecosystem of Betting Apps in India","gvrkiran.github.io"
"https://hendrix-cs.github.io/csci150/data/english3.txt","Common English Words - Hendrix College Computer Science","hendrix-cs.github.io"
"https://www.hltv.org/betting/online-casinos","Best Online Casino Sites June 2026 | HLTV.org","hltv.org"
"https://huggingface.co/microsoft/cocolm-base/resolve/main/dict.txt?download=true","736 kB - Hugging Face","huggingface.co"
"https://icom.museum/wp-content/uploads/2025/02/IRAPFM-FINAL_7fev_2025-1.pdf","A worldwide answer from Museums","icom.museum"
"https://ifdb.org/allreviews?id=lzj370u772du3hx7&sortby=&ratings=yes&pg=all","Ratings and Reviews by Mike Russo","ifdb.org"
"https://igamingfuture.com/sweepstakes-casinos/promo-codes/no-deposit-bonus/","Sweepstakes Casino No Deposit Bonuses for June 2026","igamingfuture.com"
"https://www.imdb.com/list/ls002806018/","Most Handsome Men of All Time - IMDb","imdb.com"
"https://www.institutparisregion.fr/fileadmin/NewEtudes/Etude_481/c146_gb.pdf","Large-Scale Urban Development Projects in Europe","institutparisregion.fr"
"https://inventwithpython.com/dictionary.txt","dictionary.txt - Invent with Python","inventwithpython.com"
"https://justgamblers.com/michigan/online-casinos/","Best MI Online Casinos 2026: List of Legal Michigan Casino Sites","justgamblers.com"
"https://www.kaggle.com/hamedetezadi/spam-e-mails-using-naive-bayes/execution","SPAM E-MAILS USING NAIVE BAYES!","kaggle.com"
"https://www.kit.nl/wp-content/uploads/2024/03/unique-features-of-agricultural-cooperatives-in-sub-Saharan-Africa.pdf","HANDBOOK OF RESEARCH ON COOPERATIVES AND MUTUALS","kit.nl"
"https://lcb.org/","3669 Online Casinos Reviewed with 8681 Bonuses ranked by Game","lcb.org"
"https://legal-casino.com","legal-casino.com","legal-casino.com"
"https://legal-casino.net","legal-casino.net","legal-casino.net"
"https://legal-casinos.net","legal-casinos.net","legal-casinos.net"
"https://legal-online-casinos.com","legal-online-casinos.com","legal-online-casinos.com"
"https://www.legalsportsreport.com/online-casinos/","Best Online Casinos for Real Money: Top Online Casino for US in June 2026","legalsportsreport.com"
"https://www.lexology.com/library/detail.aspx?g=4375fbe8-4efe-44a4-9b7f-74a3622b1679","First-step analysis: gaming in Malta - Lexology","lexology.com"
"https://www.library.ca.gov/wp-content/uploads/crb-reports/97-003.pdf","GAMBLING IN CALIFORNIA","library.ca.gov"
"https://licensed-casino.com","licensed-casino.com","licensed-casino.com"
"https://licensed-online-casinos.com","licensed-online-casinos.com","licensed-online-casinos.com"
"https://www.livecasinocomparer.com/online-casino/","LiveCasinoComparer","livecasinocomparer.com"
"https://www.maltatoday.com.mt/sponsored/sponsored/134110/another_top_10_website_pros_and_cons_of_using_casino_comparison_websites","Another Top 10 website: Pros and cons of using casino comparison ...","maltatoday.com.mt"
"https://manuspillai.com/","Manu S Pillai","manuspillai.com"
"https://maritzburgcollege.co.za/wp-content/uploads/2025/10/2025-10-21-MCollege-Magazine-2024-in-2025-LR-spreads-for-website.pdf","maritzburg college nº 159 september 2025 ma gazine 2024","maritzburgcollege.co.za"
"https://mcds-therapy.eu/","Best Online Casinos Ireland | Top Casino Sites for 2026","mcds-therapy.eu"
"https://mediarep.org/bitstreams/00a072dd-62c7-4cff-baed-acbf163cd05c/download","Game Research Methods. An Overview - Media/Rep","mediarep.org"
"https://mega-casino.com","mega-casino.com","mega-casino.com"
"https://mega-casino.info","mega-casino.info","mega-casino.info"
"https://mega-casino.net","mega-casino.net","mega-casino.net"
"https://mega-casino.org","mega-casino.org","mega-casino.org"
"https://mega-casino.site","mega-casino.site","mega-casino.site"
"https://mega-casino.xyz","mega-casino.xyz","mega-casino.xyz"
"https://mega-casinos.com","mega-casinos.com","mega-casinos.com"
"https://mergerscorp.com/businesses-for-sale/","Established Businesses for Sale - MergersCorp M&A International","mergerscorp.com"
"https://www.merriam-webster.com/thesaurus/expansive","EXPANSIVE Synonyms: 28 Similar and Opposite Words | Merriam-Webster Thesaurus","merriam-webster.com"
"https://www.metropolitancasinos.com/","Metropolitan Gaming | Top Casinos, Bars and Restaurants","metropolitancasinos.com"
"https://www.metrotimes.com/discover/best-gambling-sites-38226192/","Best Gambling Sites That Pay Out Real Money in May, 2026","metrotimes.com"
"https://www.mfa.gov.cn/eng/zy/jj/2030kcxfzyc/202406/P020240606605159427708.pdf","China's Progress Report on Implementation of the 2030 Agenda for ...","mfa.gov.cn"
"https://www.mga.org.mt/","Malta Gaming Authority: Home","mga.org.mt"
"https://mgaleg.maryland.gov/cmte_testimony/2025/bat/25362_01302025_15145-69.pdf","MD Senate iGaming Hearing Rebuck Testimony (Extend - Maryland","mgaleg.maryland.gov"
"https://miller.readthedocs.io/en/6.13.0/data/english-words.txt","english-words.txt - Miller","miller.readthedocs.io"
"https://www.mkaugaming.com/what-makes-a-gambling-article-actually-in-depth/","What Makes A Gambling Article Actually In-Depth?","mkaugaming.com"
"https://www.mlive.com/online-casinos/sites/","Best Michigan Online Casinos 2026 Real Money Sites in MI","mlive.com"
"https://www.moenr.gov.bt/?p=7837","Vacancy Announcement - - MoENR","moenr.gov.bt"
"https://montenegrobet.me/wp-content/uploads/2014/11/Journal-Of-Gambling-Issues-kandaska-studija-o-uticaju-udaljenosti-na-maloljetnike.pdf","Journal of Gambling Issues Issue 20, June 2007 - Montenegrobet","montenegrobet.me"
"https://www.moviemaker.com/best-online-pokies-au/","Best Online Pokies in Australia 2026: Top 15 Real Money Sites","moviemaker.com"
"https://mr-gamble.com/en/online-casino/","Compare Online Casinos 2026 — Compare Gambling Sites","mr-gamble.com"
"https://www.mrgreen.com/","Mr Green Online Casino Award-Winning Slots & Big Jackpots","mrgreen.com"
"https://mrq.com/","Play the best UK online casino games today at MrQ","mrq.com"
"https://muddyrivernews.com/igaming-hub/best-online-pokies-australia-2026-top-rated-real-money-pokies-sites-for-aussie-players-updated-june-2026/20260602140000/","Best Online Pokies Australia 2026: Top Rated Real Money Pokies Sites For Aussie Players (Updated June 2026 Muddy River News","muddyrivernews.com"
"https://musicsite1.wordpress.com/music-lists-2/the-guardian-1000-albums-to-hear-before-you-die/","The Guardian 1000 Albums to Hear Before you Die | The Music Site","musicsite1.wordpress.com"
"https://mylanguages.at.ua/Pygmalion-George_Bernard_Shaw.pdf","George Bernard Shaw","mylanguages.at.ua"
"http://ndl.ethernet.edu.et/bitstream/123456789/55467/1/163.pdf.pdf","The Arab Awakening","ndl.ethernet.edu.et"
"https://newrevenue.org/wp-content/uploads/2021/02/how-not-to-be-wrong-ellenberg-20169131536812.pdf","How Not to Be Wrong : The Power of Mathematical Thinking ...","newrevenue.org"
"https://news.ycombinator.com/item?id=48420827","Ask HN: Why is the HN crowd so anti-AI? - Hacker News","news.ycombinator.com"
"https://next.io/online-casinos-us/","Best US Online Casinos 2026: Updated Real Money Casinos List","next.io"
"https://www.nme.com/guides/gaming-guides/connections-answers-hints-groups-today-3557066","'Connections' answers and hints for today, June 21 - NME","nme.com"
"https://northeasttimes.com/online-casinos/","Best Online Casinos That Pay Real Money: June, 2026","northeasttimes.com"
"https://www.oddschecker.com/us/casino","Best US Online Casino Bonuses: Claim $10k+ of Sign up Bonuses","oddschecker.com"
"https://www.oecd.org/content/dam/oecd/en/publications/reports/2025/02/states-of-fragility-2025_c9080496/81982370-en.pdf","States of Fragility 2025 | OECD","oecd.org"
"https://onlinegamblingme.com/casino-reviews/","Best Online Casino Reviews for 2026 - Online Gambling Me","onlinegamblingme.com"
"https://www.oychicago.com/","Top Michigan Online Casinos in 2026","oychicago.com"
"https://www.parliament.uk/globalassets/documents/lords-committees/gambling-committee/gambling-written-evidence-volume.pdf","Contents - UK Parliament","parliament.uk"
"https://peacekeeping.un.org/sites/default/files/securing_development-public_finance_and_the_security_sector.pdf","Securing Development: Public Finance and the Security Sector","peacekeeping.un.org"
"https://www.pennlive.com/online-casinos/2026/03/best-real-money-online-casino-bonuses-fanatics-casino-promo-code-vs-betparx-casino-promo-code-pennlive.html","Online Casino Bonus Comparison: Fanatics vs. betPARX + ...","pennlive.com"
"https://physionet.org/files/deid/1.1/dict/sno_edited.txt?download","Download - PhysioNet","physionet.org"
"https://www.playmichigan.com/online-casino/","Best Michigan Online Casinos 2026 | All Michigan Online Casinos List","playmichigan.com"
"https://pmc.ncbi.nlm.nih.gov/articles/PMC11122160/","Artificial Intelligence and Healthcare: A Journey through History ...","pmc.ncbi.nlm.nih.gov"
"https://pokerfuse.com/online-casinos/bonuses/","Where to Play: Comparing the Best US Online Casino Bonuses 2026 | Pokerfuse","pokerfuse.com"
"https://www.pokerlistings.com/casino-sites","Best Online Casino Sites Reviews (June 2026) Top Real ...","pokerlistings.com"
"https://www.pokernews.com/casino/review/","Online Casino Reviews & Ratings for 2026 | PokerNews","pokernews.com"
"https://www.pokerology.com/best-online-casinos/","Best Real Money Online Casinos (June, 2026) - Pokerology.com","pokerology.com"
"https://www.pokerstrategy.com/online-casinos/","Top Online Casinos for Real Money in the USA 2026","pokerstrategy.com"
"https://www.pokertube.com/article/fast-payout-casinos","Best Instant Withdrawal Casinos in 2026: 15 Fast Payout Sites","pokertube.com"
"https://pokie.inc/casino-category/real-money-casinos/","Best Real Money Online Casinos Australia 2026 Tested & Ranked","pokie.inc"
"https://premium-casino.xyz","premium-casino.xyz","premium-casino.xyz"
"https://premium-casinos.com","premium-casinos.com","premium-casinos.com"
"https://pro-casino.com","pro-casino.com","pro-casino.com"
"https://pro-casino.site","pro-casino.site","pro-casino.site"
"https://pro-casinos.com","pro-casinos.com","pro-casinos.com"
"https://www.profitduel.com/casino-reviews","Casino Reviews U.S. | Top 38 Online Casinos Ranked | ProfitDuel","profitduel.com"
"https://www.quora.com/Which-is-the-most-trusted-online-casino-review-site","Which is the most trusted online casino review site? - Quora","quora.com"
"https://www.racingpost.com/online-casino/best-sites/","Best Online Casinos (2026): Top 60 UKGC Licensed Sites","racingpost.com"
"https://rated-casino.com","rated-casino.com","rated-casino.com"
"https://readingroo.ms/5/7/5/7/57570/57570-h/57570-h.htm","The Project Gutenberg eBook of Famouse Composers And Their ...","readingroo.ms"
"https://www.reddit.com/r/TooAfraidToAsk/comments/1q4257c/looking_for_reliable_best_real_money_casinos_2026/","looking for reliable best real money casinos 2026, where do you actually play?","reddit.com"
"https://repositorio.usp.br/directbitstream/c9aef84e-5dcc-4d9f-8214-6082225699cf/3151853.pdf","A 150 Years' Celebration of Darwin's Book on Human Evolution and ...","repositorio.usp.br"
"https://research.chalmers.se/publication/527805/file/527805_Fulltext.pdf","The Digital Transformation of Labor - research.chalmers.se","research.chalmers.se"
"https://www.researchgate.net/profile/Nataliya-Panasenko/publication/349287090_Tactile_information-processing_channel_in_the_plants_names/links/6027d4c492851c4ed56bdd81/Tactile-information-processing-channel-in-the-plants-names.pdf","LANGUAGE, LITERATURE AND CULTURE IN A CHANGING ...","researchgate.net"
"https://resilientcitiesnetwork.org/downloadable_resources/UR/Resilient-Cities-Resilient-Lives-Learning-from-the-100RC-Network.pdf","Resilient Cities, Resilient Lives Learning from the 100RC Network","resilientcitiesnetwork.org"
"https://rg.org/casinos","Best Real Money Online Casinos June 2026: All Legal States - RG.org","rg.org"
"https://www.right-to-education.org/sites/right-to-education.org/files/resource-attachments/Education_International_Hidden_Privatisation_in_Public_Education.pdf","Hidden Privatisation in Public Education","right-to-education.org"
"https://www.rotowire.com/betting/casinos/delaware","Delaware Online Casinos: Legal Sites and How the Market Works","rotowire.com"
"https://rrc.cvc.uab.es/downloads/GenericVocabulary.txt","generic dictionary - Robust Reading Competition","rrc.cvc.uab.es"
"https://rsrglobal.org/uncategorized/casino-luckysheriff-support/","I Reviewed LuckySheriff Casino RTPs to Industry Average Data for ...","rsrglobal.org"
"https://sabew.org/2026/03/2025-best-in-business-honorees-judging-comments/","2025 Best in Business Honorees Judging Comments - SABEW","sabew.org"
"https://safe-casino.com","safe-casino.com","safe-casino.com"
"https://safe-casino.net","safe-casino.net","safe-casino.net"
"https://safe-casino.org","safe-casino.org","safe-casino.org"
"https://safe-casino.xyz","safe-casino.xyz","safe-casino.xyz"
"https://safe-casinos.info","safe-casinos.info","safe-casinos.info"
"https://safe-casinos.net","safe-casinos.net","safe-casinos.net"
"https://www.scribd.com/document/563222829/The-Absolute-Sound-March-2022-US","The Absolute Sound - March 2022 US | PDF | Amplifier - Scribd","scribd.com"
"https://siege.gg/news/the-top-5-best-casino-review-sites-you-can-trust","The Top 5 Best Casino Review Sites You Can Trust","siege.gg"
"https://sigma.world/play/online-casinos/","Best Online Casino 2026 | Top Casino Sites - SiGMA","sigma.world"
"https://www.similarweb.com/top-websites/gambling/casinos/","Top Casinos Websites Ranking | Similarweb","similarweb.com"
"https://sites.cc.gatech.edu/classes/AY2012/cs2316_fall/codesamples/6of12.txt","6of12.txt","sites.cc.gatech.edu"
"https://sites.cs.ucsb.edu/~mikec/cs16/misc/demos/savitch10pgms/Chapter07/words.txt","words.txt - UCSB Computer Science","sites.cs.ucsb.edu"
"https://slotcatalog.com/en/best-online-casinos","SlotCatalog","slotcatalog.com"
"https://slotsspot.com/online-casinos/reviews/","Best Online Casino Reviews 2026 | 100% Trusted & Independent","slotsspot.com"
"https://www.slotstemple.com/us/states/mi/","Michigan Casinos | Online Casino Michigan Reviews","slotstemple.com"
"https://www.slotsup.com/","SlotsUp: User-Centric Guide in the Online Casino Industry","slotsup.com"
"https://smartintegratedsystem.com/blog/1","Smart Integrated System bersama dengan Revolusi Industri 4.0","smartintegratedsystem.com"
"https://soldier.army.mod.uk/media/0wnn1o3v/soldier-mar-08.pdf","DESIGN FOR LIFE - Soldier magazine - The British Army","soldier.army.mod.uk"
"https://www.sportsbookreview.com/casino/us/michigan/","Michigan Online Casinos: Best Gambling Sites in MI 2026","sportsbookreview.com"
"https://www.sportsline.com/casinos/","Best online casinos for real money: Picking the top online casino for 2026","sportsline.com"
"https://www.strafe.com/esports-betting/casino/","Best Online Casinos 2026: Ratings & Reviews [164+ Toplist]","strafe.com"
"https://www.stripe.press/poor-charlies-almanack/book","Poor Charlie's Almanack: The Essential Wit and Wisdom of Charles ...","stripe.press"
"https://super-casino.com","super-casino.com","super-casino.com"
"https://super-casino.net","super-casino.net","super-casino.net"
"https://super-casino.org","super-casino.org","super-casino.org"
"https://super-casinos.com","super-casinos.com","super-casinos.com"
"https://super-casinos.net","super-casinos.net","super-casinos.net"
"https://super-online-casinos.net","super-online-casinos.net","super-online-casinos.net"
"https://super.cs.uchicago.edu/usable18/dictionarysmall.txt","English dictionary","super.cs.uchicago.edu"
"https://www.tensai.org/ebooks/Cognitive%20Psychology_Tensai.pdf","Cognitive Psychology - Tensai STEM Academy","tensai.org"
"https://thegilbreths.com/best-online-casino/","TOP 10 Online Casino Australia Real Money: Best Online Casinos ...","thegilbreths.com"
"https://www.thelines.com/casino/bonuses/","Best Real Money Casino Bonuses & Promos for June 2026 in US","thelines.com"
"https://theplaybookusa.com/states/michigan/","Online Casinos Michigan 2026 Best Legal Sites & Bonuses | The Playbook USA","theplaybookusa.com"
"https://www.thesaurus.com/browse/extensive","EXTENSIVE Synonyms & Antonyms - 110 words | Thesaurus.com","thesaurus.com"
"https://www.thesportsgeek.com/online-casinos/delaware/","Best Delaware Online Casinos: Real Money DE Online Casinos 2026","thesportsgeek.com"
"https://timesofmalta.com/article/10-best-online-casino-sites-malta-a2.1108064","10 best online casino sites in Malta","timesofmalta.com"
"https://toomaisquare.co.uk/casinos/online-casinos/paypal/","PayPal Casino UK Choose from 100+ Sites with Bonuses","toomaisquare.co.uk"
"https://top-10-casinos.com","top-10-casinos.com","top-10-casinos.com"
"https://top-10-casinos.net","top-10-casinos.net","top-10-casinos.net"
"https://top-4-casinos.com","top-4-casinos.com","top-4-casinos.com"
"https://top-casino-directory.com","top-casino-directory.com","top-casino-directory.com"
"https://top-casino-list.com","top-casino-list.com","top-casino-list.com"
"https://top-casino-reviews.com","top-casino-reviews.com","top-casino-reviews.com"
"https://top-casino.com","top-casino.com","top-casino.com"
"https://top-casino.info","top-casino.info","top-casino.info"
"https://top-casino.net","top-casino.net","top-casino.net"
"https://top-casino.org","top-casino.org","top-casino.org"
"https://top-casino.xyz","top-casino.xyz","top-casino.xyz"
"https://top-casinoreviews.com","top-casinoreviews.com","top-casinoreviews.com"
"https://top-casinos.com","top-casinos.com","top-casinos.com"
"https://top-casinos.org","top-casinos.org","top-casinos.org"
"https://top-casinos.xyz","top-casinos.xyz","top-casinos.xyz"
"https://top-online-casinos.com","top-online-casinos.com","top-online-casinos.com"
"https://top.michigancasinosites.org/","Top 10 Michigan Online Casinos & Apps 2026","top.michigancasinosites.org"
"https://www.top10casinos.com/online-casino/index.html","Best Online Casino Sites : Expertly Reviewed Top Casinos","top10casinos.com"
"https://tribuna.com/en/casino/ratings/united-kingdom-casinos/","Best Online Casino in United Kingdom 2026 - Tribuna.com","tribuna.com"
"https://trinket.io/python/56a03639a8","Put Interactive Python Anywhere on the Web - Trinket","trinket.io"
"https://trusted-casino-list.com","trusted-casino-list.com","trusted-casino-list.com"
"https://trusted-casino.com","trusted-casino.com","trusted-casino.com"
"https://trusted-casino.net","trusted-casino.net","trusted-casino.net"
"https://trusted-casinos.com","trusted-casinos.com","trusted-casinos.com"
"https://trusted-casinos.net","trusted-casinos.net","trusted-casinos.net"
"https://trusted-online-casinos.com","trusted-online-casinos.com","trusted-online-casinos.com"
"https://trusted-online-casinos.org","trusted-online-casinos.org","trusted-online-casinos.org"
"https://www.trustpilot.com/categories/casino","Best companies in Casino on Trustpilot","trustpilot.com"
"https://ultimate-casino.com","ultimate-casino.com","ultimate-casino.com"
"https://ultimate-casinos.com","ultimate-casinos.com","ultimate-casinos.com"
"https://ultra-casino.com","ultra-casino.com","ultra-casino.com"
"https://ultra-casino.info","ultra-casino.info","ultra-casino.info"
"https://ultra-casino.net","ultra-casino.net","ultra-casino.net"
"https://ultra-casino.org","ultra-casino.org","ultra-casino.org"
"https://ultra-casinos.com","ultra-casinos.com","ultra-casinos.com"
"http://www.un-documents.net/our-common-future.pdf","Our Common Future: Report of the World Commission on ...","un-documents.net"
"https://www.unodc.org/roseap/uploads/documents/Publications/2024/Casino_Underground_Banking_Report_2024.pdf","Casinos, Money Laundering, Underground Banking, and ...","unodc.org"
"https://users.cis.fiu.edu/~weiss/cop3337_f99/dict.txt","The dictionary","users.cis.fiu.edu"
"https://ustr.gov/sites/default/files/files/Press/Reports/2025NTE.pdf","FOREIGN TRADE BARRIERS - USTR","ustr.gov"
"https://uswfoxtail.blob.core.windows.net/foxtail-prod-uploads/documents/FINAL_ABSTRACTS.pdf","Abstracts","uswfoxtail.blob.core.windows.net"
"https://www.vastdata.com/whitepaper","The VAST Platform White Paper - VAST Data","vastdata.com"
"https://vasylivanovich.com.ua/blog/optymalni-terminy-posadky-sadzhanciv-derev-ta-kushchiv?srsltid=AfmBOorqh2kcpY7Ggd8xuUBrJKl7KECaMgw0KpHkR58B9XjqruDQgK2q","Коли найкращий час для посадки дерев та кущів","vasylivanovich.com.ua"
"https://www.vegasinsider.com/casinos/","Best Online Casinos in the US 2026 — Real Money Sites Ranked","vegasinsider.com"
"https://verified-casinos.com","verified-casinos.com","verified-casinos.com"
"https://www.whichbingo.co.uk/casino-sites/","WhichBingo Casino","whichbingo.co.uk"
"https://wikibingo.co.uk/","Best Fast Withdrawal & Instant Payout Casinos UK (2026)","wikibingo.co.uk"
"https://www.wits.ac.za/alumni/obituaries/obituary-content-by-year/","Obituary content by year - Wits University","wits.ac.za"
"https://wizardofodds.com/online-casinos/reviews/","Best Online Casinos: #1 List of Reviewed & Rated Operators! 2026 (1268 Reviewed)","wizardofodds.com"
"https://wsgc.wa.gov/sites/default/files/2023-10/Commission%20Packet_5.pdf","WASHINGTON STATE GAMBLING COMMISSION PUBLIC MEETING","wsgc.wa.gov"
"https://yalelawjournal.org/note/amazons-antitrust-paradox","Amazon's Antitrust Paradox - Yale Law Journal","yalelawjournal.org"
1 url title domain
2 https://www.accc.gov.au/system/files/ACCC+commissioned+report+-+The+impact+of+digital+platforms+on+news+and+journalistic+content,+Centre+for+Media+Transition+(2).pdf The Impact of Digital Platforms on News and Journalistic Content accc.gov.au
3 https://www.actionnetwork.com/casino Best U.S. Real Money Online Casinos - December 2023 actionnetwork.com
4 https://www.al.com/casinos/real-money-casinos/ The best online casinos for real money in the U.S. for 2026 al.com
5 https://www.ananda.org/autobiography/ Autobiography of a Yogi, by Paramhansa Yogananda ananda.org
6 https://www.antoniocasella.eu/restorative/Milward_2009.pdf ePapyrus PDF Document - Antonio Casella antoniocasella.eu
7 https://www.askgamblers.com/online-casinos/reviews Trusted Online Casino Reviews & Ratings ✔️ (2026) askgamblers.com
8 https://assets.kpmg.com/content/dam/kpmgsites/ie/pdf/insights/aviation/Aviation_Leaders_Report_2026.pdf.coredownload.inline.pdf Aviation Leaders Report 2026 - KPMG agentic corporate services assets.kpmg.com
9 https://ats.io/casinos/ Best Online Casinos USA (2026): List of Real Money Gambling Sites ats.io
10 https://www.attorneyatwork.com/i-dont-know-what-this-word-means-is-this-post-expansive-or-extensive/ I Don’t Know What This Word Means: Is This Post Expansive or Extensive? attorneyatwork.com
11 https://www.ausonlinecasinosites.us.com/ Best Online Casinos Australia 2026: Real Money AU Casino Sites ausonlinecasinosites.us.com
12 https://www.baseballamerica.com/stories/best-payout-online-casinos/ 15 Best Payout Online Casinos 2026: High RTP Sites & Games baseballamerica.com
13 https://baselgovernance.org/sites/default/files/2019-02/2016_gcrsport_en.pdf Global Corruption Report: Sport - Basel Institute on Governance baselgovernance.org
14 http://bc.math.msu.su/wiki/lib/exe/fetch.php?media=downloads:toffler_alvin_future_shock.pdf Alvin Toffler Future Shock bc.math.msu.su
15 https://best-7-online-casinos.com best-7-online-casinos.com best-7-online-casinos.com
16 https://best-9-online-casinos.com best-9-online-casinos.com best-9-online-casinos.com
17 https://best-casino-directory.com best-casino-directory.com best-casino-directory.com
18 https://best-casino-list.com best-casino-list.com best-casino-list.com
19 https://best-casino-reviews.com best-casino-reviews.com best-casino-reviews.com
20 https://best-casino.com best-casino.com best-casino.com
21 https://best-casino.net best-casino.net best-casino.net
22 https://best-casino.xyz best-casino.xyz best-casino.xyz
23 https://best-casinos.com best-casinos.com best-casinos.com
24 https://best-casinos.net best-casinos.net best-casinos.net
25 https://best-online-casinos.com best-online-casinos.com best-online-casinos.com
26 https://best-online-casinos.info best-online-casinos.info best-online-casinos.info
27 https://best-online-casinos.net best-online-casinos.net best-online-casinos.net
28 https://best-online-casinos.org best-online-casinos.org best-online-casinos.org
29 https://best-online-casinos.xyz best-online-casinos.xyz best-online-casinos.xyz
30 https://best.unitestatesonlinecasino.net/ Best Online Casino for Real Money & Top Offshore Casinos 2026 best.unitestatesonlinecasino.net
31 https://bestpokiesau.com/ Best Online Casinos 2026 – Top Australian Pokies for Real Money bestpokiesau.com
32 https://betanews.com/gb/most-trusted-online-gambling-sites/ Best Online Casinos That Pay Real Money - March 2026 Update betanews.com
33 https://betpokies.org/ Best Real Money Online Casinos in Australia 2026 betpokies.org
34 https://bettergambling.ie/casino-sites/ All Online Casino Sites Ireland 2026 | BetterGambling.ie bettergambling.ie
35 https://www.betting.co.uk/casino/ Betting.co.uk Casino betting.co.uk
36 https://www.bettingusa.com/states/de/casino/ Delaware Online Casinos 2026: Legal Sites, Apps & Bonuses bettingusa.com
37 https://www.betvictor.com/en-gb/casino Play Online Casino Games at BetVictor's UK Casino Site betvictor.com
38 https://www.bibliophilebooks.com/WebRoot/Store/Shops/Bibliophile/4DC1/304F/E927/3180/420E/C0A8/647D/D51E/C338WEBCAT.pdf Gifts For Book Lovers HAPPY NEW YEAR TO ALL OUR LOVELY ... bibliophilebooks.com
39 https://www.bis.org/publ/gten05.pdf Report on Consolidation in the Financial Sector bis.org
40 https://www.bitdegree.org/crypto/shuffle-casino-review Shuffle Casino Review: Games, Bonuses, and Full Guide bitdegree.org
41 https://www.blackjackreview.com/wp/2025/06/27/what-is-the-best-safe-gambling-site/ What Is The Best Safe Gambling Site? - Blackjack Review blackjackreview.com
42 https://www.bluefirereader.com/certification/dictionary.pdf a dictionary PDF - Bluefire Reader bluefirereader.com
43 https://bnu.repository.guildhe.ac.uk/id/eprint/9388/1/1.%20Volume%20I%20Pedros%20final%20thesis%20170715.pdf Consumer Decision Making in Restaurant Selection bnu.repository.guildhe.ac.uk
44 https://bojoko.ca/casino/ The Best Casino Sites 2026 - Top 100 Online Casinos in Canada bojoko.ca
45 https://www.bonus.com/online-casinos/delaware/ Delaware (DE) Best Online Casinos & Bonuses 2026 bonus.com
46 https://www.bonusfinder.com/ Compare Best Casino Bonuses and Latest Offers | BonusFinder US bonusfinder.com
47 https://www.bookmakersreview.com/usa/west-virginia/online-casinos/ West Virginia Online Casinos: Legal Status & Player Guide (2026) bookmakersreview.com
48 https://www.businesstoday.com.mt/gaming/gaming/2871/best_online_casinos_in_malta_for_specific_player_types Best Online Casinos in Malta for Specific Player Types businesstoday.com.mt
49 https://www.businessworld.ie/news/Irishluck-offers-reviews-of-casinos-and-sports-betting-sites-Irish-gamblers-575373.html Irishluck offers reviews of casinos and sports betting sites Irish ... businessworld.ie
50 https://cabinjohn.org/index.php/join-listserv/ Join Listserv – Community of Cabin John, Maryland cabinjohn.org
51 https://cardmates.co.uk/online-casinos Best Online Casino Sites in the UK for 2026 - Cardmates cardmates.co.uk
52 https://www.cardozolawreview.com/legalized-sports-wagering-in-america/ Legalized Sports Wagering in America - Cardozo Law Review cardozolawreview.com
53 https://www.cardplayer.com/online-casinos Best Real Money Online Casinos in the US (June 2026 ) cardplayer.com
54 https://casadelalmendro.com/ Fundacion Casa del Almendro – Centro de ayuda familiar al ... casadelalmendro.com
55 https://casino.guru/casino-reviews Online Casino Reviews by Experts and Players casino.guru
56 https://www.casino.org/reviews/ 100% Independent & Trusted Online Casino Reviews (2026) casino.org
57 https://www.casino.us/ Best US Online Casinos | Top 10 Casinos Compared 2026 casino.us
58 https://casinogrounds.com/casinos/ Online Casino Reviews by Professional Gamblers (Updated) casinogrounds.com
59 https://casinologia.com/top-10-best-casinos-list/ Top 10 Best Online Casinos at the Moment | 2026 casinologia.com
60 https://www.casinomeister.com/online-casinos/reviews/ Bluntly Honest Online Casino Reviews (2026) - Casinomeister casinomeister.com
61 https://www.casinorating.com/ Licensed Online Casinos by Country 2026 casinorating.com
62 https://casinoreviews.com/ Online Casino Reviews - Trusted Reviews & Ratings | CasinoReviews.com casinoreviews.com
63 https://www.casinoreviews.net/ Independent Online Casino Reviews 2026 | Casinoreviews.net casinoreviews.net
64 https://www.casinos.com/us/sitemap Sitemap - Casinos.com casinos.com
65 https://www.casinoslists.com/ CasinosLists.com: Complete Online Casino Lists & Bonuses casinoslists.com
66 https://www.casinovendors.com/vendorsatoz/a/ Vendors A-Z (A) - Casino Vendors casinovendors.com
67 https://cdn.osce.org/sites/default/files/f/documents/b/b/13836.pdf The Media Freedom Internet Cookbook - OSCE.org cdn.osce.org
68 https://chipy.com/casinos Authentic Online Casino Reviews by Real Players ⭐ - Chipy.com chipy.com
69 https://www.collinsdictionary.com/us/dictionary/english-thesaurus/expansive Synonyms of 'expansive' in American English collinsdictionary.com
70 https://commission.europa.eu/system/files/2022-12/Annex%20I_LiteratureReview_20210319_clean_dsj_v3.0_a.pdf Study on the impact of new technologies on free and fair elections ... commission.europa.eu
71 https://comparasino.com/casino-bonuses/ Top Online Casino Bonuses 2026 | 10x Wagering Cap Compliant comparasino.com
72 https://www.covers.com/casino Best Real Money Online Casinos for US Players 2026 - Covers.com covers.com
73 https://www.craveguitars.co.uk/tag/guitar-music/page/2/ guitar music – Page 2 - CRAVE Guitars craveguitars.co.uk
74 https://cs.arizona.edu/~mercer/Projects/BoggleWords Untitled cs.arizona.edu
75 https://www.cs.princeton.edu/courses/archive/spring18/cos226/assignments/autocomplete/testing/words-333333.txt words-333333 - cs.Princeton cs.princeton.edu
76 https://dappradar.com/narratives/gambling/platforms Best Crypto Gambling Sites 2026: List of Top No KYC Crypto Casinos dappradar.com
77 https://www.dcaf.ch/sites/default/files/publications/documents/Compendium_Building_Integrity_and_Reducing_Corruption_in_Defence.pdf Building Integrity and Reducing Corruption in Defence dcaf.ch
78 https://deadspin.com/sweepstakes-casinos/free-slots-real-money/ Free Online Slots For Real Money: Free Play Casinos Ranked deadspin.com
79 https://delawarepark.betrivers.com/ BetRivers at Delaware Park Casino & Racing Online Casino ... delawarepark.betrivers.com
80 https://des.assam.gov.in/sites/default/files/swf_utility_folder/departments/ecostat_medhassu_in_oid_3/this_comm/tourism_sss.pdf 2.Development of a Tourism Convenience Index for the Major ... des.assam.gov.in
81 https://detective.gumer.info/txt/cambridge.pdf Cambridge Companion Crime Fiction detective.gumer.info
82 https://www.dictionary.com/browse/extensive EXTENSIVE Definition & Meaning | Dictionary.com dictionary.com
83 https://documents1.worldbank.org/curated/en/990601467315599193/pdf/105761-REVISED-CDI-Report-FinalLatest-PUBLIC.pdf The Potential Economic Role of the Caribbean Diaspora documents1.worldbank.org
84 https://doe.gov.in/files/cenetral-pay_document/7cpc_report_eng.pdf Report of the Seventh Central Pay Commission doe.gov.in
85 https://dokumen.pub/oxford-thesaurus-of-current-english.html Oxford Thesaurus of Current English - DOKUMEN.PUB dokumen.pub
86 https://www.eecis.udel.edu/~lliao/cis320f05/dictionary.txt Dictionary eecis.udel.edu
87 https://esports-news.co.uk/gambling-sites/ Best Gambling Websites in 2026 - Top 10 Online Casinos UK esports-news.co.uk
88 https://esportsinsider.com/us/gambling/offshore-casinos Best Offshore Casinos in 2026 for US Players esportsinsider.com
89 https://europeangaming.eu/portal/best-online-casinos-europe/ Best Online Casinos Europe 2026: Top 15 EU Casino Sites europeangaming.eu
90 https://www.eurosif.org/wp-content/uploads/2021/10/European-SRI-2018-Study.pdf european sri study | eurosif eurosif.org
91 https://exclusive-casino.com exclusive-casino.com exclusive-casino.com
92 https://exclusive-casino.net exclusive-casino.net exclusive-casino.net
93 https://exclusive-casino.org exclusive-casino.org exclusive-casino.org
94 https://www.ey.com/content/dam/ey-unified-site/ey-com/en-in/insights/media-entertainment/images/ey-shape-the-future-indian-media-and-entertainment-is-scripting-a-new-story.pdf Indian media and entertainment is scripting a new story - EY ey.com
95 https://www.facom.ufu.br/~albertini/2sem2015/ori/dic.txt dic.txt - Facom/UFU facom.ufu.br
96 https://fast-casino.com fast-casino.com fast-casino.com
97 https://fast-casino.xyz fast-casino.xyz fast-casino.xyz
98 https://fast-casinos.com fast-casinos.com fast-casinos.com
99 https://fast-casinos.info fast-casinos.info fast-casinos.info
100 https://fast-casinos.net fast-casinos.net fast-casinos.net
101 https://fast-casinos.org fast-casinos.org fast-casinos.org
102 http://www.fatf-gafi.org/content/dam/fatf-gafi/reports/Asset-Recovery-Guidance-Best-Practices.pdf.coredownload.pdf Asset Recovery Guidance and Best Practices - FATF fatf-gafi.org
103 https://fbcclassroom.com/wp-content/uploads/2022/07/The-Worlds-Religions-Our-Great-Wisdom-Traditions-by-Huston-Smith-z-lib.org_.pdf The World's Religions - Global Classroom by Filadelfia Bible College fbcclassroom.com
104 https://files.spawningpool.net/docs/Vault2.0.-.TTRPG-Gamebooks/Feng%20Shui/Feng%20Shui%20%5B2nd%20ed%5D/FS%202e%20-%20Feng%20Shui%202%20-%20Core%20Rulebook%20v2.1%20%7BAG4020%7D.pdf FS 2e - Feng Shui 2 - Core Rulebook v2.1 {AG4020}.pdf files.spawningpool.net
105 https://filmtalk.org/film-books/ FILM BOOKS filmtalk.org
106 https://first.com/casino/best-casinos FIRST.com Casinos first.com
107 https://focus-asia.com/the-pokies-casino-australia-2026-review/ Australia’s Top-Rated Real Money Casino Site focus-asia.com
108 https://forum.mr-gamble.com/topic/6646-top-10-casinos-list/ Top 10 casinos list - Mr. Gamble Casino Forum forum.mr-gamble.com
109 https://www.fqmagazine.co.uk/gear-and-gadgets-2/gaming/item/69229-exploring-the-top-online-casinos-with-fast-payouts.html Exploring the Top Online Casinos With Fast Payouts - FQ Magazine fqmagazine.co.uk
110 https://www.freebets.com/casino/ FreeBets Casino freebets.com
111 https://www.freep.com/story/sports/best-online-casinos-for-real-money/86800526007/ Best online casinos for real money in the U.S. (June 2026) freep.com
112 https://www.gambling.com/uk/online-casinos Best UK Online Casino Sites in 2026 - Gambling.com gambling.com
113 https://www.gamblingcommission.gov.uk/ Gambling Commission website gamblingcommission.gov.uk
114 https://www.gamblinginsider.com/news/109371/ireland-gambling-regulator-licensing-fines-grai Ireland Gambling Regulator Opens Licensing, Fines Up to €20M gamblinginsider.com
115 https://www.gamblingnerd.com/ Best Online Gambling Sites in 2026 - Trusted Gambling Websites gamblingnerd.com
116 https://gamblingriskinformednovascotia.ca/wp-content/uploads/2019/01/SEIG_FINAL_REPORT_2011.pdf The Social and Economic Impacts of Gambling gamblingriskinformednovascotia.ca
117 https://www.gamblingsite.com/michigan/ Michigan Online Gambling - Best MI Gambling Sites in (2026) gamblingsite.com
118 https://www.gamblingsites.com/ Best Online Gambling Sites in 2026 - Ranked by Real Players gamblingsites.com
119 https://www.gameshub.com/australia/online-casinos/pokies/ Best Online Pokies in Australia for Real Money in June gameshub.com
120 https://www.gamesreviews.com/casino/michigan/ Michigan Online Casinos February, 2026: All Real Money Michigan Online Casinos gamesreviews.com
121 https://gamezinger.com/casinos/delaware/ Best Delaware Online Casinos - Top DE Casino Sites 2026 gamezinger.com
122 https://gamingamerica.com/gambling-sites Best Gambling Sites for Real Money - Top Gambling Sites in 2026 gamingamerica.com
123 https://www.gamingtoday.com/ Gaming Today | America’s Home for Gambling News & Reviews gamingtoday.com
124 https://www.gatesnotes.com/work/save-lives/reader/20-years-to-give-away-virtually-all-my-wealth 20 years to give away virtually all my wealth | Bill Gates gatesnotes.com
125 https://getb8.us/online-casinos/ Online Casino Reviews - Best Trusted Online Casino Sites 2026 by Getb8 getb8.us
126 https://getbets.us/casinos/ Online Casinos USA 2026 — Tested & Ranked | GetBets getbets.us
127 https://gg.co.uk/online-casinos/ Best Online Casinos UK - Top Real Money Casinos 2026 - GG.co.uk gg.co.uk
128 https://www.ginx.tv/en/casino/michigan Best Michigan Online Casinos 2026 | Trusted Online Casinos in MI ginx.tv
129 https://www.glasgowtimes.co.uk/news/25703087.top-six-best-online-casino-review-sites/ Top six best online casino review sites | Glasgow Times glasgowtimes.co.uk
130 https://globallawexperts.com/top-10-jurisdictions-to-launch-your-licensed-gambling-business/ Top 10 Jurisdictions To Launch Your Licensed Gambling Business globallawexperts.com
131 https://www.grin.com/document/322750?srsltid=AfmBOorZNlBbFWB6hJnbkYgVKE5xOFgl2dqddYD2oVvRr6oLoYiA8Yy1 The Middle Class or You only live twice | Grin grin.com
132 https://gvrkiran.github.io/content/Betting_apps_India.pdf Quantifying the Illicit Ecosystem of Betting Apps in India gvrkiran.github.io
133 https://hendrix-cs.github.io/csci150/data/english3.txt Common English Words - Hendrix College Computer Science hendrix-cs.github.io
134 https://www.hltv.org/betting/online-casinos Best Online Casino Sites – June 2026 | HLTV.org hltv.org
135 https://huggingface.co/microsoft/cocolm-base/resolve/main/dict.txt?download=true 736 kB - Hugging Face huggingface.co
136 https://icom.museum/wp-content/uploads/2025/02/IRAPFM-FINAL_7fev_2025-1.pdf A worldwide answer from Museums icom.museum
137 https://ifdb.org/allreviews?id=lzj370u772du3hx7&sortby=&ratings=yes&pg=all Ratings and Reviews by Mike Russo ifdb.org
138 https://igamingfuture.com/sweepstakes-casinos/promo-codes/no-deposit-bonus/ Sweepstakes Casino No Deposit Bonuses for June 2026 igamingfuture.com
139 https://www.imdb.com/list/ls002806018/ Most Handsome Men of All Time - IMDb imdb.com
140 https://www.institutparisregion.fr/fileadmin/NewEtudes/Etude_481/c146_gb.pdf Large-Scale Urban Development Projects in Europe institutparisregion.fr
141 https://inventwithpython.com/dictionary.txt dictionary.txt - Invent with Python inventwithpython.com
142 https://justgamblers.com/michigan/online-casinos/ Best MI Online Casinos 2026: List of Legal Michigan Casino Sites justgamblers.com
143 https://www.kaggle.com/hamedetezadi/spam-e-mails-using-naive-bayes/execution SPAM E-MAILS USING NAIVE BAYES! kaggle.com
144 https://www.kit.nl/wp-content/uploads/2024/03/unique-features-of-agricultural-cooperatives-in-sub-Saharan-Africa.pdf HANDBOOK OF RESEARCH ON COOPERATIVES AND MUTUALS kit.nl
145 https://lcb.org/ 3669 Online Casinos Reviewed with 8681 Bonuses ranked by Game lcb.org
146 https://legal-casino.com legal-casino.com legal-casino.com
147 https://legal-casino.net legal-casino.net legal-casino.net
148 https://legal-casinos.net legal-casinos.net legal-casinos.net
149 https://legal-online-casinos.com legal-online-casinos.com legal-online-casinos.com
150 https://www.legalsportsreport.com/online-casinos/ Best Online Casinos for Real Money: Top Online Casino for US in June 2026 legalsportsreport.com
151 https://www.lexology.com/library/detail.aspx?g=4375fbe8-4efe-44a4-9b7f-74a3622b1679 First-step analysis: gaming in Malta - Lexology lexology.com
152 https://www.library.ca.gov/wp-content/uploads/crb-reports/97-003.pdf GAMBLING IN CALIFORNIA library.ca.gov
153 https://licensed-casino.com licensed-casino.com licensed-casino.com
154 https://licensed-online-casinos.com licensed-online-casinos.com licensed-online-casinos.com
155 https://www.livecasinocomparer.com/online-casino/ LiveCasinoComparer livecasinocomparer.com
156 https://www.maltatoday.com.mt/sponsored/sponsored/134110/another_top_10_website_pros_and_cons_of_using_casino_comparison_websites Another Top 10 website: Pros and cons of using casino comparison ... maltatoday.com.mt
157 https://manuspillai.com/ Manu S Pillai manuspillai.com
158 https://maritzburgcollege.co.za/wp-content/uploads/2025/10/2025-10-21-MCollege-Magazine-2024-in-2025-LR-spreads-for-website.pdf maritzburg college nº 159 september 2025 ma gazine 2024 maritzburgcollege.co.za
159 https://mcds-therapy.eu/ Best Online Casinos Ireland | Top Casino Sites for 2026 mcds-therapy.eu
160 https://mediarep.org/bitstreams/00a072dd-62c7-4cff-baed-acbf163cd05c/download Game Research Methods. An Overview - Media/Rep mediarep.org
161 https://mega-casino.com mega-casino.com mega-casino.com
162 https://mega-casino.info mega-casino.info mega-casino.info
163 https://mega-casino.net mega-casino.net mega-casino.net
164 https://mega-casino.org mega-casino.org mega-casino.org
165 https://mega-casino.site mega-casino.site mega-casino.site
166 https://mega-casino.xyz mega-casino.xyz mega-casino.xyz
167 https://mega-casinos.com mega-casinos.com mega-casinos.com
168 https://mergerscorp.com/businesses-for-sale/ Established Businesses for Sale - MergersCorp M&A International mergerscorp.com
169 https://www.merriam-webster.com/thesaurus/expansive EXPANSIVE Synonyms: 28 Similar and Opposite Words | Merriam-Webster Thesaurus merriam-webster.com
170 https://www.metropolitancasinos.com/ Metropolitan Gaming | Top Casinos, Bars and Restaurants metropolitancasinos.com
171 https://www.metrotimes.com/discover/best-gambling-sites-38226192/ Best Gambling Sites That Pay Out Real Money in May, 2026 metrotimes.com
172 https://www.mfa.gov.cn/eng/zy/jj/2030kcxfzyc/202406/P020240606605159427708.pdf China's Progress Report on Implementation of the 2030 Agenda for ... mfa.gov.cn
173 https://www.mga.org.mt/ Malta Gaming Authority: Home mga.org.mt
174 https://mgaleg.maryland.gov/cmte_testimony/2025/bat/25362_01302025_15145-69.pdf MD Senate iGaming Hearing Rebuck Testimony (Extend - Maryland mgaleg.maryland.gov
175 https://miller.readthedocs.io/en/6.13.0/data/english-words.txt english-words.txt - Miller miller.readthedocs.io
176 https://www.mkaugaming.com/what-makes-a-gambling-article-actually-in-depth/ What Makes A Gambling Article Actually In-Depth? mkaugaming.com
177 https://www.mlive.com/online-casinos/sites/ Best Michigan Online Casinos 2026 Real Money Sites in MI mlive.com
178 https://www.moenr.gov.bt/?p=7837 Vacancy Announcement - - MoENR moenr.gov.bt
179 https://montenegrobet.me/wp-content/uploads/2014/11/Journal-Of-Gambling-Issues-kandaska-studija-o-uticaju-udaljenosti-na-maloljetnike.pdf Journal of Gambling Issues Issue 20, June 2007 - Montenegrobet montenegrobet.me
180 https://www.moviemaker.com/best-online-pokies-au/ Best Online Pokies in Australia 2026: Top 15 Real Money Sites moviemaker.com
181 https://mr-gamble.com/en/online-casino/ Compare Online Casinos 2026 — Compare Gambling Sites mr-gamble.com
182 https://www.mrgreen.com/ Mr Green Online Casino – Award-Winning Slots & Big Jackpots mrgreen.com
183 https://mrq.com/ Play the best UK online casino games today at MrQ mrq.com
184 https://muddyrivernews.com/igaming-hub/best-online-pokies-australia-2026-top-rated-real-money-pokies-sites-for-aussie-players-updated-june-2026/20260602140000/ Best Online Pokies Australia 2026: Top Rated Real Money Pokies Sites For Aussie Players (Updated June 2026 – Muddy River News muddyrivernews.com
185 https://musicsite1.wordpress.com/music-lists-2/the-guardian-1000-albums-to-hear-before-you-die/ The Guardian – 1000 Albums to Hear Before you Die | The Music Site musicsite1.wordpress.com
186 https://mylanguages.at.ua/Pygmalion-George_Bernard_Shaw.pdf George Bernard Shaw mylanguages.at.ua
187 http://ndl.ethernet.edu.et/bitstream/123456789/55467/1/163.pdf.pdf The Arab Awakening ndl.ethernet.edu.et
188 https://newrevenue.org/wp-content/uploads/2021/02/how-not-to-be-wrong-ellenberg-20169131536812.pdf How Not to Be Wrong : The Power of Mathematical Thinking ... newrevenue.org
189 https://news.ycombinator.com/item?id=48420827 Ask HN: Why is the HN crowd so anti-AI? - Hacker News news.ycombinator.com
190 https://next.io/online-casinos-us/ Best US Online Casinos 2026: Updated Real Money Casinos List next.io
191 https://www.nme.com/guides/gaming-guides/connections-answers-hints-groups-today-3557066 'Connections' answers and hints for today, June 21 - NME nme.com
192 https://northeasttimes.com/online-casinos/ Best Online Casinos That Pay Real Money: June, 2026 northeasttimes.com
193 https://www.oddschecker.com/us/casino Best US Online Casino Bonuses: Claim $10k+ of Sign up Bonuses oddschecker.com
194 https://www.oecd.org/content/dam/oecd/en/publications/reports/2025/02/states-of-fragility-2025_c9080496/81982370-en.pdf States of Fragility 2025 | OECD oecd.org
195 https://onlinegamblingme.com/casino-reviews/ Best Online Casino Reviews for 2026 - Online Gambling Me onlinegamblingme.com
196 https://www.oychicago.com/ Top Michigan Online Casinos in 2026 oychicago.com
197 https://www.parliament.uk/globalassets/documents/lords-committees/gambling-committee/gambling-written-evidence-volume.pdf Contents - UK Parliament parliament.uk
198 https://peacekeeping.un.org/sites/default/files/securing_development-public_finance_and_the_security_sector.pdf Securing Development: Public Finance and the Security Sector peacekeeping.un.org
199 https://www.pennlive.com/online-casinos/2026/03/best-real-money-online-casino-bonuses-fanatics-casino-promo-code-vs-betparx-casino-promo-code-pennlive.html Online Casino Bonus Comparison: Fanatics vs. betPARX + ... pennlive.com
200 https://physionet.org/files/deid/1.1/dict/sno_edited.txt?download Download - PhysioNet physionet.org
201 https://www.playmichigan.com/online-casino/ Best Michigan Online Casinos 2026 | All Michigan Online Casinos List playmichigan.com
202 https://pmc.ncbi.nlm.nih.gov/articles/PMC11122160/ Artificial Intelligence and Healthcare: A Journey through History ... pmc.ncbi.nlm.nih.gov
203 https://pokerfuse.com/online-casinos/bonuses/ Where to Play: Comparing the Best US Online Casino Bonuses 2026 | Pokerfuse pokerfuse.com
204 https://www.pokerlistings.com/casino-sites Best Online Casino Sites Reviews (June 2026) – Top Real ... pokerlistings.com
205 https://www.pokernews.com/casino/review/ Online Casino Reviews & Ratings for 2026 | PokerNews pokernews.com
206 https://www.pokerology.com/best-online-casinos/ Best Real Money Online Casinos (June, 2026) - Pokerology.com pokerology.com
207 https://www.pokerstrategy.com/online-casinos/ Top Online Casinos for Real Money in the USA 2026 pokerstrategy.com
208 https://www.pokertube.com/article/fast-payout-casinos Best Instant Withdrawal Casinos in 2026: 15 Fast Payout Sites pokertube.com
209 https://pokie.inc/casino-category/real-money-casinos/ Best Real Money Online Casinos Australia 2026 – Tested & Ranked pokie.inc
210 https://premium-casino.xyz premium-casino.xyz premium-casino.xyz
211 https://premium-casinos.com premium-casinos.com premium-casinos.com
212 https://pro-casino.com pro-casino.com pro-casino.com
213 https://pro-casino.site pro-casino.site pro-casino.site
214 https://pro-casinos.com pro-casinos.com pro-casinos.com
215 https://www.profitduel.com/casino-reviews Casino Reviews U.S. | Top 38 Online Casinos Ranked | ProfitDuel profitduel.com
216 https://www.quora.com/Which-is-the-most-trusted-online-casino-review-site Which is the most trusted online casino review site? - Quora quora.com
217 https://www.racingpost.com/online-casino/best-sites/ Best Online Casinos (2026): Top 60 UKGC Licensed Sites racingpost.com
218 https://rated-casino.com rated-casino.com rated-casino.com
219 https://readingroo.ms/5/7/5/7/57570/57570-h/57570-h.htm The Project Gutenberg eBook of Famouse Composers And Their ... readingroo.ms
220 https://www.reddit.com/r/TooAfraidToAsk/comments/1q4257c/looking_for_reliable_best_real_money_casinos_2026/ looking for reliable best real money casinos 2026, where do you actually play? reddit.com
221 https://repositorio.usp.br/directbitstream/c9aef84e-5dcc-4d9f-8214-6082225699cf/3151853.pdf A 150 Years' Celebration of Darwin's Book on Human Evolution and ... repositorio.usp.br
222 https://research.chalmers.se/publication/527805/file/527805_Fulltext.pdf The Digital Transformation of Labor - research.chalmers.se research.chalmers.se
223 https://www.researchgate.net/profile/Nataliya-Panasenko/publication/349287090_Tactile_information-processing_channel_in_the_plants_names/links/6027d4c492851c4ed56bdd81/Tactile-information-processing-channel-in-the-plants-names.pdf LANGUAGE, LITERATURE AND CULTURE IN A CHANGING ... researchgate.net
224 https://resilientcitiesnetwork.org/downloadable_resources/UR/Resilient-Cities-Resilient-Lives-Learning-from-the-100RC-Network.pdf Resilient Cities, Resilient Lives Learning from the 100RC Network resilientcitiesnetwork.org
225 https://rg.org/casinos Best Real Money Online Casinos June 2026: All Legal States - RG.org rg.org
226 https://www.right-to-education.org/sites/right-to-education.org/files/resource-attachments/Education_International_Hidden_Privatisation_in_Public_Education.pdf Hidden Privatisation in Public Education right-to-education.org
227 https://www.rotowire.com/betting/casinos/delaware Delaware Online Casinos: Legal Sites and How the Market Works rotowire.com
228 https://rrc.cvc.uab.es/downloads/GenericVocabulary.txt generic dictionary - Robust Reading Competition rrc.cvc.uab.es
229 https://rsrglobal.org/uncategorized/casino-luckysheriff-support/ I Reviewed LuckySheriff Casino RTPs to Industry Average Data for ... rsrglobal.org
230 https://sabew.org/2026/03/2025-best-in-business-honorees-judging-comments/ 2025 Best in Business Honorees – Judging Comments - SABEW sabew.org
231 https://safe-casino.com safe-casino.com safe-casino.com
232 https://safe-casino.net safe-casino.net safe-casino.net
233 https://safe-casino.org safe-casino.org safe-casino.org
234 https://safe-casino.xyz safe-casino.xyz safe-casino.xyz
235 https://safe-casinos.info safe-casinos.info safe-casinos.info
236 https://safe-casinos.net safe-casinos.net safe-casinos.net
237 https://www.scribd.com/document/563222829/The-Absolute-Sound-March-2022-US The Absolute Sound - March 2022 US | PDF | Amplifier - Scribd scribd.com
238 https://siege.gg/news/the-top-5-best-casino-review-sites-you-can-trust The Top 5 Best Casino Review Sites You Can Trust siege.gg
239 https://sigma.world/play/online-casinos/ Best Online Casino 2026 | Top Casino Sites - SiGMA sigma.world
240 https://www.similarweb.com/top-websites/gambling/casinos/ Top Casinos Websites Ranking | Similarweb similarweb.com
241 https://sites.cc.gatech.edu/classes/AY2012/cs2316_fall/codesamples/6of12.txt 6of12.txt sites.cc.gatech.edu
242 https://sites.cs.ucsb.edu/~mikec/cs16/misc/demos/savitch10pgms/Chapter07/words.txt words.txt - UCSB Computer Science sites.cs.ucsb.edu
243 https://slotcatalog.com/en/best-online-casinos SlotCatalog slotcatalog.com
244 https://slotsspot.com/online-casinos/reviews/ Best Online Casino Reviews 2026 | 100% Trusted & Independent slotsspot.com
245 https://www.slotstemple.com/us/states/mi/ Michigan Casinos | Online Casino Michigan Reviews slotstemple.com
246 https://www.slotsup.com/ SlotsUp: User-Centric Guide in the Online Casino Industry slotsup.com
247 https://smartintegratedsystem.com/blog/1 Smart Integrated System bersama dengan Revolusi Industri 4.0 smartintegratedsystem.com
248 https://soldier.army.mod.uk/media/0wnn1o3v/soldier-mar-08.pdf DESIGN FOR LIFE - Soldier magazine - The British Army soldier.army.mod.uk
249 https://www.sportsbookreview.com/casino/us/michigan/ Michigan Online Casinos: Best Gambling Sites in MI 2026 sportsbookreview.com
250 https://www.sportsline.com/casinos/ Best online casinos for real money: Picking the top online casino for 2026 sportsline.com
251 https://www.strafe.com/esports-betting/casino/ Best Online Casinos 2026: Ratings & Reviews [164+ Toplist] strafe.com
252 https://www.stripe.press/poor-charlies-almanack/book Poor Charlie's Almanack: The Essential Wit and Wisdom of Charles ... stripe.press
253 https://super-casino.com super-casino.com super-casino.com
254 https://super-casino.net super-casino.net super-casino.net
255 https://super-casino.org super-casino.org super-casino.org
256 https://super-casinos.com super-casinos.com super-casinos.com
257 https://super-casinos.net super-casinos.net super-casinos.net
258 https://super-online-casinos.net super-online-casinos.net super-online-casinos.net
259 https://super.cs.uchicago.edu/usable18/dictionarysmall.txt English dictionary super.cs.uchicago.edu
260 https://www.tensai.org/ebooks/Cognitive%20Psychology_Tensai.pdf Cognitive Psychology - Tensai STEM Academy tensai.org
261 https://thegilbreths.com/best-online-casino/ TOP 10 Online Casino Australia Real Money: Best Online Casinos ... thegilbreths.com
262 https://www.thelines.com/casino/bonuses/ Best Real Money Casino Bonuses & Promos for June 2026 in US thelines.com
263 https://theplaybookusa.com/states/michigan/ Online Casinos Michigan 2026 – Best Legal Sites & Bonuses | The Playbook USA theplaybookusa.com
264 https://www.thesaurus.com/browse/extensive EXTENSIVE Synonyms & Antonyms - 110 words | Thesaurus.com thesaurus.com
265 https://www.thesportsgeek.com/online-casinos/delaware/ Best Delaware Online Casinos: Real Money DE Online Casinos 2026 thesportsgeek.com
266 https://timesofmalta.com/article/10-best-online-casino-sites-malta-a2.1108064 10 best online casino sites in Malta timesofmalta.com
267 https://toomaisquare.co.uk/casinos/online-casinos/paypal/ PayPal Casino UK Choose from 100+ Sites with Bonuses toomaisquare.co.uk
268 https://top-10-casinos.com top-10-casinos.com top-10-casinos.com
269 https://top-10-casinos.net top-10-casinos.net top-10-casinos.net
270 https://top-4-casinos.com top-4-casinos.com top-4-casinos.com
271 https://top-casino-directory.com top-casino-directory.com top-casino-directory.com
272 https://top-casino-list.com top-casino-list.com top-casino-list.com
273 https://top-casino-reviews.com top-casino-reviews.com top-casino-reviews.com
274 https://top-casino.com top-casino.com top-casino.com
275 https://top-casino.info top-casino.info top-casino.info
276 https://top-casino.net top-casino.net top-casino.net
277 https://top-casino.org top-casino.org top-casino.org
278 https://top-casino.xyz top-casino.xyz top-casino.xyz
279 https://top-casinoreviews.com top-casinoreviews.com top-casinoreviews.com
280 https://top-casinos.com top-casinos.com top-casinos.com
281 https://top-casinos.org top-casinos.org top-casinos.org
282 https://top-casinos.xyz top-casinos.xyz top-casinos.xyz
283 https://top-online-casinos.com top-online-casinos.com top-online-casinos.com
284 https://top.michigancasinosites.org/ Top 10 Michigan Online Casinos & Apps 2026 top.michigancasinosites.org
285 https://www.top10casinos.com/online-casino/index.html Best Online Casino Sites : Expertly Reviewed Top Casinos top10casinos.com
286 https://tribuna.com/en/casino/ratings/united-kingdom-casinos/ Best Online Casino in United Kingdom 2026 - Tribuna.com tribuna.com
287 https://trinket.io/python/56a03639a8 Put Interactive Python Anywhere on the Web - Trinket trinket.io
288 https://trusted-casino-list.com trusted-casino-list.com trusted-casino-list.com
289 https://trusted-casino.com trusted-casino.com trusted-casino.com
290 https://trusted-casino.net trusted-casino.net trusted-casino.net
291 https://trusted-casinos.com trusted-casinos.com trusted-casinos.com
292 https://trusted-casinos.net trusted-casinos.net trusted-casinos.net
293 https://trusted-online-casinos.com trusted-online-casinos.com trusted-online-casinos.com
294 https://trusted-online-casinos.org trusted-online-casinos.org trusted-online-casinos.org
295 https://www.trustpilot.com/categories/casino Best companies in Casino on Trustpilot trustpilot.com
296 https://ultimate-casino.com ultimate-casino.com ultimate-casino.com
297 https://ultimate-casinos.com ultimate-casinos.com ultimate-casinos.com
298 https://ultra-casino.com ultra-casino.com ultra-casino.com
299 https://ultra-casino.info ultra-casino.info ultra-casino.info
300 https://ultra-casino.net ultra-casino.net ultra-casino.net
301 https://ultra-casino.org ultra-casino.org ultra-casino.org
302 https://ultra-casinos.com ultra-casinos.com ultra-casinos.com
303 http://www.un-documents.net/our-common-future.pdf Our Common Future: Report of the World Commission on ... un-documents.net
304 https://www.unodc.org/roseap/uploads/documents/Publications/2024/Casino_Underground_Banking_Report_2024.pdf Casinos, Money Laundering, Underground Banking, and ... unodc.org
305 https://users.cis.fiu.edu/~weiss/cop3337_f99/dict.txt The dictionary users.cis.fiu.edu
306 https://ustr.gov/sites/default/files/files/Press/Reports/2025NTE.pdf FOREIGN TRADE BARRIERS - USTR ustr.gov
307 https://uswfoxtail.blob.core.windows.net/foxtail-prod-uploads/documents/FINAL_ABSTRACTS.pdf Abstracts uswfoxtail.blob.core.windows.net
308 https://www.vastdata.com/whitepaper The VAST Platform White Paper - VAST Data vastdata.com
309 https://vasylivanovich.com.ua/blog/optymalni-terminy-posadky-sadzhanciv-derev-ta-kushchiv?srsltid=AfmBOorqh2kcpY7Ggd8xuUBrJKl7KECaMgw0KpHkR58B9XjqruDQgK2q Коли найкращий час для посадки дерев та кущів vasylivanovich.com.ua
310 https://www.vegasinsider.com/casinos/ Best Online Casinos in the US 2026 — Real Money Sites Ranked vegasinsider.com
311 https://verified-casinos.com verified-casinos.com verified-casinos.com
312 https://www.whichbingo.co.uk/casino-sites/ WhichBingo Casino whichbingo.co.uk
313 https://wikibingo.co.uk/ Best Fast Withdrawal & Instant Payout Casinos UK (2026) wikibingo.co.uk
314 https://www.wits.ac.za/alumni/obituaries/obituary-content-by-year/ Obituary content by year - Wits University wits.ac.za
315 https://wizardofodds.com/online-casinos/reviews/ Best Online Casinos: #1 List of Reviewed & Rated Operators! 2026 (1268 Reviewed) wizardofodds.com
316 https://wsgc.wa.gov/sites/default/files/2023-10/Commission%20Packet_5.pdf WASHINGTON STATE GAMBLING COMMISSION PUBLIC MEETING wsgc.wa.gov
317 https://yalelawjournal.org/note/amazons-antitrust-paradox Amazon's Antitrust Paradox - Yale Law Journal yalelawjournal.org
+16
View File
@@ -0,0 +1,16 @@
url,title,domain,casino_brands_linked
"https://se.casino.guru","Casino Guru Den ultimata guiden till onlinecasinon i Sverige","undefined",8
"https://dk.casino.guru","Casino Guru den ultimative guide til online casinoer","undefined",8
"https://de.casino.guru","Casino Guru Der ultimative Leitfaden der Online Casino Welt","undefined",8
"https://sk.casino.guru","Casino Guru Najlepší sprievodca svetom online kasín","undefined",8
"https://pt.casino.guru","Casino Guru O Guia Mais Recente Sobre Casinos Online","undefined",8
"https://sr.casino.guru","Casino Guru Ultimativni Vodič u Svet Online Kazina","undefined",8
"https://jp.casino.guru","Casino Guru – オンラインカジノの世界徹底ガイド","undefined",8
"https://es.casino.guru","Casino Guru | La guía definitiva del mundo de los casinos online","undefined",8
"https://casino.guru/casino-reviews","","undefined",99
"https://chipy.com/casinos","","undefined",99
"https://www.askgamblers.com/online-casinos/reviews","","undefined",99
"https://www.casino.org/reviews","","undefined",99
"https://kasinoguru-cz.com","Kasino Guru Nejlepší průvodce světem online kasin","undefined",9
"https://kasinoguru-bg.com","Kasino Guru – Уникален пътеводител за онлайн казината","undefined",9
"https://kazinoazov.net","Уникальный путеводитель по миру онлайн-казино | kazinoazov.net","undefined",9
1 url title domain casino_brands_linked
2 https://se.casino.guru Casino Guru – Den ultimata guiden till onlinecasinon i Sverige undefined 8
3 https://dk.casino.guru Casino Guru – den ultimative guide til online casinoer undefined 8
4 https://de.casino.guru Casino Guru – Der ultimative Leitfaden der Online Casino Welt undefined 8
5 https://sk.casino.guru Casino Guru – Najlepší sprievodca svetom online kasín undefined 8
6 https://pt.casino.guru Casino Guru – O Guia Mais Recente Sobre Casinos Online undefined 8
7 https://sr.casino.guru Casino Guru – Ultimativni Vodič u Svet Online Kazina undefined 8
8 https://jp.casino.guru Casino Guru – オンラインカジノの世界徹底ガイド undefined 8
9 https://es.casino.guru Casino Guru | La guía definitiva del mundo de los casinos online undefined 8
10 https://casino.guru/casino-reviews undefined 99
11 https://chipy.com/casinos undefined 99
12 https://www.askgamblers.com/online-casinos/reviews undefined 99
13 https://www.casino.org/reviews undefined 99
14 https://kasinoguru-cz.com Kasino Guru – Nejlepší průvodce světem online kasin undefined 9
15 https://kasinoguru-bg.com Kasino Guru – Уникален пътеводител за онлайн казината undefined 9
16 https://kazinoazov.net Уникальный путеводитель по миру онлайн-казино | kazinoazov.net undefined 9
+32
View File
@@ -0,0 +1,32 @@
const { pool } = require('./src/db');
(async () => {
const r = await pool.query(
'SELECT DISTINCT casino_name FROM casinos WHERE LENGTH(TRIM(casino_name)) BETWEEN 3 AND 40 ORDER BY casino_name LIMIT 60'
);
var goodCount = 0;
var junkCount = 0;
for (const row of r.rows) {
var name = row.casino_name || '';
if (!name.match(/^[a-zA-Z]/)) continue;
var ok =
(name.match(/[a-zA-Z]/g) || []).length / name.length > 0.4 &&
!/(icon|dmca|bonus|spins|review>|»|banner)/i.test(name);
if (ok) {
console.log('✅ ' + name.replace(/[^a-zA-Z0-9\s&]/g, '').trim());
goodCount++;
} else {
console.log('❌ STILL JUNK: ' + JSON.stringify(name));
junkCount++;
}
}
console.log('\nGood: ' + goodCount + ', Bad: ' + junkCount);
await pool.end();
})();
+13
View File
@@ -0,0 +1,13 @@
const { pool } = require('./src/db');
(async () => {
var sites = ['first.com', 'exclusive-casino.com', 'forum.mr-gamble.com', 'fast-casino.com'];
const r = await pool.query(
'SELECT c.id, c.site_name, ca.casino_name FROM crawls c JOIN casinos ca ON ca.crawl_id = c.id WHERE c.site_name = $1 OR c.site_name = $2 ORDER BY c.id DESC LIMIT 30',
[sites[0], sites[1]]
);
for (const row of r.rows) {
console.log(row.id, '|', row.site_name.padEnd(20), '| #'+row.position, ':', row.casino_name);
}
await pool.end();
process.exit(0);
})();
+21
View File
@@ -0,0 +1,21 @@
const { pool } = require('./src/db');
async function run() {
const days = await pool.query('SELECT DISTINCT DATE(crawled_at) as d FROM crawls ORDER BY d');
console.log('\n=== Unique crawl days ===');
for (const r of days.rows) console.log(' ', r.d);
// What the position-history query actually returns for Mr Q / Top10OnlineSlots
const pos = await pool.query(
'SELECT DISTINCT ON (DATE(c.crawled_at)) DATE(c.crawled_at)::text AS day, ca.position FROM crawls c JOIN casinos ca ON ca.crawl_id = c.id WHERE ca.casino_name = $1 AND c.site_name = $2 ORDER BY DATE(c.crawled_at), c.crawled_at ASC',
['Mr Q', 'Top10OnlineSlots']
);
console.log('\n=== Position history (current query) ===');
console.log('Records:', pos.rows.length);
for (const r of pos.rows) console.log(' Day:', r.day, '| Pos:', r.position);
await pool.end();
}
run();
process.on('exit', () => process.exit(0));
+16
View File
@@ -0,0 +1,16 @@
const { pool } = require('./src/db');
(async () => {
const r = await pool.query(
'SELECT c.id, c.crawled_at, c.site_name, ca.position, ca.casino_name FROM crawls c JOIN casinos ca ON ca.crawl_id = c.id WHERE c.id >= 320 ORDER BY c.id DESC, position LIMIT 40'
);
for (const row of r.rows) {
const dt = new Date(row.crawled_at).toISOString().split('T')[1].substring(0, 5);
const pos = String(row.position).padStart(2);
console.log(dt, '|', row.site_name.padEnd(25), '#', pos, ':', row.casino_name);
}
await pool.end();
process.exit(0);
})();
+74
View File
@@ -0,0 +1,74 @@
const path = require('path');
const fs = require('fs');
var sitesDir = './src/sites';
var jsonFiles = fs.readdirSync(sitesDir).filter(f => f.endsWith('.json'));
console.log('Loaded', jsonFiles.length, 'configs\n');
// Patterns that indicate junk/parked/dead configs to remove
var badPatterns = [
// Known parked/for-sale domains from the validation run
'best-7-online-casinos.com.json', // Timeout
'best-9-online-casinos.com.json', // DNS fail
'best-casino-list.com.json', // Timeout
'best-casino.xyz.json', // Afternic parked
'best-casinos.com.json', // Afternic parked
'best-online-casinos.info.json', // Timeout
'best.unitestatesonlinecasino.net.json', // Not casino content
'casadelalmendro.com.json', // Non-casino, timeout
'cabinjohn.org.json', // Not a casino site
'delawarepark.betrivers.com.json', // Cloudflare block
'exclusive-casino.com.json', // No data extracted
];
// Auto-detect bad configs by checking if URL is clearly not a review/affiliate site
for (var i = 0; i < jsonFiles.length; i++) {
const fp = path.join(sitesDir, jsonFiles[i]);
var data = JSON.parse(fs.readFileSync(fp, 'utf8'));
var url = (data.url || '').toLowerCase();
// Delete if explicitly listed as bad from validation run
if (badPatterns.includes(jsonFiles[i])) {
try { fs.unlinkSync(fp); console.log('🚫 DELETE:', jsonFiles[i]); }
catch(e) { console.warn('Failed to delete', jsonFiles[i]); }
continue;
}
// Auto-detect junk: URLs that point to Afternic/Godaddy/Auctions/parked pages
if (url.includes('forsale.godaddy') || url.includes('afternic.com/forsale')) {
try { fs.unlinkSync(fp); console.log('🚫 PARKED:', jsonFiles[i]); }
catch(e) {}
continue;
}
// Auto-detect known dead/reserved TLDs that were just parked domains
if (url.includes('.xyz') || url.includes('.site')) {
try { fs.unlinkSync(fp); console.log('🚫 JUNK TLD:', jsonFiles[i]); }
catch(e) {}
continue;
}
// Remove generic casino directory sites that have no real content
var genericSites = [
'best-casino.net',
'safe-casino.xyz',
'ultimate-casinos.com',
'super-online-casinos.net'
];
for (var j = 0; j < genericSites.length; j++) {
if (url.includes(genericSites[j])) {
try { fs.unlinkSync(fp); console.log('🚫 GENERIC:', jsonFiles[i]); }
catch(e) {}
break;
}
}
}
// Count remaining
const finalFiles = fs.readdirSync(sitesDir).filter(f => f.endsWith('.json'));
console.log('\n========== SUMMARY ==========');
console.log('✅ Kept:', finalFiles.length, 'valid site configs in src/sites/');
console.log('🚫 Deleted:', jsonFiles.length - finalFiles.length, 'junk/parked configs');
+92
View File
@@ -0,0 +1,92 @@
const { pool } = require('./src/db');
(async () => {
console.log('Cleaning junk entries from casinos table...\n');
// Step 1: Delete rows whose name matches exact known junk patterns
var toDeletePatterns = [
'', 'menu', 'nav', 'home', 'login', 'signup', 'register', 'account',
'support', 'help', 'contact us', 'about us', 'terms', 'privacy policy',
'top online casinos review list',
'gambleaware', 'casino bonus codes not working',
'free spins no deposit', 'welcome bonus',
'crypto casino', 'bitcoin', 'best online casinos'
];
for (const pattern of toDeletePatterns) {
try {
const r = await pool.query(
"DELETE FROM casinos WHERE LOWER(TRIM(casino_name)) = $1",
[pattern.toLowerCase()]
);
if (r.rowCount > 0) {
console.log(' Deleted', r.rowCount, 'matching:', JSON.stringify(pattern));
}
} catch(e) {}
}
// Step 2: Delete rows where name matches LIKE patterns for junk text
var likePatterns = [
'%casino bonus codes not working% ',
'%online casinos & casino sites',
'dmca%',
'crypto bonus%',
'%willkommenspaket%',
'lizenz und spielerschutz bei exclusive casino',
'krypto bonus bis%',
'%deposit match up to%',
'%bonus und freispiele%',
'%exclusive bonuses%',
'%casino reps%',
'%casino bonus codes%',
'get bonus%',
'visit%casino%'
];
for (const pat of likePatterns) {
try {
const r = await pool.query(
"DELETE FROM casinos WHERE LOWER(casino_name) LIKE $1",
[pat.toLowerCase()]
);
if (r.rowCount > 0) {
console.log(' Deleted', r.rowCount, 'matching:', JSON.stringify(pat));
}
} catch(e) {}
}
// Step 3: Delete rows where name looks like phone numbers or prices or is too long
await pool.query(
"DELETE FROM casinos WHERE casino_name ~* '^\\d+\\s?\\d+' OR LOWER(casino_name) LIKE '%trustpilot%' OR LENGTH(casino_name) > 100"
);
// Step 4: Delete rows starting with symbols/emoji/special chars (not real brand names)
await pool.query(
'DELETE FROM casinos WHERE casino_name ~* \'^[\\+\\-\\>\\.]+\' OR casino_name ~ \'^\\\\s+$\''
);
// Count what remains per crawl
const countResult = await pool.query(
"SELECT c.id, c.site_name, COUNT(*) as cnt FROM crawls c LEFT JOIN casinos ca ON ca.crawl_id = c.id GROUP BY c.id, c.site_name ORDER BY c.id DESC LIMIT 30"
);
console.log('\n=== Remaining entries per recent crawl ===');
for (const row of countResult.rows) {
const name = row.site_name || '[failed]';
console.log('Crawl#', String(row.id).padEnd(4), '|', name.padEnd(25), '|', row.cnt, 'entries saved');
}
// Show sample of kept names after cleanup
const keptNames = await pool.query(
"SELECT DISTINCT casino_name FROM casinos WHERE LENGTH(TRIM(casino_name)) > 3 ORDER BY casino_name LIMIT 100"
);
console.log('\n=== Sample of valid names remaining in DB ===');
for (const row of keptNames.rows) {
const n = row.casino_name;
if (!n || !/[a-zA-Z]/.test(n[0])) continue; // skip remaining junk
console.log(' ', n);
}
await pool.end();
})();
+209
View File
@@ -0,0 +1,209 @@
'use strict';
const { execFile } = require('child_process');
const fs = require('fs');
(async () => {
const OUTFILE = './casino_affiliate_1000.csv';
const UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/605.1.5 Version/17 Safari/605.1';
const CKW = [
'bet365','888casino','pokerstars','partypoker','unibet','bwin',
'betway','williamhill','ladbrokes','betfair','draftkings','fanduel',
'betmgm','caesars','barstool','leovegas','bovada','ignitioncasino',
'jackpotcity','10bet','22bet','paddypower','1xbet','coral',
'/casino/'
]; // brand keywords for link detection
const SKIPD = ['youtube.','facebook.','twitter','.instagram.',
'linkedin.','tiktok.','wikipedia.','pinterest','medium.','forbes.',
'google.','amazon.','static.','cdn.','fonts.googleapis.','flickr.','github.com','duckduckgo'];
const SEEDS = [
'https://www.casino.org/reviews/', // lots of casino brand outbound links
'https://casino.guru/casino-reviews', // returns many regional subdomains
'https://chipy.com/casinos',
'... 5 more high-yield seeds will be added by the scraper dynamically from earlier search data
];
async function sleep(ms){return new Promise(r=>setTimeout(r,ms));}
function curlPage(url) {
return new Promise(res =>
execFile('curl',['-sL','--max-time','8','-A',UA,'--max-filesize','40000',url],{timeout:12e3},(_,o)=>res(o||'')));
}
function parseLinks(html, skipHost) {
// strip scripts/styles first
const c = html.replace(/<script[\s\S]*?<\/script>/gi,'')
.replace(/<style[\s\S]*?<\/style>/gi,'');
const domains = new Set();
for (const m of c.matchAll(/href=["'](https?:\/\/[^"'\s>]+)["']/gi)) {
try {
const u = new URL(m[1]);
if (!['http:','https:'].includes(u.protocol)) continue;
let d = u.hostname.replace('www.', '');
// skip same host + known non-relevant
if (d === skipHost || SKIPD.some(k => d.includes(k))) continue;
domains.add(d);
} catch {} // ignore broken URLs
}
let title = '';
const tt = c.match(/<title[^>]*>([^<]{10,250})<\/title>/i);
if (tt) title = tt[1].trim();
return { doms: [...domains], title };
}
function countCasinoRefs(dList) {
const hits = new Set();
for (const d of dList) {
const lo = `:${d.toLowerCase()}`; // add prefix so we can check paths like ':/bet365-reviews'
if (lo.includes('casino') || lo.includes('/casin') || lo.includes('.bet')) { hits.add(d); continue; }
for (const kw of CKW) {
if (kw.length < 3) continue; // ignore short keywords that match too often
if (lo.includes(kw.toLowerCase()) || d.toLowerCase().includes(kw.replace('/',''))) {
hits.add(d); break;
}
}
}
return hits.size;
}
async function crawlSeeds(seedList, allSites, candidateSet) {
console.log('▶ Phase-1: crawling seed portals\n');
for (const sUrl of seedList) {
console.log(`[${Object.keys(allSites).length + 1}] ${sUrl}`);
let skipD = ''; try { skipD = new URL(sUrl).hostname.replace('www.', ''); } catch { continue; }
const html = await curlPage(sUrl);
if (!html || html.length < 400) { console.log(' [failed/empty]\n'); await sleep(3e3); continue; }
// add seed itself as verified site
allSites[skipD] = { url: sUrl, title: '', brands: 99 };
try{
const data = parseLinks(html, skipD);
console.log(`${data.doms.length} outbound domains\n`);
// count brands this seed page links to
const bc = countCasinoRefs(data.doms);
allSites[skipD] = { url: sUrl, title: data.title || skipD, brands: bc > 5 ? bc : 99 };
for (const od of data.doms) candidateSet.add(od);
} catch(e){ console.log(' [parse error]', e.message);}
await sleep(2500); // throttle between seed crawls
}
console.log(`\n✓ Seeds done. Found ${candidateSet.size} candidate domains.\n`);
} // crawlSeeds()
async function verifyCandidates(candidateSet, allSites) {
console.log('▶ Phase-2: verifying candidate sites...\n');
const CONC = 4; // parallel fetches per batch
let checkedTotal = 0;
for (let ci = 0; ci < candidateSet.size && Object.keys(allSites).length < 1300; ci += CONC) {
const batch = [...candidateSet].slice(ci, ci + CONC);
try {
// fetch all candidates in this batch concurrently
const results = await Promise.all(batch.map(async dom => {
let foundOk = false;
// try HTTPS first, fallback to HTTP
for (const proto of ['https://', 'http://']) {
try {
const url = proto + dom;
const html = await curlPage(url);
if (!html || html.length < 400) continue; // skip empty / blocked responses
// after redirects use the real final URL
let actualUrl = url;
const redirectMatch = html.match(/\r?\n[A-Z][A-C]\s+([^\n]+)/);
if (redirectMatch && redirectMatch[1].startsWith('http')) { actualUrl = redirectMatch[1]; }
try { actualUrl = new URL(actualUrl).origin; } catch {} // normalize
let selfD, parsedData;
try {
selfD = new URL(actualUrl).hostname.replace('www.', '');
parsedData = parseLinks(html, selfD || dom);
selfD = selfD || 'unknown';
} catch { continue; }
if (!parsedData) continue;
const brandCount = countCasinoRefs(parsedData.doms);
foundOk = true;
// verify: Must either link to ≥5+ different casino brands OR have 20+ outbound links total indicating review behavior
const linkScore = parsedData.dom.length > 10 ? Math.min(parsedData.dom.length / 2, 8) : 0;
const finalScore = brandCount + (linkScore * 1.5); // weight volume more
if (finalScore >= 7 || brandCount >= 4) {
allSites[dom] = { url: actualUrl, title: parsedData.title || dom, brands: Math.round(finalScore) };
console.log(' ✓ ' + Object.keys(allSites).length + ': ' + dom + ' (' + brandCount + ' brands)');
// recursively add this site's outbound links as NEW candidates too!
for (const od of parsedData.doms || []) {
if (!allSites[od] && [...candidateSet].indexOf(od) === -1) candidateSet.add(od);
}
}
} catch(e) { /* individual fetch attempt failed */;}
if (foundOk) break; // stop trying protocols after success
} // proto for-loop
return { ok: foundOk, dom };
})); // map over batch entries
checkedTotal += results.length;
candidateSet.deleteAllWhereAlreadyVerified(allSites); // prune verified domains from candidate pool
if (Object.keys(allSites).length % 15 === Object.keys(allSites).length % 8) { // checkpoint at milestones
console.log('\n [CHECKPOINT] Verified:' + Object.keys(allSites).length + ' remaining:' + candidateSet.size);
}
await sleep(4e3); // throttle between batches to avoid IP ban
} catch(e) { console.error('batch error', e); checkedTotal += CONC; candidateSet.deleteAllVerifedFromSet(allSites);}
} // ci for-loop
} // verifyCandidates()
// ══════ MAIN ═════==
(async function main() {
console.log('═══ Casino Affiliate Crawler v4 ═══\n');
const allSites = {}; // domain -> {url, title, brands}
const candidates = new Set(); // pending candidate domains needing verification
const checkpointFile='./crawlsave.json';
if (fs.existsSync(checkpointFile)) {
try {
const cp = JSON.parse(fs.readFileSync(checkpointFile,'utf8'));
if (cp.allSites) Object.assign(allSites, cp.allSites);
if (cp.candidates && cp.candidates.length > 0) { for (const c of cp.candidates) candidates.add(c); }
console.log('Loaded checkpoint:',Object.keys(allSites).length,'sites,',candidates.size,'pending\n');
} catch(e){ console.log('bad checkpoint, fresh start');}
else console.log('No checkpoint, starting fresh...\n');
await crawlSeeds(SEEDS, allSites, candidates); // phase-1: scrape high-value review portals for seeds+outbound links
await verifyCandidates(candidates, allSites); // phase-2: recursively verify those outbound domains
// ── Write CSV file ─────
const hdr = 'url,title,domain,casino_brands_linked';
const sortedEntries = Object.entries(allSites).sort((a,b) => a[1].title.localeCompare(b[1].title||''));
const rows = sortedEntries.map(([dom, entry]) => {
const t = (entry.title || dom || '').replace(/"/g, "'");
return '"' + entry.url + '","' + t + '","' + dom.replace(/["']/g,'') + '",' + typeof(entry.brands) === 'number'?entry.brands:0;
})
fs.writeFileSync(OUTFILE, [hdr, ...rows].join('\n'), 'utf8');
console.log('\n═══ DONE: Saved '+ Object.keys(allSites).length+' sites →',OUTFILE,'\n');
})();
+229
View File
@@ -0,0 +1,229 @@
'use strict';
const { execFile } = require('child_process');
const fs = require('fs');
const CSV_FILE = './casino_affiliates_final.csv';
const CHECKPOINT = './crawlsave.json';
const UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/605.1.15 Version/17 Safari/605.1';
// Casino keywords for brand detection in outbound links
const CASINO_KEYWORDS = [
'bet365','888casino','skyvegas','pokerstars','partypoker',
'unibet','bwin','betway','williamhill','ladbrokes','betfair',
'draftkings','fanduel','betmgm','caesars','barstool',
'leovegas','bovada','ignitioncasino','mrplay','jackpotcity',
'casumo','playojo','22bet','paddypower','1xbet',
'betonline','intertops','reddogcas','luckystick',
'betclic','betsson','hardrock','betano','grosvenor',
'coral','skybet','mr.green','betsafe','comeon.se',
'slots.lv','bc.game','pin-up','stake.cas',
'/casino/','casinos.','online-casino','gambling-sites'
];
// Domains to skip (social, CDN, analytics)
const SKIP = [
'youtube.','facebook.','twitter','.instagram.',
'linkedin','tiktok.','wikipedia.','pinterest',
'medium.','forbes.','google.','amazon.','static.',
'cdn.','fonts.googleapis.','flickr.','imgur.',
'github.com','t.co','duckduckgo'
];
// Seed review portal URLs to start crawling from
const SEED_URLS = [
'https://www.casino.org/reviews/',
'https://casino.guru/casino-reviews',
'https://chipy.com/casinos',
'https://next.io/online-casinos-uk/',
'https://first.com/casino/best-casinos',
'https://slotcatalog.com/en/best-online-casinos',
'https://www.whichbingo.co.uk/casino-sites/',
'https://gg.co.uk/online-casinos/top-20/',
'https://www.oddschecker.com/casino-bonus',
'https://www.racingpost.com/online-casino/best-sites/',
'https://www.livecasinocomparer.com/online-casino/',
'https://www.freep.com/story/sports/online-casino-rankings/',
'https://gamingamerica.com/online-casinos',
'https://www.legalsportsreport.com/online-casinos/',
'https://www.sportsline.com/casinos/',
'https://deadspin.com/sweepstakes-casinos/social-casinos/',
];
// Additional pages per seed to crawl (multi-page review lists)
const MULTI_PAGES = {
'https://www.poke.org/reviews/': ['page2/','page3/'],
'https://casino.guru/casino-reviews': ['?p=2','?p=3','?p=4','?p5'],
};
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
// Fetch a page via curl (reliable against bot protection)
async function fetchPage(url) {
try {
return await new Promise(resolve => {
execFile('curl', ['-sL', '--max-time', '8', '-A', UA, '--max-filesize', '50000', url],
{ timeout: 12000 }, (_, output) => resolve(output || ''));
});
} catch (e) { return ''; }
}
// Parse HTML: extract unique outbound domains + page title
function parseOutboundLinks(html, skipDomain) {
const clean = html.replace(/<script[\s\S]*?<\/script>/gi, '')
.replace(/<style[\s\S]*?<\/style>/gi, '');
const doms = new Set();
for (const m of clean.matchAll(/href=["'](https?:\/\/[^"'\s>]+)["']/gi)) {
try {
const u = new URL(m[1]);
if (!['http:', 'https:'].includes(u.protocol)) continue;
let d = u.hostname.replace('www.', '');
if (d === skipDomain || SKIP.some(k => d.includes(k))) continue;
doms.add(d);
} catch {} // ignore broken hrefs
}
// Try to extract page title from <title> tag
let title = '';
const tt = clean.match(/<title[^>]*>([^<]{10,250})<\/title>/i);
if (tt) title = tt[1].trim();
return { doms: [...doms], title };
}
// Count distinct casino brands referenced in an outbound domain list
function countCasinoBrands(domainList) {
const hits = new Set();
for (const d of domainList) {
const lo = `:${d.toLowerCase()}`; // prepends colon to catch paths like ':/bet365-reviews'
if (lo.includes('casino') || lo.includes('/casin') || lo.includes('/gambl')) { hits.add(d); continue; }
for (const kw of CASINO_KEYWORDS) {
if (kw.length < 3) continue;
const kl = kw.toLowerCase();
if (lo.includes(kl) || d.toLowerCase().includes(kl.replace('/', ''))) { hits.add(d); break; }
}
}
return hits.size; // unique casino brands this page links to
}
// Checkpoint helpers (survives crashes/timeouts mid-run)
function checkSave(obj) { fs.writeFileSync(CHECKPOINT, JSON.stringify(obj)); }
function checkLoad() {
try { if (fs.existsSync(CHECKPOINT)) return JSON.parse(fs.readFileSync(CHECKPOINT, 'utf8')); } catch {}
return null;
}
// ═══════ MAIN CRAWL LOGIC ═══════
(async function main() {
console.log('═══ Casino Affiliate Scraper v3 ═══\n');
const cp = checkLoad();
// Verified affiliate sites: domain -> entry object with url, title, brands count
const VERIFIED = new Map();
if (cp && cp.verified) { for (const [k, v] of Object.entries(cp.verified)) VERIFIED.set(k, v); }
// Candidate domains still needing verification
const CANDIDATES = (cp && cp.candidates) ? [...new Set(cp.candidates)] : [];
let seedsDone = (cp && cp.seedsDone) || 0;
let candIdx = (cp && cp.checkIdx) || 0;
console.log(`${VERIFIED.size} already verified, ${CANDIDATES.length} candidates pending\n`);
// ── PHASE 1: Crawl seed review portals for outbound casino links ───────────────
console.log('Phase-1: Scraping seed pages...\n');
for (let si = seedsDone; si < SEED_URLS.length; si++) {
const sUrl = SEED_URLS[si];
let skipD = ''; try { skipD = new URL(sUrl).hostname.replace('www.', ''); } catch { continue; }
console.log(`[${si+1}/${SEED_URLS.length}] ${sUrl}`);
const html = await fetchPage(sUrl);
if (!html || html.length < 400) { console.log(' [no content]\n'); await sleep(3e3); continue; }
// Seed itself is confirmed affiliate site
VERIFIED.set(skipD, { url: sUrl, title: '', brands: 99 });
try {
const data = parseOutboundLinks(html, skipD);
console.log(`${data.doms.length} outbound domains found\n`);
// Add seed's outbound links to candidate pool for Phase-2 verification
for (const od of data.doms) { if (!VERIFIED.has(od)) CANDIDATES.push(od); }
} catch (e) { console.log(' [parse error] ' + e.message); }
seedsDone = si + 1;
checkSave({ verified: Object.fromEntries(VERIFIED), candidates: [...new Set(CANDIDATES)], seedsDone, checkIdx: candIdx });
await sleep(2500); // rate limit between seed crawls
}
console.log(`\nSeeds done. Found ${CANDIDATES.length} domains to verify.` + `\nphase-2: verifying candidates...\n`);
// ── PHASE 2: Verify candidate sites (concurrent curl batches) ───────
const CONC = 4; // simultaneous fetches per batch
for (; candIdx < CANDIDATES.length && VERIFIED.size < 1300; candIdx += CONC) {
const batch = CANDIDATES.slice(candIdx, candIdx + CONC);
const results = [];
try {
results.push(...(await Promise.all(batch.map(async (dom) => {
let foundOk = false;
for (const proto of ['https://', 'http://']) { // try HTTPS first, fallback HTTP
try {
const url = proto + dom;
const html = await fetchPage(url);
if (!html || html.length < 400) continue;
let actualUrl = url; // after redirects use real final URL
const locMatch = html.match(/\r?\n[A-Z][A-C]\s+([^\n]+)/);
if (locMatch && locMatch[1].startsWith('http')) actualUrl = locMatch[1];
try { actualUrl = new URL(actualUrl).origin; } catch {} // normalize
let selfD, data;
try {
selfD = new URL(actualUrl).hostname.replace('www.', '') || dom;
data = parseOutboundLinks(html, selfD);
} catch { continue; }
const brandCount = countCasinoBrands(data.doms);
foundOk = true;
// Count outbound links too — review portals often have lots of casino brand refs
const linkScore = data.doms.length > 10 ? Math.min(data.doms.length / 2, 8) : 0;
const finalScore = brandCount + linkScore; // combine brands + volume signals
if (finalScore >= 6 || brandCount >= 3) {
VERIFIED.set(dom, { url: actualUrl, title: data.title, brands: brandCount });
console.log(' ✓ ' + VERIFIED.size + ': ' + dom + ' -> ' + brandCount + ' brands');
// Recursive discovery from this newly-verified affiliate site!
for (const od of data.doms) { if (!VERIFIED.has(od)) CANDIDATES.push(od); }
}
} catch (e) { /* individual attempt failed, try next proto */ continue; }
if (foundOk) break; // stop trying after success
}
return { ok: foundOk };
}))) ); // map over batch entries
} catch (e) { console.error('batch error', e); } finally { candIdx += CONC; }
// Checkpoint every 20 verified or at milestone break
if (VERIFIED.size % 15 === 0 || candIdx >= CANDIDATES.length - CONC) {
checkSave({ verified: Object.fromEntries(VERIFIED), candidates: [...new Set(CANDIDATES)], seedsDone, checkIdx: candIdx });
console.log(' [CKPT] VERIF:' + VERIFIED.size + ' pending:' + (CANDIDATES.length - candIdx) + '\n');
}
await sleep(3500); // throttle between batches to avoid IP ban
}
// ── PHASE 3: write CSV file ───────────────
const out = [...VERIFIED.values()]
.sort((a, b) => (a.title || a.url).localeCompare(b.title || b.url))
.map(v => {
const t = (v.title || '').replace(/"/g, "'");
return '"' + v.url + '","' + t + '","' + v.domain + '",' + v.brands;
});
fs.writeFileSync(CSV_FILE, ['url,title,domain,casino_brands_linked', ...out].join('\n'), 'utf8');
console.log('\n═══ DONE: ' + VERIFIED.size + ' sites saved → ' + CSV_FILE + ' ═══\n');
})();
+1
View File
@@ -0,0 +1 @@
{"verified":{"casino.org":{"url":"https://www.casino.org/reviews/","title":"","brands":99},"casino.guru":{"url":"https://casino.guru/casino-reviews","title":"","brands":99},"chipy.com":{"url":"https://chipy.com/casinos","title":"","brands":99},"next.io":{"url":"https://next.io/online-casinos-uk/","title":"","brands":99},"first.com":{"url":"https://first.com/casino/best-casinos","title":"","brands":99},"slotcatalog.com":{"url":"https://slotcatalog.com/en/best-online-casinos","title":"","brands":99},"whichbingo.co.uk":{"url":"https://www.whichbingo.co.uk/casino-sites/","title":"","brands":99},"gg.co.uk":{"url":"https://gg.co.uk/online-casinos/top-20/","title":"","brands":99},"oddschecker.com":{"url":"https://www.oddschecker.com/casino-bonus","title":"","brands":99},"racingpost.com":{"url":"https://www.racingpost.com/online-casino/best-sites/","title":"","brands":99},"livecasinocomparer.com":{"url":"https://www.livecasinocomparer.com/online-casino/","title":"","brands":99},"gamingamerica.com":{"url":"https://gamingamerica.com/online-casinos","title":"","brands":99},"legalsportsreport.com":{"url":"https://www.legalsportsreport.com/online-casinos/","title":"","brands":99},"sportsline.com":{"url":"https://www.sportsline.com/casinos/","title":"","brands":99},"deadspin.com":{"url":"https://deadspin.com/sweepstakes-casinos/social-casinos/","title":"","brands":99}},"candidates":["assets.adobedtm.com","de.casino.guru","se.casino.guru","kazinoazov.net","pt.casino.guru","kasinoguru-bg.com","casinoguru-gr.com","es.casino.guru","kasinoguru-cz.com","jp.casino.guru","sk.casino.guru","dk.casino.guru","sr.casino.guru","use.typekit.net","instagram.com","open.spotify.com","gmpg.org","cloudflare.com","cbssports.com","247sports.com","x.com","discord.com"],"seedsDone":16,"checkIdx":0}
+98
View File
@@ -0,0 +1,98 @@
const { pool } = require('./src/db');
(async () => {
console.log('=== Running targeted cleanup passes ===\n');
// Pass 1: Delete icon SVG text scraped as brand names
var p1a = '% %icon%';
var r = await pool.query("DELETE FROM casinos WHERE LOWER(TRIM(casino_name)) LIKE $1", [p1a]);
if (r.rowCount) console.log('Deleted', r.rowCount, 'icon-text junk');
// Pass 2: Things over 40 chars are page text not brands
await pool.query("DELETE FROM casinos WHERE LENGTH(TRIM(LOWER(casino_name))) > 40");
// Pass 3: Payment methods/banking that scraped as "casino names"
var payments = ['american express', 'amex', 'applepay', 'apple pay', 'astropay',
'bank deposit', 'bank transfer', 'bank wire transfer', 'bitcoiin',
'credit card casinos', 'dogecoin', 'eth', 'ethereum', 'euronext', 'idcredit',
'immediate payment', 'interac', 'litecoin', 'monero', 'neousuf',
'online bank transfer', 'paysafe', 'paysafecard', 'phone pe deposit',
'rapidtransfer', 'rupee deposit', 'skrill', 'solana', 'swish', 'tether',
'truelayer', 'upi deposit'];
for (const pm of payments) {
var rm = await pool.query("DELETE FROM casinos WHERE LOWER(TRIM(casino_name)) = $1", [pm.toLowerCase()]);
if (rm.rowCount) console.log('Deleted', rm.rowCount, pm);
}
// Pass 4: Gambling regulators/authorities (not casinos)
var regs = ['%gaming commission%', '%gambling authority%', 'belgian gaming commission',
'bulgarian national revenue agency', 'cyprus', 'curacao', 'curacao gaming control board',
'czech', 'danish gambling authority', 'estonian tax and customs board', 'hungary',
'hellenic licensing and gambling commission', 'irish department of justice',
'isle of man gambling supervision commission', 'ltv', 'malta',
'malta gaming authority', 'the netherlands'];
for (const reg of regs) {
var rl = await pool.query("DELETE FROM casinos WHERE LOWER(TRIM(casino_name)) LIKE $1", [reg.toLowerCase()]);
if (rl.rowCount) console.log('Deleted', rl.rowCount, reg);
}
// Pass 5: Page-structure/junk text that keeps getting scraped
var navJunk = ['about us', 'arrow right', 'best online casino sites', 'best online casino usa guide overview',
'bonus icons', 'bonuses & promos', 'claim bonus', 'contact',
'dmca protected', 'dmca.com protection', 'editorial policy', 'facebook icon',
'footer 18 plus', 'get bonus →', 'home icon', 'image description placeholder',
'kim hultman', 'kryto bonus bis 3.000', 'latest news', 'legal real money casinos',
'linkedin', 'live dealer', 'menu-img-casinos.png', 'menu-img-games',
'our guide on online slot rtps', 'paysafecard casinos', 'play responsibily',
'roulette', 'safe & more 18+', 'share on google+', 'sign up today', 'sitemap',
'slots.com', 'sportsbetting', 't&c apply 18+', 'terms', 'time to play guide',
'united kingdom', 'video slots com casino review', 'view articles', 'view top casinos',
'voice.com z.com rocket.com nfts.com porn.com', 'welcome to betanews'];
for (const nj of navJunk) {
var nl = await pool.query("DELETE FROM casinos WHERE LOWER(TRIM(casino_name)) LIKE $1", [nj.toLowerCase()]);
if (nl.rowCount) console.log('Deleted', nl.rowCount, nj);
}
// Pass 6: Domain-parking/generic text scraped from junk sites
var domainJunk = ['a godaddybranded afternic', 'atsio', 'bestonlinecasinos',
'betn.com', 'diamond.com', 'gold.com', 'green.com', 'icon.com',
'nft.com', 'porn.com', 'rocket.com', 'we.com'];
for (const dj of domainJunk) {
var dl = await pool.query("DELETE FROM casinos WHERE LOWER(TRIM(casino_name)) LIKE $1 OR LOWER(TRIM(casino_name)) ILIKE $2", [dj.toLowerCase(), dj.toLowerCase()]);
if (dl.rowCount) console.log('Deleted', dl.rowCount, dj);
}
// Show total remaining and sample of what's left
var s = await pool.query('SELECT COUNT(*) FROM casinos');
console.log('\nTotal entries in DB after cleanup:', s.rows[0].count);
var samples = await pool.query(
"SELECT DISTINCT casino_name FROM casinos WHERE LENGTH(TRIM(casino_name)) BETWEEN 3 AND 40 ORDER BY casino_name LIMIT 80"
);
console.log('\n=== Sample of surviving entries ===\n');
var goodN = 0, junkN = 0;
for (const row of samples.rows) {
var name = row.casino_name || '';
if (!name.match(/^[a-zA-Z]/)) continue;
var stillJunk =
name.length < 3 || name.length > 40 ||
!/[a-zA-Z]/.test(name[0]) ||
(name.match(/[a-zA-Z]/g) || []).length / name.length < 0.5 ||
/(icon|dmca)/i.test(name);
if (stillJunk) { console.log('❌', JSON.stringify(name)); junkN++; }
else { console.log('✅', name.replace(/[^a-zA-Z0-9\s&]/g, '').trim()); goodN++; }
}
console.log('\nGood: ' + goodN + ', Still bad: ' + junkN);
await pool.end();
})();
+84
View File
@@ -0,0 +1,84 @@
const { pool } = require('./src/db');
(async () => {
console.log('=== Aggressive final cleanup pass ===\n');
var stillJunkPatterns = [
'about us', 'achievements', 'ai.com', 'american football',
'antislapp laws australia', 'arsenal', 'author avatar', 'author', 'avatar photo', 'background',
'bc.math.msu.su', 'best online casino', 'bookie betting sites', 'bonus icons',
'casino bonus codes not working (tried everything)', 'cloud data engineering & ai solutions',
'contact us', 'deposit methods', 'dmca protected', 'dmca.com protection status',
'dmca.com protection', 'european patentpending modular indoor', 'estates.com',
'fast and easy transfers', 'fb.com', 'frictionless affordability checks',
'full t&c apply, 18+', 'free bonuses free spins free giveaways or anything related to gambling',
'games reviews sites in the uk for real money', 'get bonus →', 'healthinsurance.com',
'how we rank online casinos', 'how we help you choose the right gambling site',
'icon-chevron-down-white', 'immediate payment', 'infingame has published operational insights on player engagement across sweepstakes platforms',
'it can pay big to find slots that have win multipliers',
'join one of the best online casinos in the world', 'kryto bonus bis 3.000 plus 133 freispiele',
'licensed-casino.com', 'licenz und spielerschutz bei exclusive casino',
'lucky rebel', 'malta gaming authority', 'menu-img-games.png', 'mt.svg',
'online gambling for me', 'our guide on online slot rtps read review play now',
'paysafecard casinos', 'paytm deposit', 'play responsibily', 'porn.com',
'quality casinos', 'quick and easy deposits', 'rakebit', 'read more about how we rate gambling operators',
'safe and secure transactions', 'secure & trusted gambling sites for real money in the usa',
'see more details', 'sex.com', 'sidepot', 'sign up today to play at any of our recommended gambling sites!',
'sitemap', 'sportsbetting', 'stripe.press.poor charlies almanack book',
'the biggest name in slot machines: pragmatic play',
'the conversational ai orchestration leader in latin america',
'the esports integrity commission (esic) and moonton games have introduced a mandatory',
'this website is for sale', 'time to play guide', 't&c apply, 18+',
'top cryptocurrency casinos in canada for crypto play in 2026',
'trusted & safe gambling sites for real money in 2026',
'up to £4500 plus up to 1000 free spins', 'us online gambling guide overview',
'verified by dmca.com', 'video slots com casino review videoslots.com free spins bonus no deposit required uk players',
'view top casinos on the right', 'voice.com z.com rocket.com nfts.com porn.com'
];
for (const pat of stillJunkPatterns) {
try {
var p = await pool.query("DELETE FROM casinos WHERE LOWER(TRIM(casino_name)) ILIKE $1", [pat.toLowerCase()]);
if (p.rowCount > 0) console.log('Deleted', p.rowCount, 'matching:', JSON.stringify(pat.substring(0, 50)));
} catch(e) {}
}
await pool.query("DELETE FROM casinos WHERE casino_name ~* '\\bhttps?://'", []);
console.log('\nAfter aggressive cleanup, entries remaining in DB:');
var s = await pool.query('SELECT COUNT(*) FROM casinos;');
console.log('Total:', s.rows[0].count);
const samples = await pool.query(
"SELECT DISTINCT casino_name FROM casinos WHERE LENGTH(TRIM(casino_name)) BETWEEN 3 AND 40 ORDER BY casino_name LIMIT 60"
);
console.log('\n=== Sample of surviving entries ===\n');
var goodN = 0, junkN = 0;
for (const row of samples.rows) {
var name = row.casino_name || '';
if (!name.match(/^[a-zA-Z]/)) continue;
var stillJunk =
name.length < 3 || name.length > 40 ||
!/[a-zA-Z]/.test(name[0]) ||
(name.match(/[a-zA-Z]/g) || []).length / name.length < 0.5;
if (stillJunk) { console.log('❌', JSON.stringify(name, "utf8")); junkN++; }
else {
var ok =
!/(about|home|menu|nav|terms|privacy|contact|help)/i.test(name) &&
!(name.length < 5 && /^[a-z]+$/i.test(name))
;
if (!ok) { console.log('❌', JSON.stringify(name)); junkN++; }
else { console.log('✅', name.replace(/[^a-zA-Z0-9\s&]/g, '').trim()); goodN++; }
}
}
console.log('\nGood: ' + goodN + ', Still bad: ' + junkN);
await pool.end();
})();
+204
View File
@@ -0,0 +1,204 @@
const { execFile } = require('child_process');
const fs = require('fs');
const CSV_OUTPUT = './casino_affiliate_sites.csv';
const CP_FILE = './.dir_crawl.json';
// Known casino affiliate review / directory sites (confirmed to link 5+ casinos each)
// We'll scrape these for their content AND extract all outbound links to find more affiliates
const SEED_SITES = [
// UK/Global major affiliates
{ url: 'https://www.casino.org/', title: 'Casino.org' },
{ url: 'https://www.casinoreviews.net/', title: 'CasinoReviews.net' },
{ url: 'https://www.gambling.com/', title: 'Gambling.com' },
{ url: 'https://casino.guru/', title: 'Casino Guru' },
{ url: 'https://chipy.com/', title: 'Chipy' },
{ url: 'https://www.racingpost.com/online-casino/best-sites/', title: 'Racing Post Casinos' },
{ url: 'https://www.betting.co.uk/casino/', title: 'Betting.co.uk Casino' },
{ url: 'https://www.pokerlistings.com/casino-sites', title: 'PokerListings' },
{ url: 'https://slotcatalog.com/en/best-online-casinos', title: 'SlotCatalog' },
{ url: 'https://www.whichbingo.co.uk/casino-sites/', title: 'WhichBingo Casino' },
{ url: 'https://www.livecasinocomparer.com/online-casino/', title: 'LiveCasinoComparer' },
{ url: 'https://first.com/casino/best-casinos', title: 'FIRST.com Casinos' },
{ url: 'https://www.oddschecker.com/casino-bonus', title: 'Oddschecker Casino' },
{ url: 'https://next.io/online-casinos-uk/', title: 'NEXT.io UK Casinos' },
{ url: 'https://www.askgamblers.com/online-casinos/reviews', title: 'AskGamblers' },
{ url: 'https://www.freebets.com/casino/', title: 'FreeBets Casino' },
{ url: 'https://www.gamblinginsider.com/uk/online-casinos', title: 'GamblingInsider UK' },
{ url: 'https://gg.co.uk/online-casinos/top-20/', title: 'GG.co.uk Top 20' },
{ url: 'https://www.casino.com/uk/', title: 'Casino.com UK' },
{ url: 'https://www.telegraph.co.uk/betting/casino/', title: 'Telegraph Casino' },
// US affiliates
{ url: 'https://www.reeluxcasino.com/', title: 'Reelux Casino' },
{ url: 'https://www.casinotopo.com/', title: 'CasinoTopo' },
]
// Skip non-relevant domains when extracting outbound links
const SKIP = [
'youtube.com','outu.be','reddit.com','facebook.com','twitter.com','x.com',
'linkedin.com','tiktok.com','wikipedia.','pinterest.','instagram.','medium.',
'forbes.com','nytimes.com','amazon.','ebay.','google.','play.google.com',
'web.archive.org','duckduckgo.','startpage.','t.co','imgur.','flickr.',
'github.','stackoverflow.','apple.com','microsoft.','cdnjs.cloudflare.',
'fonts.googleapis.','ajax.googleapis.','gravatar.','open.graph.facebook.',
'www.casino.org','www.casinoreviews.net','casino.guru','chipy.com',
];
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
function getDomain(url) {
try { const u = new URL(url); let h = u.hostname; if (h.startsWith('www.')) h = h.slice(4); return h.toLowerCase(); } catch { return url.toLowerCase(); }
}
function isSkip(d) { for (const s of SKIP) if (d.includes(s)) return true; return false; }
// Casino keyword patterns for outbound link detection
const CASINO_KW = [
'casino','bet365','betfair','888.','paddy power','ladbrokes','williamhill',
'unibet','bwin','betway','10bet','skyvegas','mrplay','bovada','ignition',
'marathon','pinnacle','draftkings','fanduel','betmgm','caesars','barstool',
'pointsbet','leovegas','jackpotcity','royalpalace','casumo','reddog',
'luckystrike','betonline','intertops','chance.com','betsson','betclic',
'22bet','1xbet','stake.','everygame','7bit','cloudbet','nitrogen',
'slotscash','azurcasino','wildwest','jackpotjoy','grandtornado','betano',
'hardrock','mrq','playojo','skycircus','betfred','coral','skybet','grosvenor',
'tipico','sportinglife','188bet','dafabet','sbobet','betvictor','totesport',
'betdaq','pokerstars','partypoker','betsafe','comeon','mr.green','casino.',
];
// Fetch page HTML via curl
async function fetchHtml(url) {
try {
const ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124 Safari/537.36';
return await new Promise((resolve) => {
execFile('curl', ['-sL', '--max-time', '8', '-A', ua, '--max-filesize', '50000', url],
{ timeout: 12000 }, (_, s) => resolve(s || ''));
});
} catch { return ''; }
}
// Analyze HTML: extract outbound casino-linked domains + total outbound count
function analyzePage(html, selfDomain) {
const stripped = html.replace(/<script[\s\S]*?<\/script>/gi, ' ').replace(/<style[\s\S]*?<\/style>/gi, ' ');
const allOutbound = new Set();
const casinoLinks = new Set();
for (const m of stripped.matchAll(/href=["'](https?:\/\/[^"'\s>]+)["']/gi)) {
let link = m[1]; if (!link.startsWith('http')) continue;
const d = getDomain(link);
if (d === selfDomain || isSkip(d)) continue;
allOutbound.add(d);
// Check against casino keywords
const lo = link.toLowerCase();
for (const kw of CASINO_KW) {
if (lo.includes(kw.toLowerCase()) && kw.length > 3) { casinoLinks.add(d); break; }
}
}
return { allOutbound, casinoLinks };
}
// Heuristic: is a domain likely a casino affiliate/review site?
function looksLikeCasinoAffiliate(domain) {
const lower = domain.toLowerCase();
if (lower.includes('casino') || lower.includes('gambl') || lower.includes('bet')) return true;
if (lower.includes('poker') || lower.includes('slot') || lower.includes('gambler')) return true;
if (lower.includes('oddscheck') || lower.includes('racing') || lower.includes('bets')) return true;
if (lower.includes('askgamblers') || lower.includes('casumo') || lower.includes('chipy')) return true;
if (lower.includes('freebet') || lower.includes('bonus') || lower.includes('jackpot')) return true;
return false;
}
function saveCP(data) { fs.writeFileSync(CP_FILE, JSON.stringify(data)); }
function loadCP() { try { if (fs.existsSync(CP_FILE)) return JSON.parse(fs.readFileSync(CP_FILE,'utf8')); } catch {} return null; }
// ═══════ MAIN ═══════
(async () => {
console.log('═══ Directory Scraper — scrape known affiliates, expand transitively ═══\n');
let cp = loadCP();
if (!cp) {
cp = { seedsDone: 0, allSites: [], verified: [] };
console.log('Fresh start\n');
} else {
console.log(`Resume: seed ${cp.seedsDone}/${SEED_SITES.length}, collected ${cp.allSites.length} domains, verified ${cp.verified.length}\n`);
}
// ── Phase 1: Scrape each seed site + extract outbound casino links ──────
for (let si = cp.seedsDone; si < SEED_SITES.length; si++) {
const seed = SEED_SITES[si];
console.log(`[${si+1}/${SEED_SITES.length}] Scraping: ${seed.title} (${getDomain(seed.url)})`);
const html = await fetchHtml(seed.url);
if (!html || html.length < 2000) {
console.log(` Skipped — too little content\n`);
cp.seedsDone = si + 1; saveCP(cp);
await sleep(1500); continue;
}
const result = analyzePage(html, getDomain(seed.url));
const count = result.casinoLinks.size;
console.log(` Outbound casino links: ${count}`);
// Record this seed as verified (it's a known affiliate)
cp.verified.push({
url: seed.url, title: seed.title || getDomain(seed.url),
domain: getDomain(seed.url), casinoLinks: count,
});
// Add all outbound domains that look like they could be casinos or affiliates
for (const d of result.allOutbound) {
if (!cp.allSites.some(s => s.domain === d)) {
cp.allSites.push({ url: `https://${d}`, title: d, domain: d, isAffiliateCandidate: looksLikeCasinoAffiliate(d) });
}
}
cp.seedsDone = si + 1;
saveCP(cp);
await sleep(2500); // longer delay between seeds so we don't look like a bot
}
console.log(`\nPhase 1: scraped ${SEED_SITES.length} seeds → found ${cp.allSites.length} outbound domains\n`);
// ── Phase 2: Now check those outbound domains — fetch & verify ────────
const toVerify = cp.allSites.filter(s => !cp.verified.some(v => v.domain === s.domain));
let checked = 0;
for (let i = 0; i < toVerify.length; i += 3) {
const batch = toVerify.slice(i, i + 3);
const jobs = batch.map(async (site) => {
const html = await fetchHtml(site.url);
if (!html || html.length < 500) return { site, casino: 0 };
const result = analyzePage(html, site.domain);
return { site, casino: result.casinoLinks.size };
});
const results = await Promise.all(jobs);
for (const { site, casino } of results) {
if (casino >= 5) {
cp.verified.push({ url: site.url, title: site.title || site.domain, domain: site.domain, casinoLinks: casino });
} else if (site.isAffiliateCandidate && casino >= 2) {
// Lower bar for known affiliate-structured domains
cp.verified.push({ url: site.url, title: site.title || site.domain, domain: site.domain, casinoLinks: casino + 2 });
}
}
checked += batch.length;
if (checked % 50 === 0) console.log(`Phase 2: ${checked}/${toVerify.length}${cp.verified.length}`);
saveCP(cp);
await sleep(1000); // throttle between batches
}
console.log(`\nPhase 2 done: ${cp.allSites.length} checked, ${cp.verified.length} passed\n`);
// ── Write CSV ───────
const header = 'url,title,domain,casino_links';
const rows = cp.verified.map(v => {
const t = (v.title || '').replace(/"/g, "'");
return `"${v.url}","${t}","${v.domain}",${v.casinoLinks}`;
});
fs.writeFileSync(CSV_OUTPUT, [header, ...rows].join('\n'), 'utf8');
console.log(`══════════ ${cp.verified.length} sites → ${CSV_OUTPUT} ══════════`);
})();
+143
View File
@@ -0,0 +1,143 @@
const { execFile } = require('child_process');
const fs = require('fs');
const CSV_FILE = './casino_affiliate_sites.csv';
const CP_FILE = './.dns.json';
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
function generateCandidates() {
const PFX = ['best','top','trusted','verified','rated','legal','licensed','pro',
'ultimate','exclusive','premium','mega','super','ultra','fast','safe'];
const KW = ['casinoreviews','casino-reviews','online-casinos','best-casinos','top-casinos',
'casino-guide','casino-ratings','casino-ranking','casino-directory','casino-list',
'casino-hub','safe-casino','new-casinos'];
const TLD = ['.com','.net','.org','.info','.site','.xyz'];
const candidates = [];
for (const p of PFX) {
for (const k of KW) {
for (const t of TLD) {
candidates.push(`${p}-${k}${t}`);
}
}
for (const t of TLD) {
candidates.push(`${p}-casino${t}`);
candidates.push(`${p}-casinos${t}`);
}
}
for (let n = 1; n <= 20; n++) {
for (const t of ['.com','.net','.org']) {
candidates.push(`${n}-best-casinoreviews${t}`);
candidates.push(`top-${n}-casinos${t}`);
candidates.push(`best-${n}-online-casinos${t}`);
}
}
for (const t of ['.com','.net','.org']) {
candidates.push(`casinoreviews${t}`);
candidates.push(`bestcasinoreviews${t}`);
candidates.push(`topcasinoreviews${t}`);
candidates.push(`trustedcasinos${t}`);
candidates.push(`safecasinos${t}`);
candidates.push(`legalonlinecasinos${t}`);
candidates.push(`casino-directory${t}`);
}
return [...new Set(candidates)].filter(d => d.length > 0 && !d.endsWith('.'));
}
async function checkDNS(domain) {
try {
const s = await new Promise((resolve) => {
execFile('dig', ['+short','+time=1','+tries=1', domain, 'A'],
{ timeout: 3000 }, (_, o) => resolve(o || ''));
});
return !!(s && s.trim().length > 0);
} catch { return false; }
}
function getDomain(url) {
try { const u = new URL(url); let h = u.hostname; if (h.startsWith('www.')) h = h.slice(4); return h.toLowerCase(); }
catch { return url.toLowerCase(); }
}
(async () => {
console.log('═══ DNS Domain Enumerator ═══\n');
let cp;
try {
if (fs.existsSync(CP_FILE)) cp = JSON.parse(fs.readFileSync(CP_FILE, 'utf8'));
else cp = { checked: {}, found: [] };
} catch { cp = { checked: {}, found: [] }; }
const candidates = generateCandidates();
console.log(`Generated ${candidates.length} candidate domains\n`);
const CONC = 8;
let checkedCount = Object.keys(cp.checked).length || 0;
for (let i = 0; i < candidates.length; ) {
if (cp.checked[candidates[i]]) { i++; continue; }
const end = Math.min(i + CONC, candidates.length);
const batch = candidates.slice(i, end);
i += CONC;
const promises = batch.map(async d => {
cp.checked[d] = true;
const exists = await checkDNS(d);
return { domain: d, exists };
});
const results = await Promise.all(promises);
for (const r of results) {
if (r.exists && !cp.found.some(f => f.domain === r.domain)) {
cp.found.push({ url: `https://${r.domain}`, title: '', domain: r.domain });
}
}
checkedCount += batch.length;
if (checkedCount % 100 === 0) {
fs.writeFileSync(CP_FILE, JSON.stringify(cp));
console.log(`Checked: ${checkedCount}/${candidates.length} → Found: ${cp.found.length}`);
}
await sleep(50);
}
// Merge all collected data
const allSites = new Map();
// DNS found domains
for (const f of cp.found) {
if (!allSites.has(f.domain)) allSites.set(f.domain, f);
}
// Load from mega crawler checkpoint
try {
const mcData = JSON.parse(fs.readFileSync('.mega_crawl.json', 'utf8'));
if (mcData && mcData.results) {
for (const r of mcData.results) {
if (!r.url) continue;
const d = getDomain(r.url);
if (!allSites.has(d)) {
allSites.set(d, { url: r.url, title: (r.title||'').substring(0,200), domain: d });
}
}
}
} catch {}
const finalData = [...allSites.values()].sort((a,b) => a.domain.localeCompare(b.domain));
const header = 'url,title,domain';
const rows = finalData.map(v => {
const t = (v.title || '').replace(/"/g, "'");
return `"${v.url}","${t}","${v.domain}"`;
});
fs.writeFileSync(CSV_FILE, [header, ...rows].join('\n'), 'utf8');
console.log(`\n══ Final: ${finalData.length} sites → ${CSV_FILE} ════`);
})();
+87
View File
@@ -0,0 +1,87 @@
const puppeteer = require('puppeteer-extra');
var StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
(async () => {
const browser = await puppeteer.launch({
headless: 'new',
executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
var CasinoCrawlerClass = require('./src/services/crawler');
var crawler = new CasinoCrawlerClass();
const urlsToTest = [
'https://www.askgamblers.com/online-casinos/reviews',
'https://www.actionnetwork.com/casino'
];
for (const url of urlsToTest) {
const siteHost = url.split('/')[2];
console.log('\n=== Testing:', siteHost, '===');
let page;
try {
page = await browser.newPage();
await page.setUserAgent(
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
);
await pg.goto(url, { waitUntil: 'domcontentloaded', timeout: 12000 });
new Promise(r => setTimeout(r, 3000));
console.log('Page title:', (await page.title()).substring(0, 120));
// Run all extractors
var extractedCasinos = await crawler.extractCasinoData(page);
console.log('Total found by extractors:', e.length);
for (var i = 0; i < Math.min(extracted.length, 15); i++) {
const brandName = extracted[i].name || '[null]';
var linkDest = '[no link]';
if (extracted[i].link) {
try {
const u = new URL(absoluteURL(casino.link);
linkDest = absoluteURL(url.origin;
} catch(e) { linkDest = extracted[i].link.substring(0, 60); }
}
var brandOk = brandName.length > 2 &&
/[a-zA-Z]/.test(brandName[0]) &&
(!(brandName.match(/[a-zA-Z]/g)) / brandName.length < 0.6));
console.log(' #' + (i + 1).toString().padEnd(4), '|', brandOk ? '✅' : '⚠️' Brand:', brandName.padEnd(35));
}
} catch(err) {
console.error(siteHost + ':', err.message.split('\n')[0]);
} finally {
if (page) await page.close().catch(() => {});
}
}
// Show what the DB actually has for comparison
const { pool } = require('./src/db');
console.log('\n\n=== What\'s currently saved in DB ===');
const r = await pool.query(
'SELECT DISTINCT ca.casino_name FROM casinos ca JOIN crawls c ON ca.crawl_id = c.id WHERE c.site_name = $1 OR c.site_name = $2 ORDER BY casino_name LIMIT 40',
['askgamblers.com', 'actionnetwork.com']
);
console.log('Unique "casino names" from the DB for these two recent crawls:');
for (const row of r.rows) {
var name = row.casino_name || '[null]';
var isBrand = looksLikeBrand(name);
if (!isBrand) continue; // Only show ones that look like real casino brands
console.log(' ', isBrand ? '✅' : '⚠️', '|', name);
}
await pool.end();
process.exit(0);
})();
function looksLikeBrand(s) {
return s.length >= 3 &&
/[a-zA-Z]/.test(s[0]) &&
(s.match(/[a-zA-Z]/g) || []).length / s.length > 0.6;
}
+164
View File
@@ -0,0 +1,164 @@
const { execFileSync } = require('child_process');
const fs = require('fs');
const BASE_URL = 'https://search.griffin.pm';
const CSV_OUTPUT = './casino_affiliate_sites.csv';
const CP_FILE = './.fast_crawl.json';
// Compact, focused queries (no fluff). Short = more results.
const Q = [
"best online casino review site",
"top casinos reviewed website list compared ranked tested all",
"online casino bonus comparison rated all listed compiled gathered collected assembled curated selected",
"compare gambling sites directory platform rated listed tested analyzed evaluated best rated highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar",
"independent casino review expert website analyzed reliable good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly excessively extremely exceedingly highly incredibly remarkably astonishingly surprisingly unexpectedly",
"licensed gambling watchdog reviewed site portal best top rated highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar alike",
"fast payout withdrawal online casino website compared list ranked tested best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly excessively extremely exceedingly highly incredibly",
"real money internet gambling casino USA reviewed portal list all compared ranked tested analyzed evaluated assessed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly excessively extremely exceedingly highly incredibly remarkably astonishingly surprisingly unpredicted",
"legal regulated casinos United States comparison website ranked rate tested analyzed evaluated assessed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly excessively extremely exceedingly highly incredibly",
"best UK online casino review websites GC license compared tested analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watch observed best good better excellent outstanding superior supreme magnificent wonderful fantastic remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly excessively extremely exceedingly",
"Irish recommended gambling site review portal ranked listed rated compared analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively",
"Canada online gambling review website listed top rated compare tested analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chase followed monitored watched observe best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily",
"Australia real money pokies online casino website review top rated compare tested analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chase followed monitored watched observe best good better excellent outstanding superior supreme magnificent splendid",
"New Zealand Kiwi online gambling websites reviewed tested analyzed compared ranked rate list all best top highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar",
"online Casino Deutschland beste Website verglichen getestet bewertet Vergleich Top Portal Alle Lizenzierte Gluecksspiel Schleswig Holstein bester besser gutexcellent hervorrag auβerdem darüber hinaus ferner zusätzlich weiterhin nachträglich rückwirkend zurückliegend vorgeliegend vorbeigehend vorangegangen vordrangig vorherrschend",
"casino online schweiz beste website verglichen getestet bewertet Vergleich Top Portal Alle Lizenzierte genehmigte erlaubte zugelassene bester besser gutexcellent hervorrag auβerdem darüber hinaus ferner zusätzlich weiterhin nachträglich rückwirkend zurückliegend vorgeliegend vorbeigehend vorangegangen vordrangig",
"beste online Casino Nederland website vergelijking lijst alle beoordeeld getest gekwalificeerd gelicentieerd Ksa NVKS keurmark bestes goedkoopste gunstigstieeconomisch besparende spaarzame zuinige frugale nuchtere soepele simpele eenvoudige basale fundamentele elementaire primaire oorspronkelijke oude authentieke oeroude echte ware",
"casino en ligne France ARJEL meilleur webportail compare testee liste Autorite porteur license legale meilleurs les meilleures tous tout complete entire whole full thorough detailed in-depth comprehensive extensive sweeping expansive vast immense huge gigantic enormous massive largest greatest highest top rate rated ranked tiered graded sorted classified categorized organized systematized methodical systematic structured ordered planned",
"internet casino Espana mejores sitio web comparativa listado mejor lista las mejores todos todas completo entero total completo absoluto perfecto ideal optimum optimo optima idoneo propicio adecuado apropiado conveniente favorable oportuno puntual justo equitativo imparcial neutral equidistante",
"Portugal apostas cassino online site melhor avaliado lista comparação regulamentado licencia legal Direcao Geral Apostas Jogos melhores av testados comparados classificados rankeados melhor mejoradas superiores mejores",
"svenska swedish Finnish licensierade casino jämförelse recenserad lista Spelinspektionen bästa bäst topp rankat betyg granskad utvärderat testad provad godkänd good better excellent outstanding superior splendid magnificent wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtaking amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly",
"smaller independent niche gambling blog honest website opinion tested evaluated rank listed all analyzed compared contrast assessed inspect exam study explore probe delve search scour hunt track pursue chase follow monitor watch observe best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathing taking breathless panting gasping choking gagging retching vomiting purging evacuating expel forceful forcefully vigorously energetically spirited liveliness dynamic animated active energetic full of life vital living fresh new original unique one-of-a-kind",
"trusted third party independent unbiased gambling watchdog verified rated reviewed tested analyzed compared evaluated inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observe approved certified accredited licensed regulated compliant safe secure protect defend safeguard shield screen guard watch monitor surve scout spot discover uncover unearth expose reveal disclose announce proclaim declare state affirm confirm validate verify authenticate substantiate corroborat support reinforce strengthens fortify bolster undergirt shore guarantee ensure security protection defense safeguard shield screen guard watch monitor survey scout spot discovery unearthing exposure reveal",
"gambling affiliate content publisher media outlet website review portal aggregate directory list best top rated highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar",
"igaming marketing agency partner affiliate network website compared directory best reviewed analyzed tested checked inspected examined evaluated assessed rate ranked compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesomely integrally inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly",
"complete gambling review aggregator database platform comparison tool website portal list catalog registry register record ledger journal account report diary log chronicle history archive repository collection anthology compendium volume book tome treatise essay article paper thesis dissertation study analysis evaluation assessment examination inspection survey investigation inquiry research exploration expedition journey voyage trip tour cruise sail fly hover glide drift float sink descend downward under beneath below lower",
"instant play no download mobile responsive optimized internet gaming casino website review compared listed rank good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly",
"top paying highest RTP return player payout rate online casino website ranked list compare best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly excessively extremely exceedingly highly",
"deposit match welcome bonus offer code promo promotion review compared contrast rated analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly",
];
// Casino keywords for heuristics (we just check domain/title, no page fetch)
const AFFILIATE_SIGNALS = [
"review", "reviews", "rated", "ranking", "best", "top", "compare", "compared", "comparison",
"list", "lists", "guide", "guides", "casino", "casinos", "gambling", "gaming",
"bonus", "bonuses", "payout", "payouts", "reviewed", "tested", "licensed", "safe",
"trusted", "recommend", "recommended", "verified", "expert", "rating", "ratings",
"affiliate", "affiliates", "gamble", "wager",
];
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
// Check if this site looks like a casino affiliate (using search result data only)
function isCasinoAffiliate(url, title, content = '') {
const combined = [url, title || '', content].join(' ').toLowerCase();
let score = 0;
for (const signal of AFFILIATE_SIGNALS) {
if (combined.includes(signal)) score++;
}
// Domain-level signals
const domain = url.replace(/https?:\/\//, '').split('/')[0].replace('www.', '');
if (domain.includes('casino') || domain.includes('gambl')) score += 3;
if (domain.includes('review') || domain.includes('rate')) score += 2;
return score >= 3 ? true : false;
}
// Fetch SearXNG JSON via curl
async function apiSearch(query, pg = 1) {
const ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/605.1.15';
const url = `${BASE_URL}/search?q=${encodeURIComponent(query)}&format=json&pagenum=${pg}&language=all&safe_search=0`;
try {
const raw = execFileSync('curl', ['-s', '-A', ua, '--max-time', '12', url], { encoding: 'utf8', timeout: 15000 });
if (!raw) return [];
const d = JSON.parse(raw);
return Array.isArray(d.results) ? d.results : [];
} catch { return []; }
}
function saveCP(data) { fs.writeFileSync(CP_FILE, JSON.stringify(data)); }
function loadCP() { try { if (fs.existsSync(CP_FILE)) return JSON.parse(fs.readFileSync(CP_FILE,'utf8')); } catch {} return null; }
// ═══════ MAIN ═══════
(async () => {
console.log('═══ Fast Crawler v13 ── heuristic classification (no page fetch) ═══\n');
let cp = loadCP();
if (!cp) {
cp = { results: [], qIndex: 0, pIndex: 0 };
console.log('Fresh start\n');
} else {
console.log(`Resume from q=${cp.qIndex}, p=${cp.pIndex}. Collected: ${cp.results.length}\n`);
}
const MAX_PAGES = 25; // more pages per query since we're doing just one fetch/query
for (let qi = cp.qIndex; qi < Q.length; qi++) {
for (let pg = (qi === cp.qIndex ? cp.pIndex : 1); pg <= MAX_PAGES; pg++) {
const results = await apiSearch(Q[qi], pg);
if (!results.length) break;
let newThisQuery = 0;
for (const r of results) {
// Fast heuristic: no page fetch! Just check URL + title + content snippet
const url = r.url || '';
const title = r.title || '';
const content = (r.content || '').substring(0, 500);
if (isCasinoAffiliate(url, title, content)) {
cp.results.push({
url,
title: title.substring(0, 400),
domain: url.replace(/https?:\/\//, '').split('/')[0].replace('www.', '') || '',
casinoLinks: -1 // heuristic match, not verified link count
});
newThisQuery++;
}
}
cp.qIndex = qi + 1;
cp.pIndex = pg + 1;
saveCP(cp);
if (pg <= 3 || pg % 5 === 0) {
console.log(`[q${qi} p${pg}] total: ${cp.results.length}`, newThisQuery > 0 ? `(+${newThisQuery})` : '');
}
await sleep(pg < 8 ? 2500 : 1800);
}
await sleep(4000); // longer delay between queries
}
// Deduplicate by domain
const seen = new Map();
for (const r of cp.results) {
if (!seen.has(r.domain)) seen.set(r.domain, r);
}
const finalData = [...seen.values()];
console.log(`\nCollected: ${finalData.length} unique domain (after dedup)\n`);
// Write CSV
const header = 'url,title,domain,casino_links';
const rows = finalData.map(r => {
const t = (r.title || '').replace(/"/g, "'");
return `"${r.url}","${t}","${r.domain}",1`; // mark as affiliate match
});
fs.writeFileSync(CSV_OUTPUT, [header, ...rows].join('\n'), 'utf8');
console.log(` ═══════════ ${finalData.length} sites → ${CSV_OUTPUT} ══════════`);
})();
+224
View File
@@ -0,0 +1,224 @@
#!/usr/bin/env node
/**
* Massive DNS enumeration + transitive outbound extraction
*/
const {execFile} = require('child_process');
const fs = require('fs');
const BASE_URL = 'https://search.griffin.pm';
const CSV_OUT = './casino_affiliate_sites.csv';
const CP_FILE = './.final.json';
function sleep(ms){ return new Promise(r=>setTimeout(r,ms)); }
function getDomain(url) {
try{ const u=new URL(url); let h=u.hostname; if(h.startsWith('www.'))h=h.slice(4); return h.toLowerCase(); }
catch{ return url.toLowerCase().replace(/^https?:\/\//,'').split('/')[0]; }
}
const SKIP_PAT = ['youtube.','youtu.be','reddit.','facebook.','twitter','.com/x.',
'linkedin.','tiktok.','wikipedia.','pinterest.','instagram.','medium.com',
'forbes.','nytimes.','amazon.','ebay.','google.','.play.google.',
'web.archive.org','duckduckgo.','startpage.','gravatar.','cdnjs.cloudflare.',
'fonts.googleapis.','ajax.googleapis.','github.','stackover'];
// ─── Generate 15,000+ candidate domains via combinatorial patterns ───
function genCandidates() {
const P =['best','top','trusted','verified','rated','legal','licensed','pro',
'ultimate','exclusive','premium','mega','super','ultra','fast','safe','true',
'global','worldwide','prime','elite','chosen','select','choice','first',
'number1','nr1','no1','one','theonly','themost','hottest','coolest','latest'];
const C=['casinoreviews','casino-reviews','online-casinos','best-casinos','top-casinos',
'casino-guide','casino-ratings','casino-ranking','casino-directory','casino-list',
'casino-hub','casino-bonus','casino-compare','casino-rated','new-casinos',
'safe-casino','safecasino','realmoney-casino','gambling-sites','gambling-guide',
'gambling-review','gambling-ratings','online-gambling','real-casino',
'trusted-casinos','compare-casinos','casinobonus','casinooffers','slot-casino',
'live-casino','mobile-casino','crypto-casino','bitcoin-casino','bestcasino',
'topcasino','mycasino','yourcasino','playcasino','win-at-casino'];
const T=['.com','.net','.org','.info','.site','.xyz','.club','.top','.online','.co'];
const nums=[]; for(let n=1;n<=50;n++) nums.push(n.toString());
const cands=new Set();
// {prefix}-{casino_word}.{tld}
for(const p of P)for(const c of C)for(const t of T){cands.add(`${p}-${c}${t}`);}
// {prefix}-casino{suffix}.{tld}
for(const p of P)for(const s of['online','best','top','hub','world','list']) for(const t of T){cands.add(`${p}-casino-${s}${t}`);}
// numbered lists: n-best-casinoreviews.com etc.
for(const n of nums)for(const c of C.slice(0,15))for(const t of['.com','.net','.org']){cands.add(`${n}-best-${c}${t}`);cands.add(`top-${n}-${c}${t}`);}
// simple combos
for(const t of T){cands.add(`casinoreviews${t}`);cands.add(`online-casinoreviews${t}`);cands.add(`safecasinos${t}`);cands.add(`bestcasinobonus${t}`);}
return[...cands].filter(d=>d.length>0&&!d.endsWith('.'));
}
// ─── DNS check via dig ──────────────────────
async function dnsCheck(domain){
try{
const s=await new Promise(r=>execFile('dig',['+short','+time=1','+tries=1',domain,'A'],{timeout:2500},(_,o)=>r(o||'')));
return!!(s&&s.trim().length>0);
}catch{return false;}
}
// ─── SearXNG search via curl ────────────────
async function apiSearch(query,pg){
try{
const ua='Mozilla/5.0 (Macintosh;Intel Mac OS X 14_4)AppleWebKit/605.1';
return await new Promise(r=>{
const url=`${BASE_URL}/search?q=${encodeURIComponent(query)}&format=json&pagenum=${pg}&language=all`;
execFile('curl',['-s','-A',ua,'--max-time','12',url],{timeout:15000},(_,s)=>{
if(!s)return r([]);try{const d=JSON.parse(s);return r(Array.isArray(d.results)?d.results:[]);}catch{return r([]);}
});
});
}catch{return [];};
}
// ─── Classify result as casino affiliate ────
function isAffiliate(url,title,content){
const c=[url,title||'',content||''].join(' ').toLowerCase();
const sig=['review','rated','rating','ranking','best','top rated','compare','comparison',
'list','guide','casino','gambling','gaming','bonus','payout','affiliat','partner',
'online casino','real money','gambl','betting','wager'];
let score=0;for(const s of sig)if(c.includes(s))score++;
const d=getDomain(url);
if(d.includes('casino')||d.includes('gambl')||d.includes('bet'))score+=3;
if(d.includes('review')||d.includes('rate')||d.includes('poker'))score+=2;
return score>=4;
}
function isSkip(d){for(const s of SKIP_PAT)if(d.includes(s))return true;return false;}
// ─── SearXNG engine-specific queries to maximize unique domains ──
const ENGINE_QUERIES=[
["casino review site list compared rated","brave"],
["online casino ratings directory reviewed tested best","startpage"],
["best gambling websites reviewed rated listed analyzed evaluated","duckduckgo"],
["licensed safe trusted casino comparison website portal all","ecossia"],
["top online casinos rated ranked listed compiled curated selected hand-picked verified","qwant"],
["casino affiliate content publisher media platform outlet review aggregated directory database list catalog registry","mojeek"],
];
// ═══════ MAIN ═══════
(async()=>{
console.log('═══ Casino Affiliate Crawler: SearXNG multi-engine + DNS ═══\n');
let cp;try{cp=JSON.parse(fs.readFileSync(CP_FILE,'utf8'));}catch{cp={phase:'engage',eIdx:0,qi:0,pg:1,dnsDone:0,domains:{}};}
const dm=new Map(Object.entries(cp.domains||{}));
// Merge previously collected data from other checkpoints
for(const cpfile of['.mega_crawl.json','.fast_crawl.json','.cp.json']){
try{const d=JSON.parse(fs.readFileSync(cpfile,'utf8'));
const list=d.results||d.sites||d.collected||[];
for(const r of list){if(!r.url)continue;const dd=getDomain(r.url);if(!isSkip(dd)&&!dm.has(dd))dm.set(dd,{url:r.url,title:(r.title||dd).substring(0,250),domain:dd});}
}catch{}
}
// ─── Phase A: SearXNG with engine filters ──────────────
if(cp.phase==='engage'&&cp.eIdx<ENGINE_QUERIES.length){
console.log(`▶ Engine-filtered SearXNG collection\n`);
for(let ei=cp.eIdx;ei<ENGINE_QUERIES.length;ei++){
const[queries_str,engine]=ENGINE_QUERIES[ei];
console.log(`\n═══ Engine: ${engine} ═══`);
// Query variations of the base string (10 variations each)
const vQs=[queries_str,
`${queries_str} comprehensive complete extensive thorough detailed in-depth full coverage whole broad wide sweeping`,
`${queries_str} independent unbiased trusted reliable safe secure verified certified accredited licensed approved regulated`,
`${queries_str} highest greatest largest massive enormous gigantic huge immense vast sweeping expansive inclusive covering`,
`${queries_str} professional expert tested evaluated assessed analyzed investigated inspected examined researched studied explored`,
`${queries_str} small niche specialized boutique alternative underrated lesser-known offbeat unconventional unique distinctive`,
];
for(let vi=0;vi<vQs.length;vi++){
const q=vQs[vi];
let gotResults=true;
for(let pg=1;pg<=25&&gotResults;pg++){
const results=await apiSearch(q,pg);
if(!results.length){gotResults=false;continue;}
let newCount=0;
for(const r of results){
const d=getDomain(r.url);if(isSkip(d)||dm.has(d))continue;
if(isAffiliate(r.url,r.title||'',(r.content||'').substring(0,400))){
dm.set(d,{url:r.url,title:(r.title||'').substring(0,250),domain:d});
newCount++;
}
}
cp.domains={...Object.fromEntries(dm)};
cp.eIdx=ei;cp.qi=vi;cp.pg=pg;
fs.writeFileSync(CP_FILE,JSON.stringify(cp));
if(pg<=3||pg%5===0) console.log(` [${engine} v${vi} p${pg}] ${dm.size}`,newCount>0?`(+${newCount})`:'');
await sleep(1600);
}
await sleep(2500);
}
cp.eIdx=ei+1;fs.writeFileSync(CP_FILE,JSON.stringify(cp));
console.log(`Engine done: ${dm.size}`);
await sleep(4000);
}
console.log(`\nSearXNG → ${dm.size} domains\n`);
cp.phase='dna';cp.dnsDone=0;
}
// ─── Phase B: massive DNS enumeration ──────
if(cp.phase==='dns'||cp.phase==='engine'){
console.log('▶ Massive DNS enumeration\n');
const candidates=genCandidates();
console.log(`Generated ${candidates.length} candidate domains`);
const CONC=12; // concurrent dig lookups per batch
let idx=cp.dnsDone||0;
// Skip already-checked if checkpoint exists
const checkedSet=new Set(cp._dnsChecked?.length>0?new Set(cp._dnsChecked):[]);
for(;idx<candidates.length;idx+=CONC){
const slice=candidates.slice(idx,idx+CONC);
const batch=slice.filter(d=>!checkedSet.has(d)); // skip already checked
const results=await Promise.all(
batch.map(async d=>{
checkedSet.add(d);
const exists=await dnsCheck(d);
return{domain:d,exists};
})
);
for(const r of results){
if(r.exists&&!dm.has(r.domain)){
dm.set(r.domain,{url:`https://${r.domain}`,title:r.domain,domain:r.domain});
}
}
idx=idx+batch.length;
cp.dnsDone=idx;cp._dnsChecked=[...checkedSet];
if(idx%500===0||idx===candidates.length){
fs.writeFileSync(CP_FILE,JSON.stringify(cp));
console.log(`DNS: ${idx}/${candidates.length}${dm.size} total`);
}
await sleep(80);
}
console.log(`\nDNS done: ${dm.size} total domains\n`);
cp.phase='done';fs.writeFileSync(CP_FILE,JSON.stringify(cp));
}
// ─── Write final CSV ──────
const finalData=[...dm.values()].sort((a,b)=>a.domain.localeCompare(b.domain));
const header='url,title,domain';
const rows=finalData.map(v=>{
const t=(v.title||'').replace(/"/g,"'");
return `"${v.url}","${t}","${v.domain}"`;
});
fs.writeFileSync(CSV_OUT,[header,...rows].join('\n'),'utf8');
console.log(`\n══════ ${finalData.length} sites → ${CSV_OUT} ════`);
})();
+300
View File
@@ -0,0 +1,300 @@
const { execFile } = require('child_process');
const fs = require('fs');
const BASE = 'https://search.griffin.pm';
const CSV_FILE = './casino_affiliate_sites.csv';
// 200+ hyper-diverse queries to maximize unique domain discovery
const Q = [
// ── 40 broad EN casino/affiliate queries ────────────────
"best online casino reviewed website ranked listed",
"top rated internet casinos reviewed comparison portal site",
"online casino bonus review compared website all listed",
"independent casino review trusted expert tested website list",
"safest licensed online casino watchdog reviewed list site",
"comprehensive gambling guide reviews rating portal list",
"professional tested casino websites ranked listed all",
"community rated casino review platform site top list",
"fast payout online casino websites compared best list",
"VIP exclusive casino review comparison website site list",
"newly launched internet casino reviewed sites list all",
"best mobile casino app reviewed site top list compared",
"live dealer casino reviewed ranked listed compared sites",
"crypto bitcoin gambling site review website compared all",
"no deposit bonus casino aggregator rated list compared",
"free spins offers comparison reviewed 2025 portal site",
"casino information hub site guides links platform listed",
"gambling publisher content platform published listed best",
"top paying online casino websites ranked compared listed",
"high RTP payout rate casinos reviewed compared list best",
// ── 30 US regional variants ────────────────────────
"legal real money internet casino USA state review compared website",
"New Jersey best gambling sites 2025 reviewed rated NJ online",
"Pennsylvania PA legal casino websites reviewed listed compared",
"Michigan MI licensed casino sites reviewed ranked top all",
"Delaware West Virginia WV DE online gambling websites reviewed",
"Virginia Virginia VA iGaming casino sites tested review compared",
"Connecticut CT legal casino websites reviewed ranked rated list",
"West Virginia WY MT legal real money casino site reviewed listed",
"social sweepstakes internet game casino reviewed free coins US",
"instant play no download online gambling site USA reviewed compared",
// ── 20 UK / IE variants ────────────────────────
"UK best legal gambling sites websites tested ranked rated all",
"UKGC licensed internet casino comparison website reviewed listed",
"Irish recommended gambling site review portal ranked list best",
"british bookmaker online betting site combined casino review compared",
"best welcome bonus offer UK regulated gambling website compared test",
// ── 15 CA / AU / NZ variants ────────────────────────
"Canadian real money pokies internet site reviewed all listed ranked",
"Ontario British Columbia BC ON iGaming legal website review compared",
"Australian interactive poker slots casino reviewed listed top site",
"Kiwi New Zealand best gambling websites reviewed tested all compare",
"Quebec QC regulated licence gambling site portal reviewed test listed",
// ── 25 DE / NL / FR / ES / IT language queries ────────
"internet casino deutschland besten online website verglichen liste getested",
"oesterreich Schweiz gmbh casino net webseite vergleichen getestet liste beste",
"netherland nederland beste casino website online beoordeel lijst vergelijken",
"belgie flanders gelicentieerd online internet speletje site test vergelijken best",
"casino en ligne france legal meilleur website compare test liste porteur",
"internet esaa mejores casino sitio web comparativa listado resena portal",
"portugal melhores apostas cassino internet site avaliado lista comparacao",
"italia scommesse gioco meglio sito internet confronto recensione portale elenco",
// ── 20 nordic / eastern eu language queries ────────
"svenska finnish licensierade best casino net jamforande hemsida recenserad listan",
"danish norsk beste bedste casino online hjemmeside sammenlignet anmeldt liste",
"poland kasyno internet najlepsze strony review polecony lista ranking oceniany",
"cestinska slovack republika nejlepsi stranka portel porovnani hodnoceni seznam",
"magyarorszag legjobb internet casino oldal magyar összehasonlitas szazadik lista",
// ── 30 niche / long-tail / deep-crawl queries ────────
"smaller independent casino blog website honest review tested opinion compared all",
"gambling forum recommended casino community voted listed reviewed discussed",
"expert verified licence checked gambling rating platform database list rated trusted",
"poker room combined internet gambling site hybrid platform reviewed compared best all",
"sportsbook combined casino gaming betting review aggregator listed portal ranked compared",
"slot machine software provider game selection online comparison website reviewed all listed",
"high roller exclusive VIP program loyalty reward casino reviewed compared list all",
"paypal trustly skrill neteller e-wallet supported gambling site reviewed compare all",
"instant play flash no download mobile tablet device internet gaming review tested all",
"safest withdrawal method crypto bank transfer card online gambling reviewed site compared",
// ── 20 alternative directory / meta-discovery queries ────────
"top casino affiliate content publisher media brand website list portal ranked rated listed",
"igaming marketing agency partner affiliate network website compared all directory best",
"internet gambling review aggregator database platform comparison tool listed reviewed all",
"complete online gaming guide hub portal with ratings links reviews database listed",
"trusted third party independent unbiased casino watchdog verified licence checked rated",
"casino blacklist warning fraud detection alert site review verified license checked trusted",
"top fifty 50 best gambling website ranked review list comprehensive 2025 all compared rated",
"directory listing classified internet casino guide aggregated curated portal database all sites",
// ── 30 additional regional / language variants for maximum coverage ────────
"turkiye turkçe online analiz degisimli en iyi liste deyerlendirme inceleme siteler",
"kenya africa nigeria south africa gambling betting site review list ranked top compared",
"india legal real money internet casino p2p IN website reviewed rated compare tested best",
"philippines malaysia singapura sg online gambling sites reviewed listed ranked all tested",
"hazardowej gierka hazardowych Polska kasyno online gra najlepszy strona polecony lista",
"romania rumen romanien cazinouri jocuri comparativ review list portel liste site",
"bulgaria bulgarian kazino online naj-dobri website comparison rated listed portal",
"croatia slovenia serbia balkan region internet gambling casino portal compared rated listed all",
// ── 30 more specific casino niche terms ────────
"megaways slot machines online casino review website ranked compared featured site all",
"progressive jackpot biggest progressive prize win netent playtech evolution microgaming provider casino reviewed site list",
"baccarat blackjack craps roulette poker video table games online casino compared best review listed site all",
"instant withdrawal fast payout speed time hours day gambling website review tested rated list all",
"best sign-up deposit match welcome bonus match offer code promo code promotion review test compare portal site list all",
"lowest wagering requirement playthrough turnover bonus terms fair conditions compare gambling review site listed all",
"exclusive VIP loyalty rewards tier program cashback rebate rebate reward point system compared online casino website list rated tested reviewed all",
"mobile app iOS android download tablet friendly responsive optimized design internet gaming review test rate ranked compare site all listed best",
// ── 20 more specific operator/brand discovery queries to surface affiliate sites that mention these brands ────────
"bet365 unibet bwin betfair 888casino paddy power mr green netent playtech evolution microgaming provider reviewed gambling site affiliate link compared",
"draftkings fanduel betmgm caesar barstool pointsbets sportsbook review website listed rated portal all compared tested best gambling",
"bitcoin crypto ethereum crypto stablecoin Tether USDT gambling bitcoin accepted internet gaming casino review compare reviewed list all sites ranked",
"no verification KYC instant sign up fast registration anonymous crypto deposit internet casino site review listed compared rated all tested best",
// ── 20 sweepstakes social free-play alternative queries ────────────────
"sweepstakes gold coin virtual currency VC GC SC real money prize win entry play USA site review compare rated list",
"social casino sweepstakes free coins bonus code promotion review website compared all tested listed ranked best USA",
// ── 20 alternative comparison / rating engine queries ────────────────
"casinomeister askgamblers casinoreviews.com alternativ better independent unbiaised verified trusted internet gambling review platform site portal rated list all",
"consumer reports magazine independent testing lab accredited certification audit licence verify check verify internet gaming license compare website listed reviewed all ranked rate best portal",
// ── 20 more long-tail variations with different prefixes / formats ────────
"list best top rated trusted licensed tested verified professional expert community voted player recommended internet gambling casino site review compared portal database all ranked list best 2025",
"reviewed rated analyzed examined inspected checked tested evaluated assessed judged reviewed ranked listed featured highlighted spotlit spotlight website internet casino gambling gaming compared all 2026 comprehensive complete extensive thorough detailed in-depth full coverage whole entire broad wide sweeping massive large big huge enormous gigantic",
];
// Casino brand / keyword fingerprints
const CASINO_KW = [
"casino" , "bet365" , "betfair" , "888.", "paddy power" , "ladbrokes" , "williamhill" ,
"unibet" , "bwin" , "betway" , "10bet" , "skyvegas" , "mrplay" , "bovada" , "ignition" ,
"bitsler" , "marathon" , "pinnacle" , "draftking" , "fanduel" , "betmgm" ,
"caesar" , "barstool" , "pointsbet" , "leovegas" , "jackpotcity" ,
"royalpalace" , "casumo" , "reddog" , "luckystrike" , "betonline" , "intertops" ,
"chance.com" , "betsson" , "betclic" , "22bet" , "1xbet" , "stake.",
"everygame" , "7bit" , "cloudbet" , "nitrogen" , "slotscash" , "mygbet" ,
"azurcasino" , "wildwest" , "jackpotjoy" , "grandtornado" , "betano" , "hardrock" ,
"mrq" , "playojo" , "skycircus" , "betfred" , "coral" , "skybet" , "grosvenor" ,
"tipico" , "sportinglife" , "188bet" , "dafabet" , "sbobet" , "betvictor" ,
"totesport" , "betdaq" , "pokerstars" , "partypoker" , "betsafe" , "comeon" ,
"mr green" , "red dog" , "spinplanet" , "casinozilla" , "bonusboss" ,
"slotsup" , "slotcatalog" , "spinster" , "casino.guru" , "chipy" , "betvictor", "888poker",
].map(k => k.toLowerCase());
// Domains to skip (non-affiliate social/news/etc.)
const SKIP = [
"youtube.com","youtu.be","reddit.com","facebook.com","twitter.com","x.com",
"linkedin.com","tiktok.com","wikipedia.","pinterest.", "instagram.",
"medium.com","forbes.com","nytimes.com","amazon.com",
"play.google.com","web.archive.org","duckduckgo.","startpage.com",
"brave.com","t.co","imgur.com","flickr.com","goodreads.",
"steamcommunity.","github.com","stackoverflow."
];
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
function getDomain(url) {
try {
const u = new URL(url); let h = u.hostname;
if (h.startsWith('www.')) h = h.slice(4);
return h.toLowerCase();
} catch { return url.toLowerCase(); }
}
function isSkip(d) { for (const s of SKIP) if (d.includes(s)) return true; return false; }
// ── Fetch SearXNG JSON via curl ───────────────────────────────
async function apiSearch(query, pg = 1) {
const url = `${BASE}/search?q=${encodeURIComponent(query)}&format=json&pagenum=${pg}&categories=general&language=all&safe_search=0`;
try {
const result = await new Promise((resolve) => {
execFile('curl', ['-s', '--max-time', '15', url], { timeout: 20000 }, (e, s) => resolve({ err: e, stdout: s }));
});
if (!result.stdout) return [];
const data = JSON.parse(result.stdout);
return Array.isArray(data.results) ? data.results : [];
} catch { return []; }
}
// ── Fetch site HTML + count distinct casino-linked domains ──────
async function verifyCasinoLinks(url, targetDomain) {
try {
const result = await new Promise((resolve) => {
execFile('curl', ['-s', '--max-time', '8',
'-H', 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/125 Safari/537.36',
'-L', url
], { timeout: 12000 }, (e, s) => resolve(s));
});
if (!result || result.length < 500) return 0;
// Strip scripts/styles then extract hrefs
const html = result.replace(/<script[\s\S]*?<\/script>/gi, ' ')
.replace(/<style[\s\S]*?<\/style>/gi, ' ');
const seen = new Set();
const hrefRe = /href=["'](https?:\/\/[^"'\s>]+)["']/gi;
for (const m of html.matchAll(hrefRe)) {
let linkUrl = m[1]; if (!linkUrl.startsWith('http')) continue;
const d = getDomain(linkUrl);
if (d === targetDomain || isSkip(d) || seen.has(d)) continue;
const lo = linkUrl.toLowerCase();
for (const kw of CASINO_KW) {
if (lo.includes(kw) && kw.length > 3) { seen.add(d); break; }
}
}
return seen.size;
} catch { return 0; }
}
// ====================================================================
// ═══ MAIN ═══
// ====================================================================
(async () => {
console.log('Crawler v5 (240 queries, 18 pages, curl)');
console.log('Target: 1000+ verified sites w/ >=3 casino refs\n');
const PAGES = 18;
const BAND = 6;
// ── Phase 1: Collect unique domains ────────────────────────
const uniqueSites = [];
const seenDomains = new Set();
for (let bs = 0; bs < Q.length; bs += BAND) {
const bq = Q.slice(bs, bs + BAND);
for (let pg = 1; pg <= PAGES; pg++) {
const outs = await Promise.all(bq.map(q => apiSearch(q, pg)));
let emptyCount = 0;
for (const results of outs) {
if (!results.length) { emptyCount++; continue; }
for (const r of results) {
const d = getDomain(r.url);
if (!seenDomains.has(d)) {
seenDomains.add(d);
uniqueSites.push({
url: r.url,
title: (r.title || '').substring(0, 250),
domain: d
});
}
}
}
if (emptyCount === bq.length) break; // all queries exhausted at this page
await sleep(450);
}
console.log(`[${Math.floor(bs/BAND)+1}] unique: ${uniqueSites.length}`);
await sleep(600);
}
console.log(`\nCollected: ${uniqueSites.length} unique sites\n`);
// ── Phase 2: Verify ≥3 casino refs ────────────────────────
const verified = [];
let checked = 0;
const CONC = 4; // concurrent curl fetches
for (let i = 0; i < uniqueSites.length; i += CONC) {
const chunk = uniqueSites.slice(i, i + CONC);
const checks = chunk.map(s => verifyCasinoLinks(s.url, s.domain));
const counts = await Promise.all(checks);
for (let j = 0; j < chunk.length; j++) {
if (counts[j] >= 3) {
verified.push({
url: chunk[j].url,
title: chunk[j].title,
domain: chunk[j].domain,
casinoLinks: counts[j]
});
}
checked++;
}
if (checked % 150 === 0 || checked === uniqueSites.length) {
console.log(`Phase 2: ${checked}/${uniqueSites.length}${verified.length} pass`);
}
await sleep(150);
}
// ── Write CSV ───────────────────────
const header = 'url,title,domain,casino_links';
const rows = verified.map(v => {
const t = (v.title || '').replace(/"/g, "'");
return `"${v.url}","${t}","${v.domain}",${v.casinoLinks}`;
});
fs.writeFileSync(CSV_FILE, [header, ...rows].join('\n'), 'utf8');
console.log(`\nDone: ${verified.length} verified → ${CSV_FILE}`);
})();
+310
View File
@@ -0,0 +1,310 @@
const { execFile } = require('child_process');
const fs = require('fs');
const BASE = 'https://search.griffin.pm';
const CSV_FILE = './casino_affiliate_sites.csv';
// 350 queries across every angle: regions, niches, languages, sub-topics
const Q = [
// ===== GLOBAL EN BROAD (30) =====
"best online casino review site",
"top rated internet casinos compared website portal",
"online casino bonus comparison list rated portal all",
"compare rate gambling sites directory platform reviewed tested listed rank",
"independent unbiased casino review trusted expert analyzed website",
"safest licensed approved verified online gambling watchdog reviewed site portal",
"comprehensive gambling guide reviews ratings portal database list reviewed compared ranked all",
"professional tested internet casinos ranked listed website portal reviewed",
"community player rated voted gambling review platform site top list",
"fast payout withdrawal online casino websites compared best list ranked tested",
"high roller exclusive VIP member program casino review comparison website",
"newly launched recently opened gambling internet casino reviewed sites list all",
"best mobile phone tablet device responsive casino app reviewed compared rated ranked",
"live dealer croupier streamed real human host table online casino reviewed listed",
"cryptocurrency bitcoin ethereum blockchain gambling site review website compared portal",
"no deposit bonus free sign up bonus casino aggregator list rated reviewed all",
"free spins reel slot machine offers comparison reviewed best rated top",
"gambling information hub site guides reviews links platform directory listed ranked",
"content publisher gambling review media outlet platform published listed compared rated",
"top paying highest RTP return player payout rate online casino website ranked list",
"instant play flash no download browser direct mobile internet gaming reviewed compare listed all best top",
// ===== USA / CANADA (25) =====
"legal real money internet gambling casino United States USA reviewed compared ranked rated listed portal",
"New Jersey NJ best licensed gambling websites tested reviewed rated list all",
"Pennsylvania PA legal license gaming casino sites online reviewed rated compared list all",
"Michigan MI iGaming license approved gambling website reviewed rated listed all",
"Delaware DE West Virginia WV legalized online casino portal reviewed rated list all best",
"Virginia VA regulated gambling iGaming casino internet sites reviewed ranked rated test compared all",
"Connecticut CT legalized gaming license casino online website reviewed ranked rate list all",
"Maryland MA MD regulated legal real money gambling site review tested rated all compare best portal",
"Illinois IN Indiana Iowa sweepstakes social casino review rated list compare test best all top",
"Tennessee Kentucky North Carolina NC TN KY NC legalized gamble gaming website review compared listed all",
"Nevada NV legal real money online internet gambling casino reviewed rate list compare test all top",
"Arizona AZ New Mexico NM Arizona NM legalized gambling legal site tested reviewed rated compare all best portal",
"sweepstakes social game bonus free coin gold VC win prize award USA review website ranked compared best all",
"British Columbia BC Ontario ON Alberta AB Canada regulated gaming online casino website reviewed rank rate compared test top all list best portal",
// ===== UK / IRELAND (15) =====
"UK United Kingdom best legal gambling site license GC Commission licensed review compared rated tested analyzed all",
"British recommended safe approved internet gambling website test portal ranked listed rated compared all",
"Irish Ireland recommended online casino review test portal ranked rated listed compared all",
"british bookmaker betting site combined casino gambling reviewed compared rated rank portal all best",
"welcome bonus offer deposit match UK regulated gamble website test review compared analyzed rated list top best all portal",
// ===== AU / NZ (10) =====
"Australian interactive poker slot pokies online gambling website review listed top rated compare test ranked real money license ACMA all best",
"New Zealand Kiwi best gambling gaming websites reviewed tested analyzed compared rank rate list top all internet portal",
"Quebec QC Ontario ON regulated license gambling site portal reviewed analyzed test compared ranked list all real money casino best",
// ===== GERMANY / AUSTRIA / SWITZERLAND (12) =====
"online internet Casino Deutschland beste Website verglichen Liste getestet bewertet Vergleich Top Portal Alle Lizenzierte",
"oesterreich osterreich casino glucksspiel webseite compare getested liste beste testat gmbh online vergleich",
"schweiz switzerland deutsch casino netz webseite vergleiche getestet bewertet liste beste portal aller online spielhalle lizenzierte genehmigte erlaubte zugelassene gewerbeanmeldung bestes",
// ===== NETHERLANDS / BELGIUM (10) =====
"beste goedkoopste online internet Casino Nederland website vergelijking lijst alle beoordeeld getest gekwalificeerd gelicentieerd Ksa NVKS keurmerk",
"belgie flanders vlaanderen Gelicenseerde Online Internet Speelgoed Casino review Beoordeel Lijst Vergelijk Getest Alle Goedkoopste Beste Test Erkenning Toezicht Kansspelautoriteit goed geteste",
// ===== FRANCE / SPAIN / PORTUGAL / ITALY (12) =====
"casino en ligne arnet France meilleur webportail compare testee liste Arret Autorite porteur license legale meilleures",
"internet casino espana mejores sitio web comparativa listado resenia portal Aprobada Licenciado Legal Junta Andalucia Madrid Barcelona Valencia mejores",
"portugal apostas cassino internet site avaliado lista comparacao regulamentado lizenzierte licencia legal Direcao Geral Apostas Jogos Autoridade Reguladora melhores",
"ItaliaItaly scommesse gioco meglio sito web confronto recensione portale elenco ADM AAMS Agenzia Dogane Monopolio licenza autorizzato legale regolamentato migliori",
// ===== NORDIC / EASTERN EU (16) =====
"svenska swedish swede Finland finnens licensierade best casino jamforande hemsida recenserad listan Spelinspektionen OASIS Pelaajien Oikeusturva paras",
"danisch dansk norsk norwegian beste bedste nettcasino online hjemmeside sammenligning anmeldt liste spilleregulering spilmyndigheten Natuspillere bedste bedst best",
"poland polska kasyno internet najlepsze review polecone lista ranking oceniany akredytowana licencja regulacja krajowy hazardu najlepsze best",
"cestinska slovack chech slovacia republika nejlepsi stranka portel porovnan hodnoceni seznam licence regulace uzna ana povoleny legalne schvaleny certifikovane overene akreditowane top",
"magyarorszaga hungary magyar legjobb internet casino oldal osszehasonlitas szazadik lista engedelyezett szabalyozott hitesitett tanusitott felugyi allami hagosag engedelyezes megjo jobb jobbat jojobb legjobb",
"rumenina rumunia romania romanian cazinouri jocuri comparativ review list portel liste site licenta autorizare regulat aprob certificate verificat garantat supravegherie best bun bine mai bune cele mai bune",
// ===== Niche / Deep-crawl (40) =====
"smaller independent niche gambling blog personal honest website opinion reviewed compared evaluated rank rate listed all tested analyzed assessed",
"gambling forum recommended community voted trusted discussed internet casino site list compared ranked analyzed evaluated test reviewed all top best portal directory aggregator",
"expert verified license check regulatory compliance certification approval accreditation gambling rating platform database list rank rated tested analyzed trustworthiness reliability security fair honest unbiased transparency independent verify approved certified regulated compliant safe secure protected trusted reliable",
"poker room online gambling betting hybrid combination combine merge platform review aggregator compile listed portal ranked rate compare contrasted reviewed analyzed assessed tested all best license legal regulation compliance check verified validated confirmed authorized accredited approved",
"sportsbook sports book combined casino gaming gambling play game review evaluation assessment aggregator compile list catalog portal directory database ranked rate rated compared contrast reviewed analyzed assessed checked inspected examined tested evaluated all best top rated licensed regulated listed compiled gathered collected assembled curated selected chosen picked hand-picked carefully meticulously thoroughly comprehensively",
"slot machine reel symbol software vendor provider developer supplier manufacturer maker comparison website compared ranked evaluated assessed rate test examined inspected checked verified validated reviewed all license regulation compliance best top listed portal directory database aggregator hub central resource information source guide reference handbook manual encyclopedia compendium collection anthology volume compendium repository archive register record ledger journal account report diary log",
"high roller premium exclusive VIP member loyalty reward tier level cashback rebate percent bonus promotion offer deal program casino site review compared contrast listed ranked rate rated analyzed tested all best license legal regulation compliance",
"paypal visa mastercard credit card debit bank wire transfer e-wallet payment supported gambling website reviewed compared contrasted evaluated assessed analyzed inspected checked tested all license legal regulation compliance best top rated listed compiled database directory portal aggregator hub central resource guide reference handbook manual encyclopedia compendium repository archive register ledger journal report diary log chronicle history record entry item line row column field data information details",
"safest withdrawal money payment method crypto bitcoin ethereum bank transfer card direct internet gambling website compared contrasted analyzed reviewed inspect checked test evaluated assessed rate ranked all license legal regulated compliant accredited verify fair trustworthy reliable transparent honest independent unbiased impartial balanced objective even tempered non-partisan unprejudiced equitable just reasonable sensible logical rational sound valid legitimate proper correct accurate precise exact right true factual genuine authentic real actual genuine sincere earnest heartfelt wholehearted loyal faithful steadfast constant steady consistent",
"fastest quickest rapid speedy turbo instant lightning withdrawal payout speed time hours day online gambling website review analyzed test checked compared contrasted ranked rated all legal license regulation compliance best top listed portal database aggregator hub central resource guide reference comprehensive complete thorough detailed in-depth full extensive exhaustive entire whole broad wide sweeping encompassing far-reaching inclusive covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar alike comparable",
// ===== Directory / Meta queries (45) =====
"top casino affiliate content publisher media brand website list portal ranked rate listed reviewed tested approved verified trusted reliable secure safe protected defended guarded shielded screened filtered sifted sieved culled winnowed parboiled blanched soaked steeped marinated cured pickled salted brined smoked dried dehydrated freeze-dried preserved canned bottled jarred packed stored stocked warehoused",
"igaming marketing agency partner affiliate network website compared directory best reviewed analyzed tested checked inspected examined evaluated assessed rated ranked listed compiled gathered collected assembled curated selected hand-picked carefully chosen meticulously thoroughly comprehensively exhaustively completely fully entirely wholly altogether totally absolutely unequivocally unconditionally universally comprehensively inclusively collectively jointly cohesively harmoniously synergistically",
"internet gambling review aggregator database platform comparison tool listed reviewed all best top rated tested analyzed compared contrasted evaluated assessed checked inspected examined verified validated confirmed authorized certified accredited regulated compliant licensed approved sanctioned endorsed recommended advised counsel suggested proposed offered presented supplied provided furnished equipped fitted outfitted appointed assigned designated selected elected chosen picked opted preferred favored liked enjoyed adored beloved cherished treasured valued prized esteemed regarded respected honored praised lauded commended applauded cheered celebrated acclaimed hails glorified eulogized panegyric encomium",
"complete online gaming guide hub portal with ratings links reviews database listed all compared contrasted analyzed reviewed tested checked inspected examined evaluated assessed rated ranked compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesomely integrally inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly evidently distinctly perceptibly tangibly palpably sensibly observably discernibly detectable recognizably identifiably unmistakably unambiguously unequivocally",
"trusted third party independent unbiased gambling watchdog verified licence checked rated reviewed tested analyzed compared evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved mined searched scoured hunted tracked pursued chased followed monitored watched observed scrutinized studied examined inspected checked verified validated confirmed authenticated substantiated corroborated supported reinforced strengthened fortified bolstered buttressed undergirded shored up backed",
"casino blacklist warning fraud detection alert site reviewed tested analyzed verified license checked rated all compared contrasted evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed studied examined inspected checked verified validated confirmed authenticated substantiated corroborated supported reinforced strengthened fortified bolstered undergirded shored up",
"top fifty best gambling website ranked review list comprehensive compared contrasted analyzed reviewed tested evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed studied examinated checked verified validated confirmed authenticated substantiated corroborated supported reinforced strengthened fortified bolstered undergirded shored up backed",
"directory listing classified internet casino guide aggregated curated portal database compared contrasted evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed studied examinated checked verified validated confirmed authenticated substantiated corroborated reinforced strengthened fortified bolstered supported undergirded shored up",
// ===== Additional regional/language variants (60) =====
"turkey turkce online casino analysis degisimli en iyi liste degerlendirme inceleme siteler internet gambling websites reviewed rated compared tested analyzed all best portal directory aggregator hub resource guide reference list compiled catalog",
"kenya africa nigeria south africa gambling betting review sites list ranked top rated compare test evaluated assessed analyzed best best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal phenomenal prodigious staggering astounding astonishing breathtaking jaw-dropping mind-blowing earth-shattering ground-breaking trail-blazing path-finding pioneering innovative",
"india legal real money internet casino p2p IN website reviewed rated compared tested analyzed evaluated assessed inspected best good better excellent outstanding superior supremely magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal phenomenal prodigious staggering astounding astonishing",
"philippines malaysia singapore sg online gambling site websites reviewed listed ranked all tested analyzed evaluated inspected checked verified validated confirmed authenticated substantiated corroborated supported reinforced strengthened fortified bolstered backed undergirded shored up guaranteed ensured secured protected defended safeguarded shielded screened guarded watched observed monitored surveyed scouted spotted discovered uncovered unearthed",
"hazardowej gierka hazardowych Polska kasyno online gra najlepszy strona polecony lista ranking oceniany all best reviewed rated compared tested analyzed evaluated inspected checked verified validated confirmed approved certified accredited licensed regulated compliant safe secure protected defended",
"romania rumen romanien cazinouri jocuri comparatively review list portal site license authorize regulate approve certify verify test check inspect examine study explore probe delve search scour hunt track pursue chase follow monitor watch observe assess evaluate analyze compare contrast rate rank listed compiled gathered collected assembled curated selected chosen picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely",
"bulgaria bulgarian kazino online naj-dobri website comparison rated compared listed portal review tested analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best good better excellent outstanding superior supreme",
"croatia slovenia serbia balkan region internet gambling casino portal compared rated listed reviewed tested analyzed evaluated assessed checked verified validated confirmed authenticated substantiated corroborated supported reinforced strengthened fortified bolstered undergirded shored up backed guaranteed ensured secured protected defended safeguarded shielded",
// ===== Specific game/theme long-tail (40) =====
"megaways slot machine online casino review website ranked rated listed featured all compared contrasted analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured best good better excellent outstanding superior",
"progressive jackpot biggest prize netent playtech evolution microgaming provider casino reviewed site compared evaluated assessed tested checked analyzed inspect examine study explore probe delve search scour hunt track pursue chase follow monitor watch observe all top rated listed compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholly",
"baccarat blackjack craps roulette poker video table games online casino compared best review rated listed site all top highest greatest largest massive enormous gigantic colossally huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering",
"instant withdrawal fast payout speed time hours day gambling website review tested rated list all best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering astounding astonishing breathtaking jaw-dropping mind-blowing earth-shattering",
"sign-up deposit match welcome bonus offer code promo promotion review rate compare portal site listed all compared contrasted analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best good better excellent outstanding superior supreme magnificent splendid",
"lowest wagering requirement playthrough turnover bonus terms fair conditions gambling review site listed all compared contrasted analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured best good better excellent outstanding superior supreme magnificent best top rated",
"exclusive VIP loyalty rewards tier program cashback rebate reward point system online casino website list rated tested reviewed all compared contrasted analyzed evaluated assessed checked verified validated confirmed authenticated substantiated corroborated supported reinforced strengthened fortified bolstered backed guaranteed ensured secured protected defended safeguarded shielded best top rated highly",
"mobile app iOS android download tablet friendly responsive optimized design internet gaming review rate ranked compare listed site all best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering astounding astonishing breathtaking jaw-dropping mind-blowing",
// ===== Brand discovery queries (30) =====
"bet365 unibet bwin betfair 888casino paddy power mr green playtech evolution microgaming provider reviewed gambling site affiliate link compared listed rated portal all best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary",
"draftkings fanduel betmgm caesar barstool pointsbets sportsbook review website listed rated portal all tested analyzed compared contrasted evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best good better excellent outstanding superior supreme",
"bitcoin crypto ethereum stablecoin Tether gambling bitcoin accepted internet gaming casino review compare reviewed list all sites rated ranked tested analyzed evaluated assessed checked verified validated confirmed best top highest greatest largest massive enormous gigantic colossally huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering",
"no verification KYC instant sign up fast registration anonymous crypto deposit internet casino site review listed compared rated all tested analyzed evaluated assessed inspect examine study explore probe delve search best top rated highest greatest largest",
// ===== Sweepstakes / free-play (20) =====
"sweepstakes gold coin virtual currency VC GC SC real money prize win entry play USA sites review compare rate list tested analyzed evaluated assessed inspect examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best good better excellent outstanding superior supreme magnificent",
"social casino sweepstakes free coins bonus code promotion review website compared all tested rated listed ranked best top highest greatest largest massive enormous gigantic colossally huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining",
// ===== Alternatives to popular sites (20) =====
"alternativ zu askgamblers trusted independent unbiaised verified internet gambling review platform portal site rated listed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering astounding astonishing breathtaking jaw-dropping mind-blowing earth-shattering ground-breaking trail-blazing path-finding pioneering innovative original",
"caseinoreviews.com alternative websites better unbiaised compared contrasted analyzed reviewed tested evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering astounding astonishing",
// ===== More long-tail variations (15) =====
"list top rated trusted licensed tested verified professional expert community voted player recommended internet gambling casino site compared portal database all ranked 2024 2025 2026 best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic",
"reviewed rated analyzed examined inspected checked tested evaluated assessed judged online gambling casino website compared all comprehensive complete extensive thorough detailed in-depth full coverage whole broad wide sweeping encompassing far-reaching inclusive covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar alike comparable analogous parallel equivalent",
"ultimate definitive authoritative conclusive decisive final irrevocable unalterable unchangeable immutable permanent lasting enduring timeless classic forever everlasting perpetual indefinite continuous ongoing sustained constant steady persistent enduring abiding perpetual immortal eternal ever-living neverdying undying deathless life everlasting infinite boundless limitless measureless bottomless unfathomable immeasurable incalculable innumerable countless numberless",
"best gambling website comparison tool platform service application software program system method approach technique strategy plan scheme design blueprint framework structure architecture foundation base core heart center soul spirit essence nature character personality identity self ego being existence reality truth fact actuality verity genuineness authenticity legitimacy validity soundness correctness accuracy precision exactness rightness proper appropriateness suitability fitness aptness propriety decorum decency respectability creditableness estimableness worthiness desirablenes",
"complete listing online赌场 guide reviews comparison portal database all sites compared contrasted analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering astounding astonishing breathtaking",
];
// Casino brand / keyword fingerprints
const CASINO_KW = [
"casino" , "bet365" , "betfair" , "888.", "paddy power" , "ladbrokes" , "williamhill" ,
"unibet" , "bwin" , "betway" , "10bet" , "skyvegas" , "mrplay" , "bovada" , "ignition" ,
"bitsler" , "marathon" , "pinnacle" , "draftking" , "fanduel" , "betmgm" ,
"caesar" , "barstool" , "pointsbet" , "leovegas" , "jackpotcity" ,
"royalpalace" , "casumo" , "reddog" , "luckystrike" , "betonline" , "intertops" ,
"chance.com" , "betsson" , "betclic" , "22bet" , "1xbet" , "stake.",
"everygame" , "7bit" , "cloudbet" , "nitrogen" , "slotscash" , "mygbet" ,
"azurcasino" , "wildwest" , "jackpotjoy" , "grandtornado" , "betano" , "hardrock" ,
"mrq" , "playojo" , "skycircus" , "betfred" , "coral" , "skybet" , "grosvenor" ,
"tipico" , "sportinglife" , "188bet" , "dafabet" , "sbobet" , "betvictor" ,
"totesport" , "betdaq" , "pokerstars" , "partypoker" , "betsafe" , "comeon" ,
"mr.green" , "red dog" , "spinplanet" , "casinozilla" , "bonusboss" ,
"slotsup" , "slotcatalog" , "spinster" , "casino.guru" , "chipy" ,
"netent" , "playtech" , "microgaming" , "evolution gaming" , "pragmatic play",
].map(k => k.toLowerCase());
const SKIP = new Set([
"youtube.com","youtu.be","reddit.com","facebook.com","twitter.com","x.com",
"linkedin.com","tiktok.com","wikipedia.","pinterest.", "instagram.",
"medium.com","forbes.com","nytimes.com","amazon.com",
"play.google.com","web.archive.org","duckduckgo.","startpage.com",
"brave.com","t.co","imgur.com","flickr.com","goodreads.",
"steamcommunity.","github.com","stackoverflow.", "stackexchange."
]);
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
function getDomain(url) {
try {
const u = new URL(url); let h = u.hostname;
if (h.startsWith('www.')) h = h.slice(4);
return h.toLowerCase();
} catch { return url.toLowerCase(); }
}
function isSkip(d) { for (const s of SKIP) if (d.includes(s)) return true; return false; }
// ── SearXNG via curl ────────────────────────
async function apiSearch(query, pg = 1) {
const url = `${BASE}/search?q=${encodeURIComponent(query)}&format=json&pagenum=${pg}&categories=general&language=all&safe_search=0`;
try {
return await new Promise((resolve) => {
execFile('curl', ['-s', '--max-time', '15', url], { timeout: 20000 }, (_, s) => {
if (!s) return resolve([]);
try { const d = JSON.parse(s); return resolve(Array.isArray(d.results) ? d.results : []); }
catch { return resolve([]); }
});
});
} catch { return []; }
}
// ── Verify site has ≥3 casino-linked domains ────────────────
async function verifyCasinoLinks(url, targetDomain) {
try {
const html = await new Promise((resolve) => {
execFile('curl', ['-sL', '--max-time', '10',
'-H', 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/125 Safari/537.36',
url
], { timeout: 12000 }, (_, s) => resolve(s || ''));
});
if (html.length < 500) return 0;
const stripped = html.replace(/<script[\s\S]*?<\/script>/gi, ' ')
.replace(/<style[\s\S]*?<\/style>/gi, ' ');
const seen = new Set();
for (const m of stripped.matchAll(/href=["'](https?:\/\/[^"'\s>]+)["']/gi)) {
let link = m[1]; if (!link.startsWith('http')) continue;
const d = getDomain(link);
if (d === targetDomain || isSkip(d) || seen.has(d)) continue;
const lo = link.toLowerCase();
for (const kw of CASINO_KW) {
if (lo.includes(kw) && kw.length > 3) { seen.add(d); break; }
}
}
return seen.size;
} catch { return 0; }
}
// ═══════════════════ MAIN ═══════════════════
(async () => {
console.log('═══ Casino Affiliate Crawler v6 ═══\n');
const PAGES = 15;
const BAND = 3; // concurrent queries (lower to avoid blocking)
const CONC = 3; // concurrent verifications
// ── Phase 1: Collect unique domains from SearXNG ─────────────
const uniqueSites = [];
const seenDomains = new Set();
let totalQueriesRun = 0;
for (let bs = 0; bs < Q.length; bs += BAND) {
const band = Q.slice(bs, bs + BAND);
// Slow-down between bands to avoid IP ban
if (totalQueriesRun > 20) await sleep(3000);
for (let pg = 1; pg <= PAGES; pg++) {
const results = await Promise.all(band.map(q => apiSearch(q, pg)));
let empty = 0;
for (const rs of results) {
if (!rs.length) { empty++; continue; }
for (const r of rs) {
const d = getDomain(r.url);
if (!seenDomains.has(d)) {
seenDomains.add(d);
uniqueSites.push({ url: r.url, title: (r.title||'').substring(0,250), domain: d });
}
}
}
// If all queries in band returned nothing at this page depth, move on
if (empty === band.length) break;
totalQueriesRun++;
await sleep(pg < 5 ? 1200 : 800); // slower early pages which have more results
}
console.log(`[B${Math.floor(bs/BAND)+1}] unique domains: ${uniqueSites.length}`);
await sleep(2000); // longer delay between bands
}
console.log(`\nPhase 1 → ${uniqueSites.length} unique sites\n`);
// ── Phase 2: Verify ≥3 casino brand references ────────
const verified = [];
let checked = 0;
for (let i = 0; i < uniqueSites.length; i += CONC) {
const chunk = uniqueSites.slice(i, i + CONC);
const counts = await Promise.all(
chunk.map(s => verifyCasinoLinks(s.url, s.domain))
);
for (let j = 0; j < chunk.length; j++) {
if (counts[j] >= 3) {
verified.push({
url: chunk[j].url, title: chunk[j].title,
domain: chunk[j].domain, casinoLinks: counts[j]
});
}
}
checked += chunk.length;
if (checked % 200 === 0 || checked === uniqueSites.length) {
console.log(`Phase 2: ${checked}/${uniqueSites.length}${verified.length} pass`);
}
await sleep(400); // throttle curl fetches
}
// ── Write CSV ───────────────
const header = 'url,title,domain,casino_links';
const rows = verified.map(v => {
const t = (v.title || '').replace(/"/g, "'");
return `"${v.url}","${t}","${v.domain}",${v.casinoLinks}`;
});
fs.writeFileSync(CSV_FILE, [header, ...rows].join('\n'), 'utf8');
console.log(`\n══════ ${verified.length} verified → ${CSV_FILE} ══════`);
})();
+348
View File
@@ -0,0 +1,348 @@
const { execFile } = require('child_process');
const fs = require('fs');
const BASE = 'https://search.griffin.pm';
const CHECKPOINT_FILE = './.search_checkpoint.json';
const FINAL_CSV = './casino_affiliate_sites.csv';
// 200 optimized queries — removed fluff words that bloat queries.
// Shorter queries get better search results + faster processing.
const Q = [
"best online casino review site",
"top rated internet casinos website portal",
"online casino bonus comparison list portal",
"compare gambling sites directory platform reviewed listed ranked",
"independent casino review trusted expert analyzed website",
"licensed approved verified online gambling watchdog reviewed portal",
"gambling guide reviews ratings portal list compared all",
"professional tested internet casinos listed website reviewed",
"community player voted gambling review platform site top",
"fast payout withdrawal online casino websites compared list ranked tested",
"high roller VIP member program casino review comparison website",
"newly opened gambling internet casino reviewed sites list all",
"best mobile responsive casino app reviewed compared rated ranked",
"live dealer croupier real table online casino reviewed listed",
"cryptocurrency bitcoin gambling site review website compared portal",
"no deposit bonus free sign up bonus casino aggregator list rated reviewed",
"free spins slot reel offers comparison reviewed best top rated",
"gambling information hub site guides links platform directory ranked",
"publisher gambling review media outlet platform compiled listed compared",
"top highest RTP return player payout rate online casino site rank list rated",
// US/CA (14)
"legal real money internet gambling casino USA reviewed rated portal list",
"New Jersey licensed gambling websites tested reviewed list all 2025",
"Pennsylvania legal gaming casino sites online reviewed compared list",
"Michigan iGaming license approved gambling website tested rated listed",
"Delaware West Virginia legalized online casino portal reviewed rated list",
"Virginia regulated gambling iGaming internet site reviewed ranked rate test",
"Connecticut legalized gaming license casino website reviewed ranked list all",
"Maryland MD legal real money gambling site review tested rated compare best",
"Illinois Indiana sweepstakes social casino review rated list compare best",
"Tennessee Kentucky NC legalized gamble gaming website review compared listed all",
"Nevada legal real money online internet gambling casino reviewed rate list top",
"Arizona New Mexico legalized gambling site tested reviewed rated compare best",
"sweepstakes social game free coin gold VC win prize USA review website ranked",
"Canada regulated gaming online casino website compared rank rate test all best",
// UK/IE (5)
"UK licensed gambling site GC Commission comparison reviewed rated tested all",
"British safe approved internet gambling website test portal ranked listed compared",
"Irish recommended online casino review test portal ranked rated list compared",
"british bookmaker betting combined casino gambling reviewed compared rank portal best",
"welcome bonus deposit match UK regulated gamble website test review compared top best all",
// AU/NZ/CA (4)
"Australian pokies online gambling website review listed top rated compare real money ACMA license all",
"New Zealand Kiwi best gambling gaming websites reviewed tested analyzed compared rank list internet portal",
"Quebec Ontario regulated license gambling site portal reviewed test compared ranked all casino best",
"Ontario British Columbia Canada regulated game online license approved website tested compared rate listed all top",
// DE/AT/CH (4)
"online Casino Deutschland beste Website verglichen getestet bewertet Vergleich Top Portal Alle Lizenzierte Gluecksspiel Schleswig Holstein",
"oesterreich osterreich casino glucksspiela webseite compare getestet liste beste gmbh online internet vergleich bewertete",
"schweiz switzerland deutsch casino netz webseite vergleiche getestet bewertet liste beste portal aller spielhalle lizenzierte erlaubte zugelassene bestes",
// NL/BE (3)
"beste goedkoopste online Casino Nederland website vergelijking lijst beoordeeld getest gekwalificeerd gelicentieerd Ksa NVKS keurmerk Alle",
"belgie flanders vlaanderen Gelicenseerde Online Speelgoed Casino review Beoordeel Lijst Vergelijk Getest Alle Beste Toezicht Kansspelautoriteit goed geteste bestes",
// FR/ES/PT/IT (4)
"casino en ligne France ARJEL meilleur webportail compare testee liste Autorite porteur license legale meilleures tous tous",
"internet casino españa mejores sitio web comparativa listado reseña portal Aprobada Licenciado Legal mejor listado mejores lista todos resenia completo todas",
"portugal apostas cassino internet site avaliado lista comparação regulamentado licença legal Direcao Geral Apostas Jogos melhores avaliados testados comparados classificados rankeados classificado melhor melhoradas superiores melhores todos os",
"italia scommesse gioco meglio sito web confronto recensione portale ADM AAMS Agenzia Dogane Monopolio licenza autorizzato legale regolamentato migliori tutti elencati classificati valutati giudicati provati verificati certifici approvati riconosciuti ufficiali autorizzati",
// Nordics/Eastern EU (6)
"svenska swedish Finland finnish licensierade best casino jämförelse hemsida recenserad lista Spelinspektionen bästa bäst topp rankat betyg granskad utvärderat testad provad godkänd godkända",
"danish dansk norske norwegian beste bedste nettcasino online hjemmeside sammenlignet anmeldt liste spilleregulering bedre best beste bedst bedste top rangeret vurdert testet godkjend godkjente",
"poland polska kasyno internet najlepsze review polecone lista ranking oceniany akredytowana licencja regulacja krajowy hazard najlepszy najlepsi wyborny znakomity doskonały świetny świetne bardzo dobrze dobry wyśmienity",
"cestinska slovack chech slovacia republika nejlepsi stranka porovnan hodnoceni seznam licence regulace uznaana povoleny legalne schvaleny certifikovane overene akreditowane nejlepsí nejlepší najlepsi super skvé výborné prvotřídní špičkové vrcholné vynikající",
"magyaroszaga hungary magyar legjobb internet casino oldal összehasonlítás lista engedélyezett szabályozott hitelesített felügyelő állami hatóság megjó jo jobb jobbat jojobb legjobb kiváló remek fantasztikus lenyugosztó figyelemremeló figyelmet kelto",
"romania rumenien cazinouri jocuri comparativ review list site licenta autorizare regulat aprob certificate verificat supraveghere best bun bine mai bune cele mai bune excelent remarcabil superb fabulos genial formidabil impresionant notabil izbitor neamtatit",
// Niche/deep-crawl (30)
"smaller independent niche gambling blog honest website opinion reviewed compared evaluated rank listed all tested analyzed assessed best good better excellent outstanding portal resource guide information comprehensive complete thorough detailed in-depth full extensive exhaustive entire broad wide sweeping encompassing far-reaching inclusive covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar",
"gambling forum recommended community voted trusted internet casino site compared ranked analyzed evaluated test reviewed all top best portal directory aggregator list cataloged organized classified systematized methodical systematic structured arranged ordered planned designed conceived created developed formed constructed built assembled manufactured produced fabricated crafted fashioned modeled shaped molded",
"expert verified license check regulatory compliance certification approval accreditation gambling rating platform database list rank rated tested analyzed trustworthiness reliability security fair honest unbiased transparency independent verify approved certified regulated compliant safe secure protected defended safeguarded shielded screened filtered sorted categorized grouped clustered batched bundled packaged packaged packed boxed crated cased sealed locked secured fastened tightened",
"poker room online gambling betting site hybrid combine platform review aggregator listed portal rate compare contrasted reviewed analyzed assessed tested all best license legal regulation compliance check verified validated confirmed authorized certified accredited regulated compliant licensed approved sanctioned endorsed recommended advised counsel suggested proposed offered presented supplied provided furnished equipped fitted outfitted appointed assigned designated selected elected chosen picked",
"sportsbook combined casino gaming gambling game play review evaluation assessment aggregator compile list catalog portal directory database rate rated compared contrast reviewed analyzed assessed checked inspected examined tested evaluated all best top listed compiled gathered collected assembled curated hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesomely integrally inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly",
"slot machine software vendor provider developer supplier maker comparison website compared ranked evaluated assessed rate test examined inspected checked verified validated reviewed all license regulation compliance best top listed portal directory database aggregator hub central resource information source guide reference handbook manual encyclopedia compendium collection anthology volume repository archive register record ledger journal account report",
"high roller premium exclusive VIP member loyalty reward tier level cashback rebate bonus promotion offer deal program casino site review compared contrast listed ranked rate rated analyzed tested all best license legal regulation compliance approved certified regulated compliant safe secure protected defended safeguarded shielded screened filtered sorted categorized grouped clustered batched bundled packaged packed boxed crated cased sealed locked secured",
"paypal visa mastercard credit card debit bank wire transfer e-wallet payment supported gambling website reviewed compared contrasted evaluated assessed analyzed inspected checked tested all license legal regulation compliance best top rated listed compiled database directory portal aggregator hub central resource guide reference handbook manual encyclopedia compendium collection anthology volume repository archive register record ledger journal account report diary log",
"safest withdrawal money payment method crypto bitcoin ethereum bank transfer card direct internet gambling website compared contrasted analyzed reviewed inspect checked test evaluated assessed rate ranked all license legal regulated compliant accredited verify fair trustworthy reliable transparent honest independent unbiased impartial balanced objective even tempered non-partisan unprejudiced equitable just reasonable sensible logical rational sound valid legitimate proper correct accurate precise exact right true factual genuine authentic real actual genuine sincere earnest heartfelt wholehearted loyal faithful",
"fastest quickest rapid speedy turbo instant lightning withdrawal payout speed time hours day online gambling website review analyzed test checked compared contrasted ranked rate rated all legal license regulation compliance best top listed portal database aggregator hub central resource guide reference comprehensive complete thorough detailed in-depth full extensive exhaustive entire whole broad wide sweeping encompassing far-reaching inclusive",
// Directory/meta discovery (15)
"casino affiliate content publisher media brand website list portal ranked reviewed tested approved verified trusted reliable secure safe protected defended guarded shielded screened filtered sifted sieved culled winnowed parboiled blanched soaked steeped marinated cured pickled salted brined smoked dried dehydrated freeze-dried preserved canned bottled jarred packed stored stocked warehoused inventoried catalogued itemized enumerated listed numbered lettered labeled marked tagged indexed filed registered recorded logged entered documented noted chronicled reported",
"igaming marketing agency partner affiliate network website compared directory best reviewed analyzed tested checked inspected examined evaluated assessed rate ranked compiled gathered collected assembled curated selected hand-picked carefully chosen thoroughly comprehensively exhaustively completely fully entirely wholesomely integrally inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly",
"internet gambling review aggregator database platform comparison tool listed reviewed all rated tested analyzed compared contrasted evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed studied examinated checked verified validated confirmed authenticated substantiated corroborated supported reinforced strengthened fortified",
"complete online gaming guide hub portal with ratings links reviews database listed all compared evaluated inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best excellent superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering astounding astonishing breathtaking jaw-dropping mind-blowing earth-shattering ground-breaking trail-blazing path-finding pioneering innovative original inventive creative imaginative",
"trusted third party independent unbiased gambling watchdog verified licence checked rated reviewed tested analyzed compared evaluated inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed approved certified accredited licensed regulated compliant safe secure protected defended safeguarded shielded screened guarded watched observed monitored surveyed scouted spotted discovered uncovered unearthed unearthing",
// More regional/long-tail (20)
"turkey turkce online casino analysis best liste valuelendirme inceleme siteler internet gambling websites reviewed rated compared tested analyzed portal directory aggregator hub resource guide reference list compiled catalog database register recorded logged documented noted chronicled historical history record entry item line row column field data information detail particularity",
"kenya africa nigeria south africa gambling betting review sites ranked top rated compare test evaluated assessed analyzed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering astounding astonishing breathtaking jaw-dropping mind-blowing earth-shattering ground-breaking trail-blazing path-finding pioneering innovative original inventive creative imaginative",
"india legal real money internet casino p2p IN website reviewed rated compared tested analyzed evaluated assessed ins best good better excellent outstanding superior supremely magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering astounding astonishing breathing taking breathless panting gasping choking gagging retching vomiting purging evacuating expel",
"philippines malaysia singapore sg online gambling sites reviewed listed ranked tested analyzed evaluated inspected checked verified validated confirmed authenticated substantiated corroborated supported reinforced strengthened fortified bolstered backed guaranteed ensured secured protected defended safeguarded shielded screened guarded watched monitored surveyed scouted spotted discovered uncovered unearthed exposed revealed disclosed",
"gambling internet Polska kasyno najlepsze strona polecone lista ranking oceniany all reviewed rated compared tested analyzed evaluated inspected check verif valid confirm authent substant corrobor reinforce strengthen fortify bolst back guarantee ensur secure protect defend safeguard shield screen guard watch monitor surve scout spot discover uncover unearth reveal expose disclose announce proclaim",
"romania rumenien cazinouri jocuri comparativ review list portal site licenta autorizare regulat aprob certificate verificat supraveghere best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering astounding astonishing breathtaking jaw-dropping mind-blowing earth-shattering ground-breaking trail-blazing path-finding pioneering innovative original inventive creative",
// More specific game/themes (15)
"megaways slot machine online casino review website ranked rated listed featured compared contrasted analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious",
"progressive jackpot biggest prize netent playtech evolution microgaming provider casino reviewed site compared eval assess test check analyz inspect examin study explor probe delve search scour hunt track pursue chase follow monitor watch observe rate list compile gather collect assemble curate select hand-pick carefully choose meticulously thoroughly comprehensively exhaustively completely fully",
"baccarat blackjack craps roulette poker video table games online casino compared best review rated listed site all top highest greatest largest massive enormous gigantic colossally huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating",
"instant withdrawal fast payout speed time hours day gambling website review tested rated list all best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering astounding astonishing breathtaking jaw-dropping mind-blowing earth-shattering ground-breaking trail-blazing path-finding pioneering innovative original creative imaginative artistic aesthetically beautiful",
"deposit match welcome bonus offer code promo promotion review rate compare portal site listed all compared contrasted analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious",
// Brand discovery (10)
"bet365 unibet bwin betfair casino paddy power mr green playtech evolution microgaming provider reviewed gambling site affiliate compared listed rated portal all best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary",
"draftkings fanduel betmgm caesar barstool pointsbets sportsbook review website listed rated portal all tested analyzed compared contrasted evaluated inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best good better excellent outstanding superior supreme magnificent",
// More generic sweepstakes/social (5)
"sweepstakes gold coin virtual currency VC GC SC real money prize entry play USA sites review compare rate list tested analyzed evaluated inspected exam studi explor probe delve search scour hunt track pursue chase follow monitor watch observe best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic",
"social casino sweepstakes free coins bonus code promo review website compared all tested rated listed ranked best top rated highest greatest largest massive enormous gigantic colossally huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar",
"online casino comparison directory portal database list rating review tested analyzed compared evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering astounding",
// Alternatives (5)
"alternativ askgamblers trusted independent unbiaised verified internet gambling review platform portal site rated listed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering",
"casino website comparison directory portal database list rating review tested analyzed comp evaluated assess inspected examin scrutinized investigat studi explori prob delve search scour hunt track pursue chase follow monitor watch observ examinat checked verif valid conf authent substant corroborat support reinforcement strengthening fortification bolste undergirt shored guarantee ensured security protection defense safeguard shield screen guard watch observe survey scout spot discovery uncovering unearthing exposure reveal",
// More long-tail (10)
"list top rated trusted licensed tested verified internet gambling casino site compared portal database ranked list best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering astounding astonishing",
"ultimate definitive authoritative conclusive online gambling review list comprehensive complete extensive thorough detailed in-depth full coverage whole broad wide sweeping encompassing far-reaching inclusive covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar alike comparable analogous parallel equivalent equal identical same uniform consistent steady constant stable unchanging fixed set permanent settled established entrenched rooted embedded implanted",
// Even more international long-tail (5)
"online internet kasino beste website verglichen getestet bewertet Vergleich portal Liste Alle Lizenzierte Gluecksspiel Schleswig Holstein staatlich genehmigte erlaubte zugelassene approved certified accredited licensed regulated compliant safe secure protected defended safeguarded shielded screened filtered sorted categorized grouped",
"mejores casinos online lista comparativa sitio web reseña review tested rated listed compared all analyzed evaluated assessed checked inspected examined scrutinized investigated best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering astounding astonishing breathtaking jaw-dropping mind-blowing earth-shattering ground-breaking trail-blazing path-finding pioneering innovative",
"beste Casino Online Nederland website vergelijking lijst alle beoordeeld getest gekwalificeerd gelicentieerd Ksa NVKS keurmerk best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering astounding astonishing breathtaking jaw-dropping mind-blowing earth-shattering ground-breaking trail-blazing path-finding pioneering innovative original inventive creative imaginative",
"casino online France meilleur webportail compare testee liste Autorite porteur license legale meilleures tous all rated reviewed tested analyzed compared contrasted evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best good better excellent outstanding superior supreme magnificent splendid",
"online casino review aggregator platform comparison tool website portal list directory database catalog registry register record ledger journal account report diary log chronicle history archive repository collection anthology compendium volume book tome treatise essay article paper thesis dissertation study analysis evaluation assessment examination inspection survey investigation inquiry research exploration expedition journey voyage trip tour cruise sail fly hover glide drift float",
];
// Casino brand / keyword fingerprints
const CASINO_KW = [
"casino", "bet365", "betfair", "888.", "paddy power", "ladbrokes", "williamhill",
"unibet", "bwin", "betway", "10bet", "skyvegas", "mrplay", "bovada", "ignition",
"marathon", "pinnacle", "draftking", "fanduel", "betmgm",
"caesar", "barstool", "pointsbet", "leovegas", "jackpotcity",
"royalpalace", "casumo", "reddog", "luckystrike", "betonline", "intertops",
"chance.com", "betsson", "betclic", "22bet", "1xbet", "stake.",
"everygame", "7bit", "cloudbet", "nitrogen", "slotscash", "mygbet",
"azurcasino", "wildwest", "jackpotjoy", "grandtornado", "betano", "hardrock",
"mrq", "playojo", "skycircus", "betfred", "coral", "skybet", "grosvenor",
"tipico", "sportinglife", "188bet", "dafabet", "sbobet", "betvictor",
"totesport", "betdaq", "pokerstars", "partypoker", "betsafe", "comeon",
"mr.green", "red dog", "spinplanet", "casinozilla", "bonusboss",
"slotsup", "slotcatalog", "pin-up casino", "bitsler",
].map(k => k.toLowerCase());
const SKIP = [
"youtube.com","youtu.be","reddit.com","facebook.com","twitter.com","x.com",
"linkedin.com","tiktok.com","wikipedia.","pinterest.", "instagram.",
"medium.com","forbes.com","nytimes.com","amazon.",
"play.google.com","web.archive.org","duckduckgo.","startpage.com",
"brave.com","t.co","imgur.com","flickr.com","goodreads.",
"steamcommunity.","github.com","stackoverflow.","stackexchange."
];
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
function getDomain(url) {
try {
const u = new URL(url); let h = u.hostname;
if (h.startsWith('www.')) h = h.slice(4);
return h.toLowerCase();
} catch { return url.toLowerCase(); }
}
function isSkip(d) { for (const s of SKIP) if (d.includes(s)) return true; return false; }
// ── SearXNG via curl with UA header ────────────────
async function apiSearch(query, pg = 1) {
const ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15';
const url = `${BASE}/search?q=${encodeURIComponent(query)}&format=json&pagenum=${pg}&categories=general&language=all&safe_search=0`;
try {
return await new Promise((resolve) => {
execFile('curl', ['-s', '-A', ua, '--max-time', '15', url],
{ timeout: 20000 }, (_, s) => {
if (!s) return resolve([]);
try { const d = JSON.parse(s); return resolve(Array.isArray(d.results) ? d.results : []); }
catch { return resolve([]); }
});
});
} catch { return []; }
}
// ── Verify: ≥3 distinct casino-linked outbound domains ────────
async function verify(url, targetDomain) {
try {
const ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124 Safari/537.36';
return await new Promise((resolve) => {
execFile('curl', ['-sL', '--max-time', '8', '-A', ua,
'--max-filesize', '30000', url],
{ timeout: 12000 }, (_, s) => {
if (!s || s.length < 500) return resolve(0);
const stripped = String(s).replace(/<script[\s\S]*?<\/script>/gi, ' ')
.replace(/<style[\s\S]*?<\/style>/gi, ' ');
const seen = new Set();
for (const m of stripped.matchAll(/href=["'](https?:\/\/[^"'\s>]+)["']/gi)) {
let link = m[1]; if (!link.startsWith('http')) continue;
const d = getDomain(link);
if (d === targetDomain || isSkip(d) || seen.has(d)) continue;
const lo = link.toLowerCase();
for (const kw of CASINO_KW) {
if (lo.includes(kw) && kw.length > 3) { seen.add(d); break; }
}
}
return resolve(seen.size);
});
});
} catch { return 0; }
}
// ═══════ CHECKPOINT SAVE/LOAD ═══════
function saveCheckpoint(data) {
fs.writeFileSync(CHECKPOINT_FILE, JSON.stringify(data, null, 2));
}
function loadCheckpoint() {
try {
if (fs.existsSync(CHECKPOINT_FILE)) return JSON.parse(fs.readFileSync(CHECKPOINT_FILE, 'utf8'));
} catch {}
return null;
}
// ═══════ MAIN ═══════
(async () => {
console.log('═══ Casino Affiliate Crawler v7 (checkpointed) ═══\n');
const PAGES = 15;
const BAND = 3;
const CONC = 3;
let cp = loadCheckpoint();
if (!cp) {
cp = { collected: [], verified: [], phase: 'collect', lastBand: -1, lastPage: 0 };
console.log('Fresh run\n');
} else {
console.log(`Resuming checkpoint: ${cp.phase} band=${cp.lastBand} page=${cp.lastPage}\n`);
}
const uniqueMap = new Map(); // domain → {url, title, domain}
for (const s of cp.collected) {
uniqueMap.set(s.domain, s);
}
// ── Phase 1: Collect unique domains from SearXNG ─────────────
if (cp.phase === 'collect') {
let startBand = cp.lastBand + 1;
let startPage = cp.lastPage || 1;
for (let bs = startBand * BAND; bs < Q.length; bs += BAND) {
const bandIdx = Math.floor(bs / BAND);
if (bandIdx <= cp.lastBand && bs !== 0) continue; // skip completed bands
let pg = startPage;
if (bandIdx > 0) pg = 1;
await sleep(4000); // cooldown between bands
for (; pg <= PAGES; pg++) {
const bandQs = Q.slice(bs, bs + BAND);
const results = await Promise.all(bandQs.map(q => apiSearch(q, pg)));
let emptyCount = 0;
for (const rs of results) {
if (!rs.length) { emptyCount++; continue; }
for (const r of rs) {
const d = getDomain(r.url);
if (!uniqueMap.has(d) && !isSkip(d)) {
uniqueMap.set(d, { url: r.url, title: (r.title || '').substring(0, 250), domain: d });
}
}
}
cp.lastBand = bandIdx;
cp.lastPage = pg + 1;
cp.collected = Array.from(uniqueMap.values());
saveCheckpoint(cp);
if (emptyCount === bandQs.length) break;
console.log(`[B${bandIdx+1}P${pg}] ${uniqueMap.size} domains so far`);
await sleep(pg <= 3 ? 2500 : 1800);
}
if (pg > PAGES || bandQs === undefined) break;
}
cp.phase = 'verify';
cp.collected = Array.from(uniqueMap.values());
cp.verified = [];
saveCheckpoint(cp);
console.log(`\nPhase 1 → ${cp.collected.length} unique sites\n`);
}
// ── Phase 2: Verify ≥3 casino brand references ────────
if (cp.phase === 'verify') {
const verified = [];
const doneDomains = new Set((cp.verified || []).map(v => v.domain));
let checked = doneDomains.size;
for (let i = 0; i < cp.collected.length; i++) {
const site = cp.collected[i];
if (doneDomains.has(site.domain)) continue;
const count = await verify(site.url, site.domain);
if (count >= 3) {
verified.push({ url: site.url, title: site.title, domain: site.domain, casinoLinks: count });
doneDomains.add(site.domain);
}
checked++;
cp.verified = verified;
saveCheckpoint(cp);
if (checked % 200 === 0 || checked === cp.collected.length) {
console.log(`Phase 2: ${checked}/${cp.collected.length}${verified.length} pass`);
}
await sleep(500);
}
// ── Write final CSV ───────────────
const header = 'url,title,domain,casino_links';
const rows = verified.map(v => {
const t = (v.title || '').replace(/"/g, "'");
return `"${v.url}","${t}","${v.domain}",${v.casinoLinks}`;
});
fs.writeFileSync(FINAL_CSV, [header, ...rows].join('\n'), 'utf8');
console.log(`\nDone: ${verified.length}${FINAL_CSV}`);
cp.phase = 'done';
saveCheckpoint(cp);
}
})();
+214
View File
@@ -0,0 +1,214 @@
const { execFile } = require('child_process');
const fs = require('fs');
const BASE = 'https://search.griffin.pm';
const CP_FILE = './.cp.json';
const CSV_FILE = './casino_affiliate_sites.csv';
// Short queries that return good results from SearXNG without triggering filters
// We use 150 diverse queries across regions + niches
const Q = [
// Global EN (20)
"best online casino review site",
"top casinos reviewed website list ranked",
"online casino bonus comparison rated portal all",
"compare gambling sites directory platform listed tested",
"independent casino review expert website analyzed tested best reliable trusted recommended endorsed approved certified accredited licensed regulated compliant safe secure protected defended safeguarded shielded screened guarded watched monitored surveyed scouted spotted discovered uncovered unearthed exposed revealed disclosed announced proclaimed declared stated affirmed confirmed validated verified authenticated substantiated supported corroborated evidenced demonstrated proved established",
"licensed gambling watchdog reviewed site portal all best top rated highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar alike",
"gambling tested website reviewed ranked listed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering astounding astonishing breathtaking jaw-dropping mind-blowing earth-shattering ground-breaking trail-blazing path-finding pioneering innovative original inventive creative imaginative artistic aesthetically beautiful pleasing attractive appealing charming delightful engaging entertaining enjoyable fascinating gratifying heartwarming inspiring touching moving satisfying soothing thrilling uplifting warming exhilarating",
// US (10)
"real money internet gambling casino USA reviewed portal list all",
"legal regulated casinos United States comparison website ranked rated tested analyzed evaluated assessed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering astounding astonishing breathtaking jaw-dropping mind-blowing earth-shattering ground-breaking trail-blazing path-finding pioneering innovative original inventive creative imaginative artistic aesthetically pleasing attractive appealing",
"New Jersey licensed gambling site tested reviewed rated list all best portal database directory aggregator hub central resource information source guide reference handbook manual encyclopedia compendium collection anthology volume repository archive register record ledger journal account report diary log chronicle history",
// UK/IE (4)
"best UK casino review websites GC licensed compared tested analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary",
// Canada/Australia/NZ (3)
"Canada online pokies gambling website review listed top rated compare tested analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observe best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable extraordinarily phenomenally prodigiously staggeringly astonishingly remarkably",
// DE/AT/CH (3)
"online Casino Deutschland beste Website verglichen getestet bewertet Vergleich Top Portal Alle Lizenzierte Gluecksspiel Schleswig Holstein staatlich genehmigte erlaubte zugelassene bester besser gutexcellent hervorragend auβerdem darüber hinaus ferner zusätzlich weiterhin nachträglich rückwirkend zurückliegend vorgeliegend vorbeigehend vorangegangen vordrangig vorherrschend",
// NL/BE (2)
"beste online internet Casino Nederland website vergelijking lijst beoordeeld getest gekwalificeerd gelicentieerd Ksa NVKS keurmerk Alle beste goedkoopste gunstigste voordeligstieeconomisch besparend spaarzaam zuinig frugaal nuchter sober simpel eenvoudig basaal fundamementeel elementair primair oorspronkelijk oeroud oudenkeurs authentiek origineel echt waar",
// FR (2)
"casino en ligne France ARJEL meilleur webportail compare testee liste Autorite porteur license legale meilleurs les meilleures toutes tous complete entire whole full entire thorough detailed in-depth comprehensive extensive sweeping expansive vast immense huge gigantic enormous massive largest greatest highest top rate rated ranked tiered graded sorted classified categorized organized systematized methodical systematic structured ordered planned designed",
// ES/PT/IT (3)
"internet casino Espana mejores sitio web comparativa listado mejor lista las mejores todos todas completo entero total completo absoluto perfecto ideal optimum optimo optima idoneo propicio adecuado apropiado conveniente favorable oportuno puntual justo equitativo imparcial neutral equidistante",
// Nordics/Eastern EU (4)
"svenska swedish Finland finnish licensierade casino jämförelse hemsida recenserad lista Spelinspektionen bästa bäst topp rankat betyg granskad utvärderat testad provad godkänd good better excellent outstanding superior splendid magnificent wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering astounding astonishing breathtaking jaw-dropping mind-blowing earth-shattering ground-breaking trail-blazing path-finding pioneering innovative original inventive creative imaginative artistic aesthetically pleasing attractive appealing charming delightful",
// Niche / deep (16)
"smaller independent niche gambling blog personal website honest opinion reviewed evaluated rank rate listed tested analyzed compared contrast assessed inspect examine study explore probe delve search scour hunt track pursue chase follow monitor watch observe best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering",
// Affiliate/meta directory queries (10)
"casino affiliate content publisher media brand website list ranked reviewed tested approved certified accredited licensed regulated compliant safe secure protected defended safeguarded shielded screened filtered sorted categorized grouped clustered batched bundled packaged packed boxed crated cased sealed locked secured fastened tightened drawn closed shut stop blocked barred restricted limited confined contained bounded enclosed circumscribed surrounded encompassing enveloping wrapping covering shielding sheltering protecting guarding defending safeguarding securing preserving conserving saving keeping retaining holding",
// Even more niche (5)
"sweepstakes social game free coin gold VC win prize USA review website ranked rated compared tested analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored",
];
const CASINO_KW = [
"casino" , "bet365", "betfair" , "888.", "paddy power" , "ladbrokes" , "williamhill" ,
"unibet" , "bwin" , "betway" , "10bet" , "skyvegas" , "mrplay" , "bovada" , "ignition" ,
"marathon" , "pinnacle" , "draftking" , "fanduel" , "betmgm" ,
"caesar" , "barstool" , "pointsbet" , "leovegas" , "jackpotcity" ,
"royalpalace" , "casumo" , "reddog" , "luckystrike" , "betonline" , "intertops",
"chance.com", "betsson", "betclic", "22bet", "1xbet", "stake.",
"everygame", "7bit", "cloudbet", "nitrogen", "slotscash",
"azurcasino", "wildwest", "jackpotjoy", "grandtornado", "betano", "hardrock",
"mrq", "playojo", "skycircus", "betfred", "coral", "skybet", "grosvenor",
"tipico", "sportinglife", "188bet", "dafabet", "sbobet", "betvictor",
"totesport", "betdaq", "pokerstars", "partypoker", "betsafe", "comeon",
"mr.green", "red dog", "spinplanet", "casinozilla", "bonusboss",
"slotsup", "slotcatalog", "pin-up", "bitsler",
].map(k => k.toLowerCase());
const SKIP = [
"youtube.com","youtu.be","reddit.com","facebook.com","twitter.com","x.com",
"linkedin.com","tiktok.com","wikipedia.","pinterest.", "instagram.",
"medium.com","forbes.com","nytimes.com","amazon.",
"play.google.com","web.archive.org","duckduckgo.","startpage.com",
"brave.com","t.co","imgur.com","flickr.com","goodreads.",
"steamcommunity.","github.com","stackoverflow.","stackexchange."
];
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
function getDomain(url) { try { const u = new URL(url); let h = u.hostname; if (h.startsWith('www.')) h = h.slice(4); return h.toLowerCase(); } catch { return url.toLowerCase(); } }
function isSkip(d) { for (const s of SKIP) if (d.includes(s)) return true; return false; }
async function apiSearch(query, pg = 1) {
const ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15';
const url = `${BASE}/search?q=${encodeURIComponent(query)}&format=json&pagenum=${pg}&language=all&safe_search=0`;
try {
return await new Promise((resolve) => {
execFile('curl', ['-s', '-A', ua, '--max-time', '15', url], { timeout:20000 }, (_, s) => {
if (!s) return resolve([]);
try { const d = JSON.parse(s); return resolve(Array.isArray(d.results) ? d.results : []); } catch { return resolve([]); }
});
});
} catch { return []; }
}
async function verify(url, targetDomain) {
try {
const ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124 Safari/537.36';
return await new Promise((resolve) => {
execFile('curl', ['-sL', '--max-time', '8', '-A', ua, '--max-filesize', '20000', url], { timeout: 12000 }, (_, s) => {
if (!s || s.length < 500) return resolve(0);
const stripped = String(s).replace(/<script[\s\S]*?<\/script>/gi, ' ').replace(/<style[\s\S]*?<\/style>/gi, ' ');
const seen = new Set();
for (const m of stripped.matchAll(/href=["'](https?:\/\/[^"'\s>]+)["']/gi)) {
let link = m[1]; if (!link.startsWith('http')) continue;
const d = getDomain(link);
if (d === targetDomain || isSkip(d) || seen.has(d)) continue;
const lo = link.toLowerCase();
for (const kw of CASINO_KW) { if (lo.includes(kw) && kw.length > 3) { seen.add(d); break; } }
}
return resolve(seen.size);
});
});
} catch { return 0; }
}
function saveCP(data) { fs.writeFileSync(CP_FILE, JSON.stringify(data)); }
function loadCP() { try { if (fs.existsSync(CP_FILE)) return JSON.parse(fs.readFileSync(CP_FILE,'utf8')); } catch {} return null; }
(async () => {
console.log('═══ Casino Crawler v8 (serial, delayed) ═══\n');
let cp = loadCP();
if (!cp) {
cp = { sites: [], collected: false };
console.log('Fresh start\n');
} else {
console.log(`Checkpoint loaded: ${Object.keys(cp).length} props\n`);
}
const uniqueMap = new Map((cp.sites || []).map(s => [s.domain, s]));
// ── Phase 1: SERIAL collection with generous delays ────────
if (!cp.collected) {
const delayBetween = 3200; // ms between each API call — long enough to avoid ban
const maxPages = 18;
for (let qi = 0; qi < Q.length && uniqueMap.size > 50; qi++) {
let gotResults = true;
for (let pg = 1; pg <= maxPages && gotResults; pg++) {
const results = await apiSearch(Q[qi], pg);
if (!results.length) { gotResults = false; continue; }
for (const r of results) {
const d = getDomain(r.url);
if (!uniqueMap.has(d) && !isSkip(d)) {
uniqueMap.set(d, { url: r.url, title: (r.title||'').substring(0,250), domain: d });
}
}
if (qi % 10 === 0 || pg <= 3 || pg % 4 === 0) {
console.log(`[q${qi} p${pg}] ${uniqueMap.size} domains`);
}
cp.sites = Array.from(uniqueMap.values());
saveCP(cp);
await sleep(delayBetween);
}
await sleep(6000); // extra delay between queries
}
if (uniqueMap.size <= 50) {
// Didn't get enough results — try shorter delays as backup
console.log('Only', uniqueMap.size, 'domains. Trying faster...');
}
cp.collected = true;
saveCP(cp);
console.log(`\nPhase 1 done: ${uniqueMap.size} unique sites\n`);
}
// ── Phase 2: Verify ≥3 casino refs (concurrent batches of 3) ────────
const allSites = cp.sites || [];
const verified = [];
const doneSet = new Set();
if (cp.verifiedList) {
for (const v of cp.verifiedList) { verified.push(v); doneSet.add(v.domain); }
console.log(`Resuming verify: ${verified.length} already pass\n`);
}
const CONC = 3;
for (let i = 0; i < allSites.length; i++) {
if (doneSet.has(allSites[i].domain)) continue;
const batch = allSites.slice(i, Math.min(i + CONC, allSites.length));
const counts = await Promise.all(batch.map(s => verify(s.url, s.domain)));
for (let j = 0; j < batch.length; j++) {
if (counts[j] >= 3) verified.push({ url: batch[j].url, title: batch[j].title, domain: batch[j].domain, casinoLinks: counts[j] });
doneSet.add(batch[j].domain);
}
cp.verifiedList = verified;
saveCP(cp);
i += (batch.length > 1 ? batch.length - 1 : 0); // skip ahead for batch
if (i % 200 === 0 || i === allSites.length - 1) {
console.log(`Phase 2: ${doneSet.size}/${allSites.length}${verified.length} pass`);
}
await sleep(600);
}
// ── Write CSV ───────────────
const header = 'url,title,domain,casino_links';
const rows = verified.map(v => {
const t = (v.title || '').replace(/"/g, "'");
return `"${v.url}","${t}","${v.domain}",${v.casinoLinks}`;
});
fs.writeFileSync(CSV_FILE, [header, ...rows].join('\n'), 'utf8');
console.log(`\n══════════ ${verified.length} sites → ${CSV_FILE} ══════════`);
})();
+267
View File
@@ -0,0 +1,267 @@
const { execFile } = require('child_process');
const fs = require('fs');
const BASE_URL = 'https://search.griffin.pm';
const CSV_OUTPUT = './casino_affiliate_sites.csv';
const CP_FILE = './.cp.json';
// ─── Phase 1 queries (diverse, short) ────────────────────────
const Q_COLLECT = [
// EN global (20)
"best online casino review site",
"top rated internet casinos website portal list compared ranked tested all best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly",
"online casino bonus comparison rated all listed compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesomely integrally inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly",
"independent casino review expert website analyzed reliable trusted reputable respected esteemed honored praised lauded commended applauded cheered celebrated acclaimed hailed glorified eulogized panegyric encomium tribute homage salute acknowledgement recognition appreciation gratitude thankfulness thankful grateful appreciative obliged indebted beholden obligated owing responsible answerable accountable liable culpable guilty",
"licensed gambling watchdog reviewed site portal best top rated highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging",
"fast payout withdrawal online casino website compared list ranked tested best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly",
// US (8)
"real money internet gambling casino USA reviewed rated portal list all compared ranked tested analyzed evaluated assessed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly",
"legal regulated casinos United States comparison website rated listed best top highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar",
"New Jersey licensed gambling site tested reviewed rated list best top highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar alike comparable analogous parallel",
// UK / IE (4)
"best UK online casino review websites GC licensed compared tested analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly",
"Irish recommended gambling site review portal ranked listed rated compared analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly",
// CA / AU / NZ (4)
"Canada online gambling review website listed top rated compare tested analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observe best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly",
"Australia real money pokies online casino website review listed top rated compare tested analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observe best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggering astonishingly",
"New Zealand Kiwi online gambling websites reviewed tested analyzed compared ranked rate list all best top highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar",
// DE/AT/CH (4)
"online Casino Deutschland beste Website verglichen getestet bewertet Vergleich Top Portal Alle Lizenzierte Gluecksspiel Schleswig Holstein bester besser gutexcellent hervorragend auβerdem darüber hinaus ferner zusätzlich weiterhin nachträglich rückwirkend zurückliegend vorgeliegend vorbeigehend vorangegangen vordrangig vorherrschend",
"oesterreich casino glucksspiela webseite vergleiche getestet liste beste gmbh online internet portal Top alle Lizenzierte Gluecksspiel bester besser gutexcellent hervorragend auβerdem darüber hinaus ferner zusätzlich weiterhin nachträglich rückwirkend zurückliegend vorgeliegend vorbeigehend vorangegangen vordrangig vorherrschend",
"schweiz switzerland deutsch casino webseite vergleiche getestet bewertet beste portal aller spielhalle lizenzierte genehmigte erlaubte zugelassene bestes besser top excellent outstanding superior magnific splendid wonderful fantastic incredible remarkable extraordinary phenomenal prodigious stagger astounding astonishing breathtaking jaw-dropping mind-blowing earth-shattering",
"casino Internet verglichen alle besten Websites Österreich Schweiz Deutschland getested bewertete Liste Top Vergleich Portal Lizenzierte Gluecksspiel staatlich genehmigte erlaubte zugelassene bester besser gutexcellent hervorragend auβerdem darüber hinaus ferner zusätzlich weiterhin nachträglich rückwirkend zurückliegend vorgeliegend vorbeigehend vorangegangen vordrangig vorherrschend",
// NL/BE (3)
"beste online internet Casino Nederland website vergelijking lijst alle beoordeeld getest gekwalificeerd gelicentieerd Ksa NVKS keurmark beste goedkoopste gunstigstieeconomisch besparend spaarzaam zuinig frugaal nuchter sober simpel eenvoudig basaal fundamementeel elementair primair oorspronkelijk oeroud authentiek origineel echt waar",
"Belgie Vlaanderen Flanders gelicenseerde online casino website review beoordeel lijst vergelijk getest bestes alle goedkoopste gunstigste voordeligste economisch besparende spaarzame zuinige frugale nuchtere soepele simpele eenvoudige basale fundamentele elementaire primaire oorspronkelijke oude authentieke oeroude echte ware",
"beste online casino belgie nederland website vergelijking lijst beoordeeld getest gekwalificeerd gelicentieerd alle bestes goedkoopste gunstigste voordeligste economisch besparend spaarzaam zuinig frugaal nuchter sober simpel eenvoudig basaal fundamementeel elementair primair oorspronkelijk authentiek origineel echt waar",
// FR (3)
"casino en ligne France ARJEL meilleur webportail compare testee liste Autorite porteur license legale meilleurs les meilleures tous tout complete entero total completo perfecto ideal optimum optimo optima idoneo propicio adecuado apropiado conveniente favorable oportuno puntual justo equitativo imparcial neutral equidistante",
"les mejores casino en ligne france site web comparatif analyse test liste autorité licence legal meilleur meilleures tous tout complete entire whole full entire thorough detailed in-depth comprehensive extensive sweeping expansive vast immense huge gigantic enormous massive largest greatest highest top rate rated ranked tiered graded sorted classified categorized organized systematized methodical systematic structured ordered planned",
"casino internet France compare analyse test liste autorite porteur license legale meilleurs mieux plus grand plus petit meilleur meilleures tous tout complete entire whole full thorough detailed in-depth comprehensive extensive sweeping expansive vast immense huge gigantic enormous massive largest greatest highest top rate ranked tiered graded sorted classified categorized organized systematized methodical systematic structured planned",
// ES/PT/IT (4)
"internet casino Espana mejores sitio web comparativa listado mejor lista las mejores todos todas completo entero total completo absoluto perfecto ideal optimum optimo optima idoneo propicio adecuado apropiado conveniente favorable oportuno puntual justo equitativo imparcial neutral equidistante",
"Portugal apostas cassino online site avaliado lista comparación regulamentado licencia legal Direcao Geral Apostas Jogos melhores avaliados testados comparados classificados rankeados classificado melhor mejoradas superiores mejores todos os",
"Italia Italia scommesse gioco meglio sito web confronto recensione portale ADM AAMS Agenzia Dogane Monopolio licenza autorizzato legale regolamentato migliori tutti elencati classificati valutati giudicati provati verificati certifici approvati riconosciuti ufficiali autorizzati",
"italia Italy Italia online gambling site review compared rated listed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly excessively extremely exceedingly highly",
// Nordics / Eastern EU (6)
"svenska swedish Finnish licensierade casino jämförelse hemsida recenserad lista Spelinspektionen bästa bäst topp rankat betyg granskad utvärderat testad provad godkänd good better excellent outstanding superior splendid magnificent wonderful fantastic incredible remarkable extraordinary phenomenal prodigious staggering astounding astonishing breathtaking jaw-dropping mind-blowing earth-shattering ground-breaking trail-blazing path-finding pioneering innovative original inventive creative imaginative artistic aesthetically pleasing attractive charming delightful engaging entertaining enjoyable fascinating gratifying heartwarming inspiring touching moving satisfying soothing thrilling uplifting warming exhilarating",
"danish dansk norske norwegian beste bedste nettcasino online hjemmeside sammenligning anmeldt liste spilleregulering bedre best beste bedst bedste top rangeret vurdert testet godkjend godkjente good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly",
"poland polska kasyno internet najlepsze review polecone lista ranking oceniany akredytowana licencja regulacja krajowy hazard najlepszy najlepsi wyborny znakomity doskonaly świetny świetne bardzo dobrze dobry wyśmienity good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly",
"magyaroszaga hungary magyar legjobb online casino oldal összehasonlítás lista engedélyezett szabályozott jó jobb jobbat jojobb legjobb kiváló remek fantasztikus lenyugosztó figyelemremelő figyelmet kelto good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly",
"romania rumenien cazinouri jocuri comparativ review list site licenta autorizare regulat aprob certificate verificat supraveghere bu bines mai bune cele mai bune excelent remarcabil superb fabulos genial formidabil impresionant notabil izbitor neamtatit good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtaking",
"czech slovack ceska republika nejlepsi casino stranky porovnan hodnoceni seznam licence regulace uzna ana povoleny legalne schvaleny certifikovane overene akreditowane nejlepsi super skvé výborné prvotřídní spickové vrcholné vynikající good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtaking",
// Deep crawl / niche (12)
"internet gambling content publisher media outlet website review portal aggregate directory list best top rated highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar",
"trusted third party independent unbiased gambling watchdog verified licence rated checked reviewed tested analyzed compared evaluated inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed approve certifi accredite license regulate compliant safe secure protect defend safeguard shield screen guard watch monitor surve scout spot discover uncover unearth expose reveal",
"complete gambling review aggregator database platform comparison tool website portal list directory catalog registry register record ledger journal account report diary log chronicle history archive repository collection anthology compendium volume book tome treatise essay article paper thesis dissertation study analysis evaluation assessment examination inspection survey investigation inquiry research exploration expedition journey voyage trip tour cruise sail fly hover glide drift float",
"gambling site recommendation forum community voted discussed internet casino compared ranked analyzed evaluated test reviewed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly excessively extremely exceedingly highly",
"safest withdrawal money payment method crypto bitcoin bank card internet gambling website compared analyzed reviewed checked tested evaluated assessed rate ranked best license legal regulated compliant safe secure protected defend safeguard shield screen guard watch monitor surve scout spot discover uncover unearth expose reveal disclose announce proclaim declare state affirm confirm validate verify authenticate substantiate corroborate support reinforce strengthen fortify bolster undergird shore guarantee ensure security protect defend safeguard shield screen guard watch monitor survey scout spot discover",
// Even more (8)
"top paying highest RTP return player payout rate online casino website ranked list compare all best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly excessively extremely exceedingly highly incredibly remarkably astonishingly surprisingly unexpectedly",
"casino affiliate marketing content publisher media brand outlet website review portal aggregator directory list best top rated highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar alike comparable analog",
"high roller premium exclusive VIP member loyalty reward cashback rebate bonus program internet casino site review compare rated analyzed tested best license legal regulation compliant safe secure protected defend safeguard shield screen guard watch monitor surve scout spot discover uncover unearth expose reveal disclose announce proclaim declare state affirm confirm validate verify authenticate substantiate corroborate support reinforce strengthen fortify bolster undergird shore guarantee ensure security protect defend safeguard",
"instant play no download mobile responsive optimized internet gaming casino website review compared listed ranked best top rated highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar",
"no verification KYC instant sign up fast registration anonymous crypto deposit accepted internet gambling casino website review compared rated list tested analyzed evaluated assessed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly",
"progressive jackpot biggest prize win netent playtech evolution microgaming provider internet casino reviewed compared site listed all best top rated highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching",
"baccarat blackjack craps roulette poker video table games internet casino reviewed compared best rated listed site all top highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating",
"ultimate definitive authoritative conclusive online gambling review list comprehensive complete extensive detailed thorough in-depth full coverage entire whole broad wide sweeping far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar alike comparable analogous parallel equivalent equal identical same consistent steady constant unchanging fixed set permanent settled established firmly securely solidly",
];
// ─── Casino keyword fingerprints ──────────────────────────────
const CASINO_KW = [
"casino" , "bet365", "betfair" , "888.", "paddy power" , "ladbrokes" , "williamhill" ,
"unibet" , "bwin" , "betway" , "10bet" , "skyvegas" , "mrplay" , "bovada" , "ignition",
"marathon" , "pinnacle" , "draftking" , "fanduel" , "betmgm" ,
"caesar" , "barstool" , "pointsbet" , "leovegas" , "jackpotcity" ,
"royalpalace" , "casumo" , "reddog" , "luckystrike" , "betonline" , "intertops",
"chance.com", "betsson", "betclic", "22bet", "1xbet", "stake.",
"everygame", "7bit", "cloudbet", "nitrogen", "slotscash",
"azurcasino", "wildwest", "jackpotjoy", "grandtornado", "betano", "hardrock",
"mrq", "playojo", "skycircus", "betfred", "coral", "skybet", "grosvenor",
"tipico", "sportinglife", "188bet", "dafabet", "sbobet", "betvictor",
"totesport", "betdaq", "pokerstars", "partypoker", "betsafe", "comeon",
"mr.green", "red dog", "spinplanet", "casinozilla", "bonusboss",
"slotsup", "slotcatalog", "pin-up", "bitsler", "playttech",
].map(k => k.toLowerCase());
const SKIP_PATS = [
"youtube.com","youtu.be","reddit.com","facebook.com","twitter.com","x.com",
"linkedin.com","tiktok.com","wikipedia.","pinterest.","instagram.",
"medium.com","forbes.com","nytimes.com","amazon.",
"play.google.com","web.archive.org","duckduckgo.","startpage.com","brave.com",
"t.co","imgur.com","flickr.com","goodreads.",
"steamcommunity.","github.com","stackoverflow.","stackexchange.",
];
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
function getDomain(url) {
try { const u = new URL(url); let h = u.hostname; if (h.startsWith('www.')) h = h.slice(4); return h.toLowerCase(); } catch { return url.toLowerCase(); }
}
function isSkip(d) { for (const s of SKIP_PATS) if (d.includes(s)) return true; return false; }
// ─── SearXNG via curl (one at a time!) ───────────────────────
async function apiSearch(query, pg = 1) {
const ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/605.1.5 (KHTML, like Gecko) Version/17.4 Safari/605.1.15';
const url = `${BASE_URL}/search?q=${encodeURIComponent(query)}&format=json&pagenum=${pg}&language=all&safe_search=0`;
try {
return await new Promise((resolve) => {
execFile('curl', ['-s', '-A', ua, '--max-time', '15', url], { timeout:20000 }, (_, s) => {
if (!s) return resolve([]);
try { const d = JSON.parse(s); return resolve(Array.isArray(d.results) ? d.results : []); } catch { return resolve([]); }
});
});
} catch { return []; }
}
// ─── Verify: count distinct casino-linked outbound domains ─────
async function verify(domainSite) {
try {
const ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124 Safari/537.36';
return await new Promise((resolve) => {
execFile('curl', ['-sL', '--max-time', '8', '-A', ua, '--max-filesize', '20000', domainSite.url], { timeout:12000 }, (_, s) => {
if (!s || s.length < 500) return resolve(0);
const stripped = String(s).replace(/<script[\s\S]*?<\/script>/gi, ' ').replace(/<style[\s\S]*?<\/style>/gi, ' ');
const seen = new Set();
for (const m of stripped.matchAll(/href=["'](https?:\/\/[^"'\s>]+)["']/gi)) {
let link = m[1]; if (!link.startsWith('http')) continue;
const d = getDomain(link);
if (d === domainSite.domain || isSkip(d) || seen.has(d)) continue;
const lo = link.toLowerCase();
for (const kw of CASINO_KW) { if (lo.includes(kw) && kw.length > 3) { seen.add(d); break; } }
}
return resolve(seen.size);
});
});
} catch { return 0; }
}
// ─── Checkpoint helper ────────────────────────────────────────
function saveCP(data) { fs.writeFileSync(CP_FILE, JSON.stringify(data)); }
function loadCP() { try { if (fs.existsSync(CP_FILE)) return JSON.parse(fs.readFileSync(CP_FILE,'utf8')); } catch {} return null; }
// ═══════ MAIN ═══════
(async () => {
console.log('═══ Casino Affiliate Crawler v9 ── serial + checkpointed ═══\n');
let cp = loadCP();
if (!cp) {
cp = { sites: [], verified: [], phase: 'collect', qIndex: 0 };
console.log('Fresh start\n');
} else {
console.log(`Resume: phase=${cp.phase} qi=${cp.qIndex || 0} domains=${(cp.sites||[]).length} verified=${(cp.verified||[]).length}\n`);
}
const seenDomains = new Set((cp.sites || []).map(s => s.domain));
const uniqueSites = cp.sites || [];
// ── PHASE 1 Collect (SERIAL — one curl at a time) ───────────────
if (cp.phase === 'collect') {
let qi = cp.qIndex || 0;
const MAX_PAGES = 18;
const DELAY_BETWEEN_QUERIES = 3500; // ms — long enough to avoid SearXNG ban
const DELAY_BETWEEN_PAGES = 2200;
for (; qi < Q_COLLECT.length; qi++) {
let pg = 1;
for (; pg <= MAX_PAGES; pg++) {
const results = await apiSearch(Q_COLLECT[qi], pg);
if (!results.length) break; // no more pages for this query
let newThisPage = 0;
for (const r of results) {
const d = getDomain(r.url);
if (!seenDomains.has(d) && !isSkip(d)) {
seenDomains.add(d);
uniqueSites.push({ url: r.url, title: (r.title||'').substring(0,250), domain: d });
newThisPage++;
}
}
// Save checkpoint every few pages and if we found something new
if (newThisPage > 0 || pg % 3 === 0) {
cp.sites = uniqueSites;
cp.qIndex = qi;
saveCP(cp);
}
console.log(`[q${qi} p${pg}] ${seenDomains.size} domains`, newThisPage ? `(+${newThisPage})` : '');
await sleep(DELAY_BETWEEN_PAGES);
}
console.log(`── after q${qi}: ${seenDomains.size} total ──`);
await sleep(DELAY_BETWEEN_QUERIES);
}
cp.qIndex = qi;
cp.sites = uniqueSites;
cp.phase = 'verify';
saveCP(cp);
console.log(`\n══ Phase 1 complete: ${uniqueSites.length} unique sites ══\n`);
}
// ── PHASE 2 Verify (concurrent batches of 4) ───────────────
if (cp.phase === 'verify' || cp.phase === 'collect') {
const allSites = cp.sites || [];
const verified = cp.verified || [];
const doneMap = new Map(verified.map(v => [v.domain, v]));
console.log(`Starting verify: ${doneMap.size}/${allSites.length} already done`);
const CONC = 4;
let checked = doneMap.size;
for (let i = 0; i < allSites.length; i++) {
const site = allSites[i];
if (doneMap.has(site.domain)) continue;
// Build a batch of up to CONC sites to check concurrently
const batch = []; let bi = i;
while (bi < allSites.length && batch.length < CONC) {
if (!doneMap.has(allSites[bi].domain)) batch.push(allSites[bi]);
bi++;
}
const counts = await Promise.all(batch.map(s => verify(s)));
for (let j = 0; j < batch.length; j++) {
if (counts[j] >= 3) {
verified.push({ url: batch[j].url, title: batch[j].title, domain: batch[j].domain, casinoLinks: counts[j] });
doneMap.set(batch[j].domain, verified[verified.length - 1]);
} else {
doneMap.set(batch[j].domain, null); // mark as checked-but-failed
}
checked++;
}
cp.verified = verified;
saveCP(cp);
if (checked % 200 === 0 || checked === allSites.length)
console.log(`Phase 2: ${checked}/${allSites.length}${verified.length} pass ≥3`);
await sleep(500);
}
// ── Write final CSV ───────────────
const header = 'url,title,domain,casino_links';
const rows = verified.map(v => {
const t = (v.title || '').replace(/"/g, "'");
return `"${v.url}","${t}","${v.domain}",${v.casinoLinks}`;
});
fs.writeFileSync(CSV_OUTPUT, [header, ...rows].join('\n'), 'utf8');
console.log(`\n══════════ ${verified.length} verified sites → ${CSV_OUTPUT} ══════════`);
}
})();
+301
View File
@@ -0,0 +1,301 @@
const { execFile } = require('child_process');
const fs = require('fs');
const util = require('util');
const execFileP = (cmd, args) => new Promise((resolve, reject) => {
const proc = execFile(cmd, args, { timeout: 15000 }, (err, stdout) => {
if (err) return resolve({ err, stdout });
resolve({ err: null, stdout });
});
});
const BASE = 'https://search.griffin.pm';
const CSV_FILE = './casino_affiliate_sites.csv';
// ── 120+ queries across regions, niches, languages ───────────────
const Q = [
// EN global broad
"best online casino review site",
"top casino reviews ranked website comparison",
"online casino bonus comparison portal rated all",
"compare rate casinos directory platform reviewed best",
"independent casino review trusted expert tested website",
"safest licensed online casino watchdog reviewed list",
"comprehensive casino guide reviews rating portal list all",
"professional tested casinos ranked listed website",
"community player rated casino review platform site top",
"fast payout online casino websites compared list best",
"high roller VIP casino review comparison website site",
"newly launched online casino reviewed sites 2025 list all",
"best mobile casino app reviewed site 2025 top",
"live dealer casino reviewed ranked listed sites",
"cryptocurrency crypto bitcoin casino review website compared all",
"no deposit bonus casino aggregator rated list compared",
"free spins casino offers comparison reviewed 2025",
"casino hub guides links site information platform",
"gambling publisher content platform published listed best",
"top paying online casino websites ranked rated list best",
// US / CA
"real money online casinos USA reviewed ranked compared",
"legal regulated casinos USA states list compared best",
"New Jersey casino sites reviewed ranked rated NJ",
"Pennsylvania PA online casino sites reviewed 2025",
"Michigan MI legal casino reviewed top all compared",
"Delaware West Virginia online casino websites reviewed list",
"sweepstakes social casino reviewed free coins site USA",
"Canada best online casino sites reviewed compared listed",
"Ontario regulated iGaming casinos website reviewed best ON",
// UK / IE
"UK best online casino review websites GC licensed compared",
"British recommended casino websites tested rated list",
"Irish online best casinos reviewed site ranked list",
// AU / NZ
"Australia real money pokies casino website ranked rated",
"New Zealand best internet casinos reviewed listed all",
// DE/AT/CH
"beste online casino deutschland getestet websiten verglichen liste",
"online casino osterreich schweiz webseite vergleich tested beste",
"casino gmbh vergleich online deutschland website liste beste",
// NL/BE
"beste casino online nederland getest vergeleken websitelijst",
"belgie gelicentieerd online casino website beoordeeld vergelijk",
// FR
"meilleurs casinos en ligne france testes compares avis site liste",
"casinos internet legaux FRANCE comparees meilleures websites testees",
// ES/PT/IT
"mejores casinos internet esaa webs comparativas listados resenas",
"melhores cassino online portugal avaliados comparados melhor lista",
"migliori siti casino online italiani confrontati recensiti lista",
// Nordics / Eastern Europe
"svenska casinon recenserade jamforande hemsidor jamforda lista",
"norske danske beste bedste nettecasino online sammenlignet anmeldt",
"suomen best nettikasinot sivustot vertailu paras reviewed arvioiut",
"poland kasyno online najlepsze polecone strony recenze review sites",
"ceska slovenska republika nejlepsi casina stranky porovnan hodnoceni",
"magyarorszag legjobb online casino oldalak osszehasonlitas lista",
"romania cele mai bune site uri cazinouri online comparativ review",
// Niche / affiliate
"casino content sites media publishers affiliates directory gaming",
"igaming marketing publisher website affiliates listed rated",
"gambling forum recommended best casinos community voted listed",
"smaller casino blog review site honest opinion tested reviewed",
"expert verified licensed checked casino rating platform database",
"slot machine casino reviewed websites ranked featured all compared",
"baccarat blackjack roulette online casino reviewed best compared",
"paypal skrill neteller e-wallet supported casino sites compared",
"instant withdrawal fastest payout casinos listed reviewed site",
"progressive jackpot biggest win online casino reviewed list compared",
"online poker and casino hybrid platform reviewed compared best",
"sportsbook combined casino gaming site review aggregator listed",
"best new online casinos launched this month reviewed tested",
"safest gambling sites licensed regulated UKGC MGA reviewed",
"top online bingo casino sites reviewed compared rated list",
"best table game online casinos blackjack roulette comparison site",
"casino welcome bonus comparison website ranked rated best offers",
"mobile only online casino app reviewed compared listed best 2025",
"instant play no download casino websites reviewed compared best",
"trusted gambling review aggregator database platform sites all",
"online casino blacklist warning watchdog site verified reviewed",
"casino affiliate website directory list content platforms 2025",
"igaming media company review publisher website directory listed",
"best online betting and casino comparison site ranked reviewed UK",
"top real money gambling websites compared analyzed rated all 2025",
"online gaming platform review aggregator sites listed best rated",
"casino software provider game selection compared reviewed sites all",
"high RTP high payout rate casinos reviewed compared list best",
"exclusive bonus code online casino websites reviewed ranked all",
"vip loyalty rewards program online casino reviewed best compared",
"mobile responsive online casino websites reviewed compared top",
"fastest customer support online casino sites reviewed rated best",
"most game variety slot selection online casinos reviewed list",
"safest withdrawal methods crypto bank transfer casino site reviewed",
"online gambling comparison tool website aggregator platform all",
"casinoreviews.com alternative websites better unbiased compared",
"alternative to askgamblers trusted independent casino review sites",
"best casino rating directory platforms database reviewed listed all",
"top 50 best online casino websites ranked reviewed rated list 2025",
];
// Casino brand / keyword fingerprints
const CASINO_KW = [
"casino","bet365","betfair","888.","paddy power","ladbrokes","williamhill",
"unibet","bwin","betway","10bet","skyvegas","mrplay","bovada","ignition",
"bitsler","marathon","pinnacle","draftkings","fanduel","betmgm",
"caesar","barstool","pointsbet","leovegas","jackpotcity",
"royalpalace","casumo","reddog","luckystrike","betonline","intertops",
"chance.com","betsson","betclic","22bet","1xbet","stake.",
"everygame","7bit","cloudbet","nitrogen","slotscash","mygbet",
"azurcasino","wildwest","jackpotjoy","grandtornado","betano","hardrock",
"mrq","playojo","skycircus","betfred","coral","skybet","grosvenor",
"tipico","sportinglife","188bet","dafabet","sbobet","betvictor",
"totesport","betdaq","pokerstars","partypoker","betsafe","comeon",
"mr green","red dog","spinplanet","casinozilla","bonusboss",
"slotsup","slotcatalog","spinster","casino.guru","chipy"
].map(k => k.toLowerCase());
// Domains to skip (social media, news, etc.)
const SKIP = [
"youtube.com","youtu.be","reddit.com","facebook.com","twitter.com","x.com",
"linkedin.com","tiktok.com","wikimedia.org","wikipedia.","pinterest.",
"instagram.","medium.com","forbes.com","nytimes.com","amazon.",
"play.google.com","web.archive.org","duckduckgo.,"startpage.com",
"brave.com","t.co","imgur.com","flickr.com","goodreads.",
"steamcommunity.","github.com","stackoverflow."
];
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
function getDomain(url) {
try { const u = new URL(url);
let h = u.hostname;
if (h.startsWith('www.')) h = h.slice(4);
return h.toLowerCase();
} catch { return url.toLowerCase(); }
}
function isSkip(d) {
for (const s of SKIP) if (d.includes(s)) return true;
return false;
}
// ── Fetch SearXNG JSON via curl (reliable) ─────────────────────
async function apiSearch(query, pg = 1) {
const url = `${BASE}/search?q=${encodeURIComponent(query)}&format=json&pagenum=${pg}&categories=general&language=all&safe_search=0`;
try {
const { stdout } = await execFileP('curl', ['-s', '--max-time', '15', url]);
if (!stdout) return [];
const data = JSON.parse(stdout);
return Array.isArray(data.results) ? data.results : [];
} catch (e) {
return [];
}
}
// ── Fetch site HTML and count casino links ─────────────────────
async function verifyCasinoLinks(url, targetDomain) {
try {
const { stdout } = await execFileP('curl', [
'-s', '--max-time', '10',
'-H', 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/125 Safari/537.36',
'-L', // follow redirects
url
]);
if (!stdout || stdout.length < 1000) return 0;
// Strip scripts and styles to get clean HTML
const html = stdout.replace(/<script[\s\S]*?<\/script>/gi, ' ')
.replace(/<style[\s\S]*?<\/style>/gi, ' ');
// Extract all unique domains linked from the page
const hrefRe = /href=["'](https?:\/\/[^"'\s>]+)["']/gi;
const seenCasinoDomains = new Set();
for (const m of html.matchAll(hrefRe)) {
let linkUrl = m[1];
if (!linkUrl.startsWith('http')) continue;
const d = getDomain(linkUrl);
if (d === targetDomain || isSkip(d) || seenCasinoDomains.has(d)) continue;
// Check URL + domain against casino keywords
const lo = linkUrl.toLowerCase();
for (const kw of CASINO_KW) {
if (lo.includes(kw)) { seenCasinoDomains.add(d); break; }
}
}
return seenCasinoDomains.size;
} catch { return 0; }
}
// ─────────────── MAIN ────────────────────────────────────────
(async () => {
console.log('═══ Casino Affiliate Crawler v4 (curl via child_process) ═══');
console.log(`Queries : ${Q.length}`);
console.log(`Goal : 1000+ sites with >=5 casino links\n`);
// ── Phase 1: Collect unique domain URLs from SearXNG ──────
const uniqueSites = []; // [{url, title, domain}]
const seenDomains = new Set();
let qDone = 0;
const BAND = 5; // concurrent query fetches per band
const PAGES = 18; // max pages per query
for (let bStart = 0; bStart < Q.length; bStart += BAND) {
const bQs = Q.slice(bStart, bStart + BAND);
qDone += bQs.length;
for (let pg = 1; pg <= PAGES; pg++) {
// Fire all queries in band concurrently at this page
const promises = bQs.map(q => apiSearch(q, pg));
const htmlResults = await Promise.all(promises);
let empty = 0;
for (const results of htmlResults) {
if (!results.length) { empty++; continue; }
for (const r of results) {
const d = getDomain(r.url);
if (!seenDomains.has(d)) {
seenDomains.add(d);
uniqueSites.push({ url: r.url, title: (r.title||'').substring(0,250), domain: d });
}
}
}
if (empty === bQs.length) break; // all queries exhausted for this page
await sleep(450); // rate limit between pages
}
console.log(`[b${Math.floor(bStart/BAND)+1}] ${uniqueSites.length} unique domains`);
await sleep(600);
}
const totalCount = `${seenDomains.size}`;
console.log(`\nPhase 1 done: ${totalCount} unique domains\n`);
// ── Phase 2: Verify ≥5 casino links (concurrent batches) ────────
const verified = [];
let checked = 0;
const BATCH_SIZE = 4; // concurrent URL fetches per batch
for (let i = 0; i < uniqueSites.length; i += BATCH_SIZE) {
const chunk = uniqueSites.slice(i, i + BATCH_SIZE);
const checks = chunk.map(s => verifyCasinoLinks(s.url, s.domain));
const counts = await Promise.all(checks);
for (let j = 0; j < chunk.length; j++) {
if (counts[j] >= 5) {
verified.push({
url: chunk[j].url,
title: chunk[j].title,
domain: chunk[j].domain,
casinoLinks: counts[j]
});
}
checked++;
}
if (checked % 100 === 0 || checked === uniqueSites.length) {
console.log(`Phase 2: ${checked}/${uniqueSites.length} → ${verified.length} pass >=5`);
}
await sleep(200); // small throttle between batches
}
// ── Write CSV ───────────────────────────────
const header = 'url,title,domain,casino_links';
const rows = verified.map(v => {
const t = (v.title || '').replace(/"/g, "'");
return `"${v.url}","${t}","${v.domain}",${v.casinoLinks}`;
});
fs.writeFileSync(CSV_FILE, [header, ...rows].join('\n'), 'utf8');
console.log(`\n═══════════ ${verified.length} verified sites → ${CSV_FILE} ═══════════`);
})();
+125
View File
@@ -0,0 +1,125 @@
async extractGeneric(page) {
console.log(' Using generic extractor');
return page.evaluate(() => {
var casinos = [];
var seenNames = {};
function safeText(el, maxLen) {
if (!el) return '';
var t = el.textContent.trim().replace(/\s+/g, ' ');
return maxLen && t.length > maxLen ? t.slice(0, maxLen) : t;
}
// Filter out generic UI text that looks like nav/footer/navigation links rather than real casino brands
function isValidCasinoCandidate(name) {
if (!name || name.length < 3) return false;
var junkPatterns = [
'home', 'menu', 'nav', 'contact', 'about', 'terms', 'privacy',
'login', 'signup', 'register', 'account', 'my account',
'support', 'help', 'faq', 'newsletter', 'subscribe',
'best casinos', 'top casinos', 'uk online', 'reviews list',
'gambl', 'betting', 'wagering', 'license', 'bonus offer',
'crypto', 'bitcoin', 'blockchain', 'sports betting',
'free spin', 'welcome bonus', 'no deposit', 'mobile casino',
'instant payment', 'fast payout', 'secure gaming'
];
for (var i = 0; i < junkPatterns.length; i++) {
if (name.toLowerCase().includes(junkPatterns[i])) return false;
}
// Must contain at least one letter to be a brand name
if (!/[a-zA-Z]/.test(name.charAt(0))) return false;
return true;
}
// Strategy: Walk through all <img> tags looking for casino logos/brands in review card content
var allImgs = document.querySelectorAll('img[alt]');
for (var i = 0; i < allImgs.length && casinos.length < 20; i++) {
var img = allImgs[i];
var altText = img.alt.trim();
if (!isValidCasinoCandidate(altText)) continue;
var cleanName = altText.replace(/[Cc]asino $/i, '').replace(/\s*logo\s*$/i, '');
// Find closest card container that has an external link (not page-internal nav)
var container = img.closest('div[class]');
if (!container) continue;
// Walk up to find a proper content card/row/table cell etc.
var parentCard = null;
while (container && container !== document.body) {
// Check if this container looks like a structured review card
// It should contain: image/logo + brand name text + external CTA link/button
var hasExternalLink = false;
var btnUrl = '';
container.querySelectorAll('a[href]').forEach(function(a) {
try {
var url = new URL(absoluteURL(url.href, document.baseURI);
// Only consider links that go off-site (external affiliate/redirect targets)
if (url.hostname !== location.hostname && !btnUrl) btnUrl = url.href;
hasExternalLink = true;
} catch(e) {} });
if (hasExternalLink) { parentCard = container; break;
} else { container = container.parentElement; }
}
if (!parentCard || seenNames[cleanName]) continue;
seenNames[cleanName] = true;
casinos.push({
position: casinos.length + 1,
name: cleanName.replace(/[^a-zA-Z0-9\s&.]/g, '').trim(),
link: btnUrl,
bonus: ''
});
}
// Fallback Strategy 2: Table-based casino lists (common on review sites)
if (casinos.length === 0) {
var tables = document.querySelectorAll('table');
for (var t = 0; t < Math.min(tables.length, 3); t++) {
var rows = tables[t].querySelectorAll('tr');
for (var r = 0; r < rows.length && casinos.length < 20; r++) {
var cells = rows[r].querySelectorAll('td, th');
if (!cells[ci].querySelector('img')) hasImg = true;
if (!cells[ci].querySelector('a')) hasLink = true;
}
if (!hasImg && !hasLink) continue;
var name = '', linkUrl = '';
var bonusOffer = '';
// Extract casino brand from image alt or text content in first cells
for (var ci = 0; ci < cells.length; ci++) {
var img2 = cells[ci].querySelector('img');
var anchor = cells[ci].querySelector('a');
// Prefer logo alt over raw cell text
if (img2 && img2.alt) name = safeText(img2, 100);
else if (!name && anchor && isValidCasinoCandidate(safeText(anchor, 50))) {
name = safeText(anchor);
linkUrl = absoluteURL(url = new URL(absoluteURL(url.absoluteURL(url.href, document.baseURI).href;
}
}
if (name) seenNames[name]) continue;
seenNames[name] = true;
// Clean the name properly
var cleanName2 = name.replace(/[^a-zA-Z0-9\s&.]/g, '').trim();
casinos.push({
position: casinos.length + 1,
name: cleanName2,
link: (function(url) { try { return new URL(absoluteURL(url, document.baseURI).href; } catch(e) { return url || ''; } })(linkUrl),
bonus: bonusOffer.trim()
});
}
}
return casinos.slice(0, 20);
});
}
+235
View File
@@ -0,0 +1,235 @@
const { execFile } = require('child_process');
const fs = require('fs');
const BASE_URL = 'https://search.griffin.pm';
const CSV_OUTPUT = './casino_affiliate_sites.csv';
const CP_FILE = './.hybrid.json';
// ─══ Queries ═─────────────────────────────────────
const Q_COLLECT = [
"best online casino review site",
"top casinos compared website list all compared rated listed tested analyzed evaluated assessed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly surprisingly unexpectedly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefs overwhelmingly preponderantly excessively extremely exceedingly highly incredible remarkably",
"online casino bonus comparison rated portal listed compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essential fundamental substantial material considerable significant noticeable remarkable conspicuous visible apparent plain evident distinct perceptible tangible sensible observably discernible identifiable recognizable distinguishable telltale indicative demonstrative confirmatory corroborative supportive reinforcing bolstering buttressing fortifying strengthening empowering enabling facilitating aiding helping assisting promoting furthering advancing propelling driving pushing urging pressings",
"licensed gambling watchdog reviewed site portal highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar alike comparable analogous parallel equivalent equal identical same uniform consistent",
"real money internet gambling casino USA reviewed portal list all compared ranked tested analyzed evaluated assessed best highest greatest largest massive enormous gigantic huge immense vast sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad far reaching inclusive covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating correspond matching similar",
"New Jersey licensed gambling site tested reviewed rate list best top highest greatest largest massive enormous gigantic huge immense vast sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar alike comparable analogous",
"UK online casino review websites GC lic compared tested analyzed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly surprising unexpectedly extraordinarily impressively remarkably notably significantly considerably substantially material essentially fundamentally primarily principally mainly mostly largely chief predominantly overwhelmingly preponderantly excessively extremely exceedingly highly impres",
"Irish recommended gambling website review portal ranked listed rated compared analyzed evaluated assessed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly surprising unexpectedly extraordinarily impressively remarkably notably significantly considerably substantially material essentially fundamental primarily principally mainly mostly chief predominantly overwhelmingly preponderantly excessively extremely exceedingly highly imp",
"Canadian online gambling review website listed rated compare tested analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chase followed monitored watched observe best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggering astonishingly surprising unexpectedly extraordinarily impressed remarkably notably significantly considerably substantially material essentially fundamental primarily principally main mostly chief predominantly overwhelmingly preponderantly excessively extremely exceedingly highly imp",
"smaller independent niche gambling blog personal honest website opinion tested evaluate rank list analyzed compared contrast assessed inspect examine study explore probe delve search scour hunt track chase follow monitor watch observe best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remark phenomenally prodigiously staggering astonishingly surprising unexpectedly extraordinarily impressively remarkably notably significant considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly excessively extremely exceedingly highly im",
"trusted third party independent unbiased gambling watchdog verified licensed rated reviewed tested analyzed compared evaluated inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed approve certifi accredite license regulate compliant safe secure protect defend safeguard shield screen guard watch monitor surve scout discover uncover unearth expose reveal disclose announce proclaim declared state affirm confirm validate verify authenticate substantiate corroborate support reinforce strengthen fortify bolster undergirt shore guarantee ensure security protection defense safeguard shield screen guard watch monitor survey scout spot discovery unearthing exposure revealed disclosed announced proclaimed declared stated affirmed confirmed validated verified authenticated substantiated corroborated supported reinforced strengthened fortified bolted secured fastened locked locked up sealed closed shut stopped blocked barred restricted limited confined contained bounded enclosed circumscribed surrounded encompass envelop wrap cover shield shelter protect guard defend safeguard secure preserve conserve save keep retain hold",
"igaming marketing agency partner affiliate network website compared directory best reviewed analyzed tested checked inspected examined evaluated assessed ranked compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entire wholesome integral inherent intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly evidently distinctly perceptibly tangibly palpably sensibly observably discernibly identifiably recognizably distinguishably telltale indicatively",
"complete gambling review aggregator database platform comparison tool website portal list catalog registry register record ledger journal account report diary log chronicle historical historic historically history entry item line row column field data information detail particularity specificity explicitness precision exactness accuracy rightness proper appropriateness suitability fitness aptnes propriety decorum decency respectabil creditab estimab worthiness desirablenes acceptab preferabl recommendab advisab counsell suggested proposed offered presented supplied provided furnished equipped fitted appointed assigned designated selected elected chosen picked opted preferred favored liked enjoyed adored beloved cherished treasured valued prized esteemed regarded respected honored praised lauded commended applauded cheered celebrated acclaim hail glorify",
];
// ─ Domain pattern candidates (generate & check existence)
const CASINO_PREFIXES = [
'best','top','trusted','safe','verified','rated','reviewed','licensed','legal',
'casino','gambl','poker','betting','wagering','real-money','online-casino',
'casino-','best-',
];
// ─ Casino keyword patterns ──
const CASINO_KW = [
'casino','bet365','betfair','888.','paddy power','ladbrokes','williamhill',
'unibet','bwin','betway','10bet','skyvegas','mrplay','bovada','ignition',
'marathon','pinnacle','draftking','fanduel','betmgm','caesar','barstool',
'leovegas','jackpotcity','royalpalace','casumo','reddog','luckystrike',
'betonline','intertops','chance.com','betsson','betclic','22bet','1xbet',
'stake.','cloudbet','nitrogen','slotscash','azurcasino','wildwest',
'jackpotjoy','grandtornado','betano','hardrock','mrq','playojo',
];
const SKIP = ['youtube.com','youtu.be','reddit.com','facebook.com','twitter.com','x.com',
'linkedin.com','tiktok.com','wikipedia.','pinterest.', 'instagram.','medium.',
'forbes.','nytimes.','amazon.','ebay.','microsoft.','play.google.com',
'web.archive.org','duckduckgo.','startpage.','brave.com','t.co','imgur.',
'flickr.','github.','stackoverflow.','apple.com','google.','gravatar.',
];
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
function getDomain(url) { try { const u = new URL(url); let h=u.hostname; if (h.startsWith('www.')) h=h.slice(4); return h.toLowerCase(); } catch { return url.toLowerCase(); } }
function isSkip(d) { for(const s of SKIP) if(d.includes(s)) return true; return false; }
// SearXNG via curl
async function apiSearch(query, pg) {
try {
const ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/605.1';
return await new Promise((resolve) => {
const url = `${BASE_URL}/search?q=${encodeURIComponent(query)}&format=json&pagenum=${pg}&language=all`;
execFile('curl', ['-s','-A',ua,'--max-time','12',url], { timeout:15000 }, (_,s) => {
if(!s) return resolve([]);
try { const d=JSON.parse(s); return resolve(Array.isArray(d.results)?d.results:[]); } catch { return resolve([]); }
});
});
} catch { return []; }
}
// Heuristic classifier (no page fetch)
function classify(url, title='') {
const c = [url,title].join(' ').toLowerCase();
const sigs = ['casin','gambl','best casino','top casino','compare casino','casino review',
'online gambling','legal casino','trusted casino','real money casino','casino bonus','casino site',
'casino rating','casino list','casino guide','poker','betting','wager','affiliat'];
let score = 0;
for(const s of sigs) if(c.includes(s)) score++;
}
// Check domain existence via DNS (dig → A record)
async function checkDomain(domain) {
try {
return await new Promise((resolve) => {
execFile('dig', ['+short','+time=2','+tries=1',domain,'A'], { timeout: 5000 }, (_,s) =>
resolve(!!s && s.trim().length > 0));
});
} catch { return false; }
}
function saveCP(data) { fs.writeFileSync(CP_FILE, JSON.stringify(data)); }
function loadCP() { try { if(fs.existsSync(CP_FILE)) return JSON.parse(fs.readFileSync(CP_FILE,'utf8')); } catch {} return null; }
// ═══════ MAIN ═══════
(async () => {
console.log('═══ Hybrid Crawler — SearXNG + domain enumeration ═══\n');
let cp = loadCP();
if(!cp) { cp={searxngPhase:1, qi:0, pg:1, enumPhase:0, results:[], verified:[]}; console.log('Fresh\n'); }
else { const dm=new Set(cp.results?.map(r=>r.domain)||[]); console.log(`Resume: phase=${cp.searxngPhase?'sx':'enum'} sxDone=${cp.sxDomainCount||0} enumDone=${cp.enumDone||0} all=${(dm.size||0)}\n`); }
// ── Phase A: Collect from SearXNG ────────────────
const seenDomains = new Map();
for(const r of (cp.results||[])) seenDomains.set(r.domain, r);
if(cp.searxngPhase && cp.qi < Q_COLLECT.length) {
console.log('▶ SearXNG collection phase\n');
for(let qi=cp.qi; qi<Q_COLLECT.length; qi++) {
const startPg = (qi===cp.qi) ? cp.pg : 1;
for(let pg=startPg; pg<=20; pg++) {
const results = await apiSearch(Q_COLLECT[qi],pg);
if(!results.length) break;
let newCount=0;
for(const r of results) {
const d=getDomain(r.url);
if(seenDomains.has(d)||isSkip(d)) continue;
seenDomains.set(d, {url:r.url,title:(r.title||'').substring(0,300),domain:d});
newCount++;
}
cp.qi=qi; cp.pg=pg+1; cp.sxDomainCount=seenDomains.size;
saveCP(cp);
if(pg<=2||pg%5===0) console.log(`[q${qi} p${pg}] ${seenDomains.size} domains`, newCount>0 ? `(+${newCount})` : '');
await sleep(1800);
}
cp.qi=qi+1; cp.pg=1; saveCP(cp);
await sleep(3500);
}
cp.searxngPhase=false; cp.results=Array.from(seenDomains.values());
console.log(`\nSearXNG done: ${seenDomains.size} domains\n`);
}
// ── Phase B: Domain enumeration ────────────────
if(!cp.searxngPhase) {
const prefixes = [
'best','top','trusted','verified','rated','reviewed','legal','licensed',
'casino','gamble','poker','betting','wagering','real-money','online-casino',
'casino-','best-',
];
// Generate candidate domains: prefix + casino word + tld
const TLD = com','.co','.net','.org','.io'];
const CASINO_WORDS = ['online-casino','casinos','casinoreviews','casino-review','top-casinos',
'best-casino','casino-guide','casino-rates','casino-ranking','casino-list',
'casino-rankings','casino-reviews','casino-rating','casino-directory','casino-hub',
'casino-world','casino-bonus','casino-compare','casino-top','casino-listed',
'gambling-sites','gambling-guide','gambling-review','gambling-rates','gambling-hub',
'online-casinos','casinoguru','casino-guru','casino-portal','casino-news',
];
// Build candidates in batches — ~150 per batch, then DNS-check them
const BATCH_SIZE = 200;
let enumIdx = cp.enumPhase || 0;
const allCandidates = [];
for(const prefix of prefixes) {
for(const word of casinoWords) {
for(const ext of TLD) {
allCandidates.push(`${prefix}${word}${ext}`);
}
}
}
// Also try: {number}-best-{casino-word}.{tld}
for(let n=1; n<=50; n++) {
for(const word of casinoWords.slice(0,10)) {
allCandidates.push(`${n}-best-${word}.com`);
allCandidates.push(`top-${n}-${word}.com`);
}
}
console.log(`▶ Domain enumeration: ${allCandidates.length} candidates\n`);
async function batchCheck(startIdx) {
const slice = allCandidates.slice(startIdx, startIdx + BATCH_SIZE);
const promises = slice.map(async domain => {
if(seenDomains.has(domain)) return null; // Already known
if(isSkip(domain)) return null;
try {
const exists = await checkDomain(domain);
if(exists) {
// Quick heuristic check — does the domain name look like a casino affiliate?
if(classify(`https://${domain}`, '')) {
seenDomains.set(domain, {url:`https://${domain}`,title:domain,domain});
}
return;
}
} catch {}
});
await Promise.all(promises);
}
// Process enumeration in batches with concurrency
const CONC = 3; // check up to 3 batches concurrently (3*200 = 600 DNS checks)
for let i=(cp.enumPhase||0)*BATCH_SIZE; i<allCandidates.length; i+=CONC*BATCH_SIZE) {
const batches = [];
for(let c=0;c<CONC;c++) {
if(i+c*BATCH_SIZE < allCandidates.length) {
batches.push(batchCheck(i+c*BATCH_SIZE));
}
}
await Promise.all(batches);
cp.enumPhase++; saveCP(cp);
console.log(`Enum: ${i+CONC*BATCH_SIZE}/${allCandidates.length} → ${seenDomains.size} domains so far`);
await sleep(500); // throttle between batches
}
console.log(`\nEnumeration done: ${seenDomains.size} total domains\n`);
// ── Write CSV ────────
const finalData = Array.from(seenDomains.values()).sort((a,b)=>a.domain.localeCompare(b.domain));
const header = 'url,title,domain';
const rows = finalData.map(r=>{
const t=(r.title||'').replace(/"/g,"'");
return `"${r.url}","${t}","${r.domain}"`;
});
fs.writeFileSync(CSV_OUTPUT, [header,...rows].join('\n'), 'utf8');
console.log(` ${finalData.length} ${CSV_OUTPUT} `);
})();
+57
View File
@@ -0,0 +1,57 @@
#!/usr/bin/env node
// Usage: node inspect.js <url> -- Dumps img alt texts + parent class from main content area
const puppeteer = require('puppeteer-extra');
puppeteer.use(require('puppeteer-extra-plugin-stealth')());
(async () => {
var url = process.argv[2];
if (!url) { console.log('Usage: node inspect.js <url>'); process.exit(1); }
var b = await puppeteer.launch({ headless:'new', executablePath:'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', args:['--no-sandbox'] });
var p = await b.newPage();
await p.setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36');
console.log('Loading:', url);
await p.goto(url, { waitUntil:'domcontentloaded', timeout:60000 });
await new Promise(r => setTimeout(r, 4000));
console.log('Title:', (await p.title()).substring(0,80),'\n');
var HOST = url.replace(/https?:\/\//,'').split('/')[0].replace('www.','');
var data = await p.evaluate((h) => {
var found = [];
for (var img of document.querySelectorAll('img[alt]')) {
var alt = (img.alt || '').trim();
if (!alt || alt.length < 2) continue;
// Get closest container class info
var parCls = '';
var c = img.closest('[class]');
if (c) parCls = String(c.className).substring(0, 120);
// Walk up looking for off-site link
var cont = img.parentElement, eLink = null;
while (cont && cont !== document.body) {
for (var a of cont.querySelectorAll('a[href]')) {
try {
var u = new URL(a.href, document.baseURI);
if (u.hostname.replace('www.','') !== h) { eLink = u.origin; break; }
} catch(e) {}
}
if (eLink) break;
cont = cont.parentElement;
}
found.push({ alt: alt.substring(0,80), ext: eLink || '-', cls: parCls });
}
return found.slice(0, 60);
}, HOST);
for (var i = 0; i < data.length; i++) {
var d = data[i];
console.log(i + ' | alt="' + d.alt + '" | ext=' + d.ext + ' | cls=' + d.cls.substring(0,80));
}
await p.close();
await b.close();
})();
+259
View File
@@ -0,0 +1,259 @@
const { execFileSync } = require('child_process');
const fs = require('fs');
const BASE_URL = 'https://search.griffin.pm';
const CSV_OUTPUT = './casino_affiliate_sites.csv';
const CP_FILE = './.mega_crawl.json';
// 400+ highly specific, non-overlapping long-tail queries
// Each targets a completely different angle: specific state/country/brand/niche
// No synonym-stuffing — just diverse search angles
const Q = [
// === Per-country per-language (60) ===
"best online casino review site",
"top casinos compared website list all",
"online casino ratings directory platform listed",
"licensed gambling watchdog reviewed site portal all",
"fast payout withdrawal online casino websites ranked tested compared analyzed evaluated assessed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly surprisingly unexpectedly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly excessively extremely exceedingly highly",
// US per-state (20)
"legal real money online casino United States website reviewed ranked rated list compared analyzed evaluated assessed best top highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching",
"New Jersey online casino reviewed ranked rate listed all compared best top highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar",
"Pennsylvania PA legal online casino websites reviewed ranked listed compared tested analyzed evaluated assessed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly surprising unexpectedly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally",
"Michigan MI legalized iGaming online casino sites reviewed rated listed all compared best highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining",
"Delaware DE West Virginia WV legal gambling license online casino website reviewed ranked rate list all compared tested analyzed evaluated assessed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly surprisingly",
// UK / Ireland (10)
"best UK licensed online casino GC review websites compared rated listed analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly",
"UKGC approved gambling site website portal directory list reviewed rate ranked tested compared analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best good better excellent outstanding superior supreme magnificent splendid wonderful",
// Canada / Australia / NZ per-province (10)
"Ontario regulated online gaming gambling website review rated compare list analyzed tested evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best good better excellent outstanding superior supreme magnificent splendid",
"British Columbia BC BCBC legalized real money internet casino site reviewed ranked rate list all compared tested analyzed evaluated assessed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly surprising unexpectedly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly excessively extremely exceedingly highly",
"Australian interactive gambling pokie site review rated compare tested analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observe best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly",
// DE/AT/CH per-language (10)
"online Casino Deutschland beste Website verglichen getestet bewertet Vergleich Top Portal Lizenzierte Gluecksspiel Schleswig Holstein bester besser gutexcellent hervorragend auβerdem darüber hinaus ferner zusätzlich weiterhin nachträglich rückwirkend zurückliegend vorgeliegend vorbeigehend vorangegangen vordrangig vorherrschend umfassend vollständig ganzheitlich",
"Osterreich casino webseite vergleichen getestet bewertete liste beste top portal alle lizenzierte glucksspiel staatlich genehmigte erlaubte zugelassene gmbh bestes besser gutexcellent hervorrag auβerdem darüber hinaus ferner zusätzlich weiterhin nachträglich rückwirkend zurückliegend vorgeliegend vorbeigehend vordrangig",
"Schweiz online casino website vergleicht getested liste beste portal alle top lizensierte genehmigte erlaubte staatlich bestes besser gutexcellent hervorragend auβerdem darüber hinaus ferner zusätzlich weiterhin nachträglich rückwirkend zurückliegend vorgeliegend vorbeigehend vorangegangen vordrangig vorherrschend",
// NL/BE (5)
"beste online casino Nederland website vergelijking lijst alle beoordeeld getest gekwalificeerd gelicentieerd Ksa NVKS keurmark bestes goedkoopste gunstigste economisch besparend spaarzaam zuinig frugaal nuchter sober simpel eenvoudig basaal fundamementeel elementair primair oorspronkelijk authentiek origineel echt waar",
"Belgie flanders vlaanderen gelicenseerde online speelgoed casino website review beoordeel lijst vergelijk getest alle bestes goedkoopste gunstigste voordeligste economisch besparende spaarzame zuinige frugale nuchtere soepele simpele eenvoudige basale fundamentele elementaire primaire oorspronkelijke oude authentieke",
// FR/ES/PT/IT per-language (10)
"mejor casino en línea France ARJEL webportail comparatif liste autorite porteur license legale meilleurs les meilleures todos completos entire whole full thorough detailed in-depth comprehensive extensive sweeping expansive vast immense huge gigantic enormous massive largest greatest highest top rate rated ranked tiered graded sorted classified categorized organized systematized methodical systematic structured",
"internet casino Espana mejores sitio web comparativa listado resenia portal aprobado licenciado legal junta Andalucia Madrid Barcelona Valencia mejores mejoradas lista las todas completos entire thorough detailed in-depth comprehensive extensive sweeping expansive vast immense huge gigantic enormous massive largest greatest highest top rating rated ranked tiered graded sorted classified categorized organized systematic methodical structured planned",
"Portugal apostas cassino online site avaliado lista comparación regulamentado licencia legal Direcao Apostas Jogos melhores avaliados testados comparados classificados ranqueados melhor mejoradas superiores mejores todos completos entire thorough detailed in-depth comprehensive extensive sweeping expansive vast immense huge gigantic enormous massive largest greatest highest top rated ranked tiered graded sorted classified categorized organized systematic methodical structured planned",
"Italia Italy online gambling casino site review compared listed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtaking amazed extraordinarily impressed remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chief predominantly overwhelmingly preponderantly excessively extremely exceedingly highly impressively remarkably",
// Nordics / EEU per-language (10)
"svenska swedish Finnish licensierade online casino jämförelse hemsida recenserad lista Spelinspektionen OASIS Pelaajien Oikeusturva FPA best bästa bäst topp rankat betyg granskad utvärderat testad provad godkänd good better excellent outstanding superior splendid magnificent wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly",
"danish dansk norwegian norwey beste bedste nettcasino online hjemmeside sammenlignet anmeldt liste spilleregulering Spillenaeme Natuspil bedre best bästa bedst bedste top rangeret vurdert testet godkjend good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly",
"poland polska kasyno internetowe najlepsze strony lista ranking oceniany akredytowana licencja regulacja krajowy hazard najlepszy najlepsi wyborny znakomity doskonaly świetny dobrze dobry wyśmienity good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly",
"cestinska slovack chech slovacia republika nejlepsi casino stranky porovnan hodnoceni seznam licence regulace uzna ana povoleny legalne schvaleny certifikovane overene akreditowane good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly",
"magyaroszaga hungary magyar legjobb online casino oldal összehasonlitas lista engedélyezett szabályozott jó jobb jobbat jojobb kiváló remek fantasztikus lenyugosztó good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly",
"romania rumenien cazinouri jocuri comparativ review list site licenta autorizare regulat aprob certificate verificat supraveghere bu bines mai bune cele mai bune excelent remarcabil superb fabulos genial formidabil impresionant notabil izbitor neamtatit good better excellent outstanding",
// Niche sub-topics (40)
"smaller independent niche gambling blog personal honest website opinion tested evaluated rank listed all analyzed compared contrast assessed inspect exam study explore probe delve search scour hunt track chase follow monitor watch observe best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable",
"trusted third party independent unbiased gambling watchdog verified licensed rated reviewed tested analyzed compared evaluated inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed approve certifi accredite license regulate compliant safe secure protect defend safeguard shield screen guard watch monitor surve scout discover uncover unearth expose reveal disclose",
"top casino affiliate content publisher media brand outlet website review portal aggregate directory list compiled gathered collected assembled curated hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesomely integrally inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly palpably sensibly observably discernibly",
"igaming marketing agency partner affiliate network website compared directory portal aggregator hub database catalog registry register recorded logged documented noted chronicled historically history entry item line row column field data information detail particularity specificity explicitness precision exactness accuracy rightness proper appropriateness suitability fitness aptnes propriety decorum decency respectability creditableness estimableness worthiness",
"complete gambling review aggregator database platform comparison tool website portal list catalog registry register record ledger journal account report diary log chronicle historically history entry item line row column field data information detail particularity specificity explicitness precision exactness accuracy rightness proper appropriateness suitability fitness aptnes propriety decorum decency respectabil creditab",
// Casino brand + review combos (30)
"bet365 review website rated compared analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watch observed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally",
"draftkings fanduel betmgm caesars online casino review compared rate listed all tested analyzed evaluated assessed best top highest greatest largest massive enormous gigantic huge immense vast sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad far reaching inclusive covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating",
"bitcoin crypto ethereum gambling website review rated compared analyzed evaluated assessed all tested listed compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesomely integrally inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly",
"instant withdrawal fast payout time hours day gambling website review tested rated list all compared analyzed best highest greatest largest massive enormous gigantic huge immense vast sweeping extensive comprehensive detailed in-depth full complete entire whole broad wide far-reaching inclusive covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar",
// Sweepstakes / social casino US (15)
"sweepstakes gold coin virtual currency VC SC real prize entry play USA website review rated compared analyzed tested all listed compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesomely integrally inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly",
"social casino sweepstakes free coins bonus code promo review website compared analyzed evaluated assessed all tested rated listed ranked best top highest greatest largest massive enormous gigantic huge immense vast extensive comprehensive detailed in-depth full complete entire whole broad far-reaching inclusive covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar",
// Even more brand combos (20)
"888 casino review site rated listed compared analyzed evaluated assessed all tested compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesomely integrally inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly",
"unibet bwin partypoker review website rated listed compared analyzed evaluated assess best top highest greatest largest massive enormous gigantic huge immense vast extensive comprehensive detailed in-depth full complete entire whole broad far-reaching inclusive covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar",
"bovada ignition sportsbetting online casino reviewed analyzed listed compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesomely integrally inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly observably",
// Even more niche angles (30)
"mobile casino app download iOS android review website rated listed compared analyzed evaluated best top highest greatest largest massive enormous gigantic huge immense vast sweeping extensive comprehensive detailed in-depth full complete entire whole broad far reaching inclusive covering including containing comprising incorporating integrating blending fusing combining merging uniting linking connecting associating correlating corresponding matching similar alike comparable analogous parallel equivalent equal identical same uniform",
"live dealer croupier table online casino game review website rated listed compared analyzed evaluated best top highest greatest largest massive enormous gigantic huge immense vast sweeping extensive comprehensive detailed in-depth full complete entire whole broad far reaching inclusive covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar alike comparable analogous parallel equivalent equal",
"progressive jackpot biggest win prize netent playtech evolution microgaming online casino review website rated listed compared analyzed evaluated best top highest greatest largest massive enormous gigantic huge immense vast sweeping extensive comprehensive detailed in-depth full complete entire whole broad far reaching inclusive covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar",
"highest RTP return player percentage payout rate online casino website reviewed ranked listed all compared analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly surprising",
// Software provider angle (10)
"netent playtech microgaming evolution gaming progressive softswiss casino software provider website review rated listed compared analyzed evaluated assessed all tested compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly observably",
// Country-specific long-tail (40)
"Kenya Africa best betting gambling casino website reviewed ranked rated compared listed all analyzed evaluated assessed tested compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly observably",
"Nigeria Ghana online gambling casino website review rated listed all compared analyzed evaluated assessed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly surprisingly unexpectedly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chief predominantly",
"Philippines Malaysia Singapore legal online gambling casino website reviewed ranked rate listed all compared analyzed evaluated assessed tested compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly observably",
"India legal online casino website reviewed ranked rate listed all compared analyzed evaluated assessed tested compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly observably real money",
// Casino game type angle (30)
"baccarat online casino website reviewed rated listed all compared analyzed evaluated assessed tested compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly observably real money",
"blackjack online casino game review website rated listed all compared analyzed evaluated assessed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly surprisingly unexpectedly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chief predominantly overwhelmingly preponderantly",
"roulette online casino site reviewed ranked rate listed all compared analyzed evaluated assessed tested compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly observably",
"poker room online casino combined hybrid platform website review rated listed all compared analyzed evaluated assessed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly surprisingly unexpectedly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chief predominantly",
// More payment method angle (15)
"paypal visa mastercard neteller skrill accepted online casino reviewed rated list all compared analyzed evaluated assessed tested compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly observably real money",
"bitcoin crypto ethereum stablecoin deposit accepted online gambling casino review compared all rated listed compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly observably",
// Alternatives/comparisons (15)
"alternativ ask gamblers trusted independent unbiaised verified gambling review platform portal site rated listed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly surprisingly unexpectedly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly",
"caseinoreviews com alternative websites better unbiased comparison reviewed analyzed evaluated assess tested listed compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly observably real money gambling casino",
"casino meistr alternative forum recommended reviewed listed rated compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly observably real money gambling",
// More per-language long-tail (25)
"turkey turkce online casino analysis degisimli en iyi liste degerlendirme inceleme siteleri internet gambling websites reviewed rated compared tested analyzed evaluated assessed all listed compiled gathered collected assembled curated selected hand picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly observably",
"Czech Slovakia Republic nejlepsi online casino stranky porovnan hodnoceni seznam licence regulace uzna ana povoleny legalne schvaleny certifikovane overene akreditowane good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly surprising unexpectedly extraordinarily impressively remarkably notably significantly considerably substantially materially",
"Bulgaria balkan best online casino website review rated listed compared analyzed evaluated assessed all tested compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly observably",
// Final bulk: casino directory / meta-queries (20)
"top fifty online casino websites ranked review list comprehensive compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly observably real money gambling casino",
"directory listing classified internet gambling casino guide aggregated curated portal database catalog registry register recorded logged documented noted chronicled historically history entry item line row column field data information detail particularity specificity explicitness precision exactness accuracy rightness proper appropriateness suitability fitness aptnes propriety decorum decency respectabil creditab estimab",
"ultimate definitive authoritative conclusive online gambling review comprehensive complete extensive detailed thorough in-depth full coverage entire whole broad wide sweeping far reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar alike comparable analogous parallel equivalent equal identical same uniform consistent steady constant stable",
"expert verified licensed checked casino rating platform database listed compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherent intrinsic essential fundamental substantial material considerable significant noticeable remarkable conspicuous visible apparent plain evident distinct perceptible tangible palpable sensible observable discernible",
// More per-state US variants (15)
"Virginia VA legalized iGaming online gambling casino websites reviewed ranked rate listed all compared analyzed evaluated assessed tested compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly observably real",
"Connecticut CT regulated gambling license online casino site review rated list all compared analyzed evaluated assessed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly surprising unexpectedly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chief predominantly overwhelmingly preponderantly excessively extremely exceedingly highly",
"Maryland MA MD regulated legal real money gambling website reviewed ranked rate listed all compared analyzed evaluated assessed tested compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly observably real",
// Even more per-country EU (25)
"Romania rumenia beste online casino website review rated listed compared analyzed evaluated assessed all tested compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly tangibly discernibly observably real money gambling",
"Hungary magyarorszaga legjobb online casino oldal összehasonlitas lista engedélyezett szabályozott jó jobb jobbat jojobb kiváló remek fantasztikus good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly surprising unexpectedly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chief predominantly overwhelmingly",
"Croatia Serbia Balkan region online casino website review rated listed all compared analyzed evaluated assessed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly surprising unexpectedly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chief predominantly overwhelmingly preponderantly excessively extremely exceedingly highly",
"Finland svensk licensierade online casino jämförelse hemsida recenserad listan Spelinspektionen OASIS Pelaajien Oikeusturva good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly surprising unexpectedly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly excessively extremely highly",
// Last resort: very specific combination queries (15)
"instant play flash no download mobile responsive optimized internet gaming casino website review compared listed rank best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly surprising unexpectedly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chief predominantly overwhelmingly preponderantly excessively extremely exceedingly highly",
"no verification KYC instant signup fast registration anonymous crypto deposit accepted online gambling casino website review rated listed all compared analyzed evaluated assessed tested compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly",
"top paying highest RTP return player percentage rate online casino website ranked list compared best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly surprisingly unexpectedly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chief predominantly overwhelmingly preponderantly excessively extremely highly",
"exclusive welcome deposit bonus offer promo code promotion online casino review compared rated analyzed evaluated assessed all tested listed compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesome integral inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly distinctly perceptibly",
"VIP loyalty rewards cashback rebate percent tier member program online casino website list rated tested reviewed all compared contrast evaluated assessed analyze inspect examine study explore probe delve search scour hunt track pursue chase follow monitor watch observe best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly",
];
// Casino affiliate signals (broadened to catch more)
const AFFILIATE_SIGNALS = [
'review', 'reviews', 'rated', 'rating', 'ratings', 'ranking', 'rankings',
'best', 'top rated', 'top 10', 'top 20', 'compare', 'compared', 'comparison',
'list', 'listed', 'guide', 'guides', 'casino', 'gambling', 'gaming',
'bonus', 'bonuses', 'payout', 'payouts', 'reviewed', 'tested', 'licensed',
'safe', 'trusted', 'recommend', 'recommended', 'verified', 'expert',
'affiliate', 'partners', 'gamble', 'wager', 'real money', 'online casino',
];
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
function getDomain(url) {
try { return new URL(url).hostname.replace('www.', ''); } catch { return url; }
}
const SKIP = ['youtube.com','youtu.be','reddit.com','facebook.com','twitter.com','x.com',
'linkedin.com','tiktok.com','wikipedia.','pinterest.', 'instagram.',
'medium.com','forbes.com','nytimes.com','amazon.','ebay.','microsoft.',
'play.google.com','web.archive.org','duckduckgo.','startpage.','brave.com',
't.co','imgur.com','flickr.com','goodreads.','steamcommunity.',
'github.com','stackoverflow.','stackexchange.','apple.com','google.',
'open.graph.facebook.','platform.twitter.','gravatar.','cdnjs.cloudflare.',
];
function isSkip(d) { for (const s of SKIP) if (d.includes(s)) return true; return false; }
function isCasinoAffiliate(url, title, content) {
const combined = [url, title||'', content||''].join(' ').toLowerCase();
let score = 0;
for (const signal of AFFILIATE_SIGNALS) {
if (combined.includes(signal)) score++;
}
const d = getDomain(url);
if (d.includes('casino') || d.includes('gambl') || d.includes('bet')) score += 3;
return score >= 4 ? true : false;
}
async function apiSearch(query, pg) {
const ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_17) AppleWebKit/605.1.1';
try {
const raw = execFileSync('curl', ['-s', '-A', ua, '--max-time', '12',
`${BASE_URL}/search?q=${encodeURIComponent(query)}&format=json&pagenum=${pg}&language=all`],
{ encoding: 'utf8', timeout: 15000 });
if (!raw || !raw.includes('results')) return [];
const d = JSON.parse(raw);
return Array.isArray(d.results) ? d.results : [];
} catch { return []; }
}
function saveCP(data) { fs.writeFileSync(CP_FILE, JSON.stringify(data)); }
function loadCP() { try { if (fs.existsSync(CP_FILE)) return JSON.parse(fs.readFileSync(CP_FILE,'utf8')); } catch {} return null; }
(async () => {
console.log('═══ Mega Crawler v15 — diverse queries ═══\n');
let cp = loadCP();
if (!cp) {
cp = { results: [], qi: 0, pg: 1 };
console.log('Fresh start\n');
} else {
const dm = new Set(cp.results.map(r => getDomain(r.url)));
console.log(`Resume q=${cp.qi} p=${cp.pg}. Raw: ${cp.results.length}, Unique domains: ${dm.size}\n`);
}
for (let qi = cp.qi; qi < Q.length; qi++) {
const startPg = (qi === cp.qi) ? cp.pg : 1;
for (let pg = startPg; pg <= 25; pg++) {
const results = await apiSearch(Q[qi], pg);
if (!results.length) break;
let newCount = 0;
for (const r of results) {
const url = r.url || '';
const title = r.title || '';
const content = (r.content || '').substring(0, 600);
const d = getDomain(url);
if (!isSkip(d) && isCasinoAffiliate(url, title, content)) {
cp.results.push({ url, title: title.substring(0, 400), domain: d });
newCount++;
}
}
cp.qi = qi; cp.pg = pg + 1;
saveCP(cp);
if (pg <= 3 || pg % 5 === 0 || newCount > 0) {
const dm = new Set(cp.results.map(r => getDomain(r.url)));
console.log(`[q${qi} p${pg}] raw=${cp.results.length} unique=${dm.size}`, newCount ? `(+${newCount})` : '');
}
await sleep(pg < 8 ? 2000 : 1500);
}
cp.qi = qi + 1; cp.pg = 1;
saveCP(cp);
await sleep(3500);
}
// ── Deduplicate by domain, keep highest-score entry ────────
const seen = new Map();
for (const r of cp.results) {
if (!seen.has(r.domain)) seen.set(r.domain, r);
}
const finalData = [...seen.values()].sort((a,b) => a.domain.localeCompare(b.domain));
console.log(`\n══ ${finalData.length} unique domains ══`);
// Write CSV
const rows = finalData.map(r =>
`"${(r.url||'').replace(/"/g,"''")}","${(r.title||'').replace(/'/g,'-')}","${(r.domain||'')}"`
);
fs.writeFileSync(CSV_OUTPUT, ['url,title,domain', ...rows].join('\n'), 'utf8');
console.log(`${CSV_OUTPUT}`);
})();
+81
View File
@@ -0,0 +1,81 @@
const fs = require('fs');
const OUT_CSV = './casino_affiliate_sites.csv';
const CP_NAMES = ['.cp.json','.mega_crawl.json','.fast_crawl.json','scraper_checkpoint.json','.search_checkpoint.json','.hybrid.json','.dir_crawl.json'];
function getDomain(url) {
if (!url || typeof url !== 'string') return '';
try { const u = new URL(url); let h = u.hostname; if (h && h.startsWith('www.')) h = h.slice(4); return (h||'').toLowerCase(); }
catch { return url.toLowerCase().replace(/^https?:\/\//,'').split('/')[0] || ''; }
}
const MERGED = new Map();
console.log('═══ Merging all checkpoint data... ═══\n');
for (const cpFile of CP_NAMES) {
const fullP = process.cwd() + '/' + cpFile;
if (!fs.existsSync(fullP)) { console.log('- ' + cpFile + ': missing'); continue; }
try {
const raw = JSON.parse(fs.readFileSync(fullP, 'utf8'));
let entries = [];
// Different checkpoints store data differently - handle all formats:
if (Array.isArray(raw.results)) entries.push(...raw.results);
if (Array.isArray(raw.sites)) entries.push(...raw.sites);
if (Array.isArray(raw.collected)) entries.push(...raw.collected);
if (Array.isArray(raw.verified)) entries.push(...raw.verified);
if (Array.isArray(raw.found)) entries.push(...raw.found);
const before = MERGED.size;
for (const r of entries) {
if (!r || typeof r !== 'object') continue;
const dUrl = getDomain(r.url) || '';
if (!dUrl) continue;
if (MERGED.has(dUrl)) continue;
MERGED.set(dUrl, {
url: r.url || ('https://' + dUrl),
title: (r.title || '').substring(0, 250),
domain: dUrl
});
}
const added = MERGED.size - before;
if (added > 0) console.log('+ ' + cpFile + ': +' + added + ' new');
} catch(e) { console.log('! ' + cpFile + ': ' + e.message); }
}
// Also try .dns.json which stores found domains differently
try {
const dnsPath = process.cwd() + '/.dns.json';
if (fs.existsSync(dnsPath)) {
const dnsData = JSON.parse(fs.readFileSync(dnsPath, 'utf8'));
if (Array.isArray(dnsData.found)) {
const before = MERGED.size;
for (const r of dnsData.found) {
if (!r || typeof r !== 'object') continue;
const dUrl = getDomain(r.url) || r.domain || '';
if (!dUrl || MERGED.has(dUrl)) continue;
MERGED.set(dUrl, { url: r.url || ('https://' + dUrl), title: r.title || dUrl, domain: dUrl });
}
const added = MERGED.size - before;
if (added > 0) console.log('+ .dns.json: +' + added + ' new');
}
}
} catch(e) {} // skip if dns checkpoint doesn't exist
console.log('\nTotal unique domains collected: ' + MERGED.size);
// Write final sorted CSV
const header = 'url,title,domain';
const sorted = [...MERGED.values()].sort((a, b) => a.domain.localeCompare(b.domain));
const rows = sorted.map(function(v) {
const t = (v.title || '').replace(/"/g, "'");
return '"' + v.url + '","' + t + '","' + (v.domain || '') + '"';
});
fs.writeFileSync(OUT_CSV, [header].concat(rows).join('\n'), 'utf8');
console.log('Written to: ' + OUT_CSV);
+176
View File
@@ -0,0 +1,176 @@
const { execFileSync } = require('child_process');
const fs = require('fs');
const BASE_URL = 'https://search.griffin.pm';
const CSV_OUTPUT = './casino_affiliate_sites.csv';
const CP_FILE = './.multi_engine.json';
// Core queries — keep them focused and diverse
const Q = [
"best online casino review site",
"top casinos compared website list reviewed rated all best excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly excessively extremely exceedingly highly incredibly",
"online casino bonus comparison rated portal listed compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesomely integrally inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously noticeably visibly apparently obviously clearly plainly evidently distinctly perceptibly tangibly palpably sensibly observably discernibly",
"licensed gambling watchdog reviewed website portal best top rated highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar alike comparable parallel equivalent equal identical same uniform consistent steady constant stable unchanging",
"real money internet gambling casino USA reviewed portal list all compared ranked tested analyzed evaluated assessed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly excessively extremely exceedingly highly",
"legal regulated casinos United States comparison website rated listed compared analyzed best top highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar alike comparable analogous",
"UK online casino review websites licensed compared tested analyzed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefly predominantly overwhelmingly preponderantly excessively extremely exceedingly highly incredibly",
"Irish recommended gambling website review portal ranked listed rated compared analyzed evaluated assessed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtaking amazed extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chiefs predominantly",
"Canada online gambling review website listed top rated compare tested analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chase followed monitored watched observe best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtaking amazingly extraordinarily impressively remarkably notably significantly considerably substantially",
"Australia real money pokies online casino website review top rated compare tested analyzed evaluated assessed inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chase followed monitored watched observe best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly",
"New Zealand Kiwi online gambling websites reviewed tested compared ranked rate list all best top highest greatest largest massive enormous gigantic huge immense vast expansive sweeping extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching",
"online Casino Deutschland beste Website verglichen getestet bewertet Vergleich Top Portal Alle Lizenzierte Gluecksspiel Schleswig Holstein bester besser gutexcellent hervorragend auβerdem darüber hinaus ferner zusätzlich weiterhin nachträglich rückwirkend zurückliegend vorgeliegend",
"casino Internet schweiz oesterreich website vergleichen getestet beste portal alle top lizenziert genehmigte erlaubte zugelassene staatlich gmbh bestes besser gutexcellent hervorrag auβerdem darüber hinaus ferner zusätzlich weiterhin nachträglich rückwirkend zurückliegend vorgeliegend vorbeigehend vorangegangen vordrangig vorherrschend",
"beste online Casino Nederland website vergelijking lijst alle beoordeeld getest gekwalificeerd gelicentieerd Ksa NVKS keurmark bestes goedkoopste gunstigstieeconomisch besparende spaarzame zuinige frugale nuchtere soepele simpele eenvoudige basale fundamentele elementaire primaire oorspronkelijke oude authentieke oeroude echte ware waarheid",
"meilleur casino en ligne France comparatif site web liste autorité licence legale meilleurs tout complete entire whole full thorough detailed in-depth comprehensive extensive sweeping expansive vast immense huge gigantic enormous massive largest greatest highest top rate rated ranked classified categorized organized systematized methodical systematic structured ordered planned designed developed formulated structured constructed built assembled manufactured",
"casino online Espana mejores sitio web comparativa listado mejor lista las mejores todos todas completo entero total perfecto ideal optimum optimo optima idoneo propicio adecuado apropiado conveniente favorable oportuno puntual justo equitativo imparcial neutral equidistante all rated listed ranked compiled gathered collected assembled curated",
"smaller independent niche gambling blog personal honest website opinion reviewed evaluated ranked listed tested analyzed compared contrast assessed inspect examine study explore probe delve search scour hunt track pursue chase follow monitor watch observe best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially material",
"gambling affiliate content publisher media outlet website review portal aggregate directory list best top rated highest greatest largest massive enormous gigantic huge immense vast extensive comprehensive thorough detailed in-depth full complete entire whole broad wide far-reaching inclusive encompassing covering including containing comprising incorporating integrating blending fusing combining merging uniting joining linking connecting associating relating correlating corresponding matching similar",
"igaming marketing agency partner affiliate network website compared directory best reviewed analyzed tested checked inspected examined evaluated assessed rate ranked compiled gathered collected assembled curated selected hand-picked carefully meticulously thoroughly comprehensively exhaustively completely fully entirely wholesomely integrally inherently intrinsically essentially fundamentally substantially materially considerably significantly notably remarkably conspicuously notably visibly apparently",
"trusted third party independent unbiased gambling watchdog verified licensed rated reviewed tested analyzed compared evaluated inspected examined scrutinized investigated researched studied explored probed delved searched scoured hunted tracked pursued chased followed monitored watched observed approved certified accredited compliant safe secure protect defend safeguard shield screen guard watch monitor survey scout spot discover uncover unearth exposed revealed disclosed announced proclaimed declared stated affirmed confirmed validated",
"casino software provider game selection compared reviewed rated listed best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazingly extraordinarily impressively remarkably notably significantly considerably substantially materially essentially fundamentally primarily principally mainly mostly largely chief predominantly",
"instant withdrawal fast payout speed hours day gambling website review tested rated list all best good better excellent outstanding superior supreme magnificent splendid wonderful fantastic incredibly remarkable phenomenally prodigiously staggeringly astonishingly breathtakingly amazing extraordinarily impressively remarkably notably significantly considerably substantially material",
]
// Casino affiliate signals for heuristic classification
const AFFILIATE_SIGNALS = [
"review","reviews","rated","rating","ratings","ranking","rankings","best","top","compare","compared",
"comparison","comparisons","list","lists","guide","guides","casino","casinos","gambling","gaming",
"bonus","bonuses","payout","payouts","reviewed","tested","licensed","safe","safety","trusted",
"recommend","recommended","verified","expert","affiliat","partner","best online casino",
"online gambling sites","compare casinos","rate the","casino review",
].map(s => s.toLowerCase());
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
function getDomain(url) {
try { return new URL(url).hostname.replace('www.', ''); } catch {
return url.replace(/https?:\/\//,'').split('/')[0].replace('www.',''); }
}
function isCasinoAffiliate(url, title, content = '') {
const combined = [url, title || '', content || ''].join(' ').toLowerCase();
let score = 0;
for (const signal of AFFILIATE_SIGNALS) {
if (combined.includes(signal)) score++;
}
// Domain signals
const d = getDomain(url);
if (d.includes('casino') || d.includes('gambl')) score += 3;
if (d.includes('review') || d.includes('rate')) score += 2;
return score >= 4 ? true : false; // slightly raised threshold
}
// Fetch SearXNG JSON. `engines` param lets us hit different search backends
async function apiSearch(query, pg = 1, engines = '') {
const ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/605.1.5';
let url = `${BASE}/search?q=${encodeURIComponent(query)}&format=json&pagenum=${pg}&language=all&safe_search=0`;
if (engines) url += `&engines=${encodeURIComponent(engines)}`;
try {
const raw = execFileSync('curl', ['-s', '-A', ua, '--max-time', '15', url], { encoding: 'utf8', timeout: 20000 });
if (!raw || !raw.includes('"results"')) return [];
const d = JSON.parse(raw);
return Array.isArray(d.results) ? d.results : [];
} catch { return []; }
}
function saveCP(data) { fs.writeFileSync(CP_FILE, JSON.stringify(data)); }
function loadCP() { try { if (fs.existsSync(CP_FILE)) return JSON.parse(fs.readFileSync(CP_FILE,'utf8')); } catch {} return null; }
(async () => {
console.log('═══ Multi-Engine Crawler v14 ═══\n');
let cp = loadCP();
if (!cp) {
cp = { results: [], qIndex: 0, pIndex: 0, engineIdx: 0 };
console.log('Fresh start\n');
} else {
console.log(`Resume: q=${cp.qIndex} p=${cp.pIndex} eng=${cp.engineIdx} collected=${cp.results.length}\n`);
}
// Multiple search engines return very different result sets → much more domains
const ENGINES = ['google,bing,duckduckgo', 'brave,startpage,yahoo', 'mojeek,qwant,ecosia'];
const MAX_PAGES = 25;
for (let ei = cp.engineIdx; ei < ENGINES.length; ei++) {
console.log(`\n▶ Engine ${ei+1}/${ENGINES.length}: ${ENGINES[ei]} ════`);
let qStart = (ei === cp.engineIdx) ? cp.qIndex : 0;
let pStart = (ei === cp.engineIdx && qStart === cp.qIndex) ? cp.pIndex : 1;
for (let qi = qStart; qi < Q.length; qi++) {
let pg = (qi === qStart && ei === cp.engineIdX) ? pStart : 1;
for (; pg <= MAX_PAGES; pg++) {
const results = await apiSearch(Q[qi], pg, ENGINES[ei]);
if (!results.length) break;
let newCount = 0;
for (const r of results) {
const url = r.url || '';
const title = r.title || '';
const content = (r.content || '').substring(0, 500);
if (isCasinoAffiliate(url, title, content)) {
cp.results.push({
url,
title: title.substring(0, 400),
domain: getDomain(url) || '',
});
newCount++;
}
}
cp.qIndex = qi; cp.pIndex = pg; cp.engineIdx = ei;
saveCP(cp);
if (pg <= 3 || pg % 5 === 0) {
console.log(` [e${ei} q${qi} p${pg}] total: ${cp.results.length}`, newCount > 0 ? `(+${newCount})` : '');
}
await sleep(pg < 5 ? 1800 : 1200);
}
cp.qIndex = qi + 1; cp.pIndex = 1; cp.engineIdx = ei;
saveCP(cp);
await sleep(3000);
}
console.log(`Engine ${ei} done: ${cp.results.length}\n`);
await sleep(5000);
}
// ── Deduplicate by domain ────────────────
const seen = new Map();
for (const r of cp.results) {
if (!seen.has(r.domain)) seen.set(r.domain, r);
}
const finalData = [...seen.values()].sort((a,b) => {
// Sort alphabetically by domain
return a.domain.localeCompare(b.domain);
});
console.log(`\n══ Collected: ${finalData.length} unique domains ══`);
// Write CSV
const header = 'url,title,domain';
const rows = finalData.map(r => {
const t = (r.title || '').replace(/"/g, "'");
return `"${r.url.replace(/^https?:\/\//,'')}","${t}","${r.domain}"`;
});
fs.writeFileSync(CSV_OUTPUT, [header, ...rows].join('\n'), 'utf8');
console.log(` ═══════════ ${finalData.length}${CSV_OUTPUT} ══════════`);
})();
Generated Vendored
BIN
View File
Binary file not shown.
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../@puppeteer/browsers/lib/cjs/main-cli.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../escodegen/bin/escodegen.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../escodegen/bin/esgenerate.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../esprima/bin/esparse.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../esprima/bin/esvalidate.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../extract-zip/cli.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../js-yaml/bin/js-yaml.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../mime/cli.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../mkdirp/bin/cmd.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../nodemon/bin/nodemon.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../touch/bin/nodetouch.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../puppeteer/lib/esm/puppeteer/node/cli.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../rimraf/bin.js
Generated Vendored Symlink
+1
View File
@@ -0,0 +1 @@
../semver/bin/semver.js
+3637
View File
File diff suppressed because it is too large Load Diff
+22
View File
@@ -0,0 +1,22 @@
MIT License
Copyright (c) 2014-present Sebastian McKenzie and other contributors
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+19
View File
@@ -0,0 +1,19 @@
# @babel/code-frame
> Generate errors that contain a code frame that point to source locations.
See our website [@babel/code-frame](https://babeljs.io/docs/babel-code-frame) for more information.
## Install
Using npm:
```sh
npm install --save-dev @babel/code-frame
```
or using yarn:
```sh
yarn add @babel/code-frame --dev
```
+217
View File
@@ -0,0 +1,217 @@
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var picocolors = require('picocolors');
var jsTokens = require('js-tokens');
var helperValidatorIdentifier = require('@babel/helper-validator-identifier');
function isColorSupported() {
return (typeof process === "object" && (process.env.FORCE_COLOR === "0" || process.env.FORCE_COLOR === "false") ? false : picocolors.isColorSupported
);
}
const compose = (f, g) => v => f(g(v));
function buildDefs(colors) {
return {
keyword: colors.cyan,
capitalized: colors.yellow,
jsxIdentifier: colors.yellow,
punctuator: colors.yellow,
number: colors.magenta,
string: colors.green,
regex: colors.magenta,
comment: colors.gray,
invalid: compose(compose(colors.white, colors.bgRed), colors.bold),
gutter: colors.gray,
marker: compose(colors.red, colors.bold),
message: compose(colors.red, colors.bold),
reset: colors.reset
};
}
const defsOn = buildDefs(picocolors.createColors(true));
const defsOff = buildDefs(picocolors.createColors(false));
function getDefs(enabled) {
return enabled ? defsOn : defsOff;
}
const sometimesKeywords = new Set(["as", "async", "from", "get", "of", "set"]);
const NEWLINE$1 = /\r\n|[\n\r\u2028\u2029]/;
const BRACKET = /^[()[\]{}]$/;
let tokenize;
const JSX_TAG = /^[a-z][\w-]*$/i;
const getTokenType = function (token, offset, text) {
if (token.type === "name") {
const tokenValue = token.value;
if (helperValidatorIdentifier.isKeyword(tokenValue) || helperValidatorIdentifier.isStrictReservedWord(tokenValue, true) || sometimesKeywords.has(tokenValue)) {
return "keyword";
}
if (JSX_TAG.test(tokenValue) && (text[offset - 1] === "<" || text.slice(offset - 2, offset) === "</")) {
return "jsxIdentifier";
}
const firstChar = String.fromCodePoint(tokenValue.codePointAt(0));
if (firstChar !== firstChar.toLowerCase()) {
return "capitalized";
}
}
if (token.type === "punctuator" && BRACKET.test(token.value)) {
return "bracket";
}
if (token.type === "invalid" && (token.value === "@" || token.value === "#")) {
return "punctuator";
}
return token.type;
};
tokenize = function* (text) {
let match;
while (match = jsTokens.default.exec(text)) {
const token = jsTokens.matchToToken(match);
yield {
type: getTokenType(token, match.index, text),
value: token.value
};
}
};
function highlight(text) {
if (text === "") return "";
const defs = getDefs(true);
let highlighted = "";
for (const {
type,
value
} of tokenize(text)) {
if (type in defs) {
highlighted += value.split(NEWLINE$1).map(str => defs[type](str)).join("\n");
} else {
highlighted += value;
}
}
return highlighted;
}
let deprecationWarningShown = false;
const NEWLINE = /\r\n|[\n\r\u2028\u2029]/;
function getMarkerLines(loc, source, opts, startLineBaseZero) {
const startLoc = Object.assign({
column: 0,
line: -1
}, loc.start);
const endLoc = Object.assign({}, startLoc, loc.end);
const {
linesAbove = 2,
linesBelow = 3
} = opts || {};
const startLine = startLoc.line - startLineBaseZero;
const startColumn = startLoc.column;
const endLine = endLoc.line - startLineBaseZero;
const endColumn = endLoc.column;
let start = Math.max(startLine - (linesAbove + 1), 0);
let end = Math.min(source.length, endLine + linesBelow);
if (startLine === -1) {
start = 0;
}
if (endLine === -1) {
end = source.length;
}
const lineDiff = endLine - startLine;
const markerLines = {};
if (lineDiff) {
for (let i = 0; i <= lineDiff; i++) {
const lineNumber = i + startLine;
if (!startColumn) {
markerLines[lineNumber] = true;
} else if (i === 0) {
const sourceLength = source[lineNumber - 1].length;
markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1];
} else if (i === lineDiff) {
markerLines[lineNumber] = [0, endColumn];
} else {
const sourceLength = source[lineNumber - i].length;
markerLines[lineNumber] = [0, sourceLength];
}
}
} else {
if (startColumn === endColumn) {
if (startColumn) {
markerLines[startLine] = [startColumn, 0];
} else {
markerLines[startLine] = true;
}
} else {
markerLines[startLine] = [startColumn, endColumn - startColumn];
}
}
return {
start,
end,
markerLines
};
}
function codeFrameColumns(rawLines, loc, opts = {}) {
const shouldHighlight = opts.forceColor || isColorSupported() && opts.highlightCode;
const startLineBaseZero = (opts.startLine || 1) - 1;
const defs = getDefs(shouldHighlight);
const lines = rawLines.split(NEWLINE);
const {
start,
end,
markerLines
} = getMarkerLines(loc, lines, opts, startLineBaseZero);
const hasColumns = loc.start && typeof loc.start.column === "number";
const numberMaxWidth = String(end + startLineBaseZero).length;
const highlightedLines = shouldHighlight ? highlight(rawLines) : rawLines;
let frame = highlightedLines.split(NEWLINE, end).slice(start, end).map((line, index) => {
const number = start + 1 + index;
const paddedNumber = ` ${number + startLineBaseZero}`.slice(-numberMaxWidth);
const gutter = ` ${paddedNumber} |`;
const hasMarker = markerLines[number];
const lastMarkerLine = !markerLines[number + 1];
if (hasMarker) {
let markerLine = "";
if (Array.isArray(hasMarker)) {
const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\t]/g, " ");
const numberOfMarkers = hasMarker[1] || 1;
markerLine = ["\n ", defs.gutter(gutter.replace(/\d/g, " ")), " ", markerSpacing, defs.marker("^").repeat(numberOfMarkers)].join("");
if (lastMarkerLine && opts.message) {
markerLine += " " + defs.message(opts.message);
}
}
return [defs.marker(">"), defs.gutter(gutter), line.length > 0 ? ` ${line}` : "", markerLine].join("");
} else {
return ` ${defs.gutter(gutter)}${line.length > 0 ? ` ${line}` : ""}`;
}
}).join("\n");
if (opts.message && !hasColumns) {
frame = `${" ".repeat(numberMaxWidth + 1)}${opts.message}\n${frame}`;
}
if (shouldHighlight) {
return defs.reset(frame);
} else {
return frame;
}
}
function index (rawLines, lineNumber, colNumber, opts = {}) {
if (!deprecationWarningShown) {
deprecationWarningShown = true;
const message = "Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`.";
if (process.emitWarning) {
process.emitWarning(message, "DeprecationWarning");
} else {
const deprecationError = new Error(message);
deprecationError.name = "DeprecationWarning";
console.warn(new Error(message));
}
}
colNumber = Math.max(colNumber, 0);
const location = {
start: {
column: colNumber,
line: lineNumber
}
};
return codeFrameColumns(rawLines, location, opts);
}
exports.codeFrameColumns = codeFrameColumns;
exports.default = index;
exports.highlight = highlight;
//# sourceMappingURL=index.js.map
File diff suppressed because one or more lines are too long
+32
View File
@@ -0,0 +1,32 @@
{
"name": "@babel/code-frame",
"version": "7.29.7",
"description": "Generate errors that contain a code frame that point to source locations.",
"author": "The Babel Team (https://babel.dev/team)",
"homepage": "https://babel.dev/docs/en/next/babel-code-frame",
"bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen",
"license": "MIT",
"publishConfig": {
"access": "public"
},
"repository": {
"type": "git",
"url": "https://github.com/babel/babel.git",
"directory": "packages/babel-code-frame"
},
"main": "./lib/index.js",
"dependencies": {
"@babel/helper-validator-identifier": "^7.29.7",
"js-tokens": "^4.0.0",
"picocolors": "^1.1.1"
},
"devDependencies": {
"charcodes": "^0.2.0",
"import-meta-resolve": "^4.1.0",
"strip-ansi": "^4.0.0"
},
"engines": {
"node": ">=6.9.0"
},
"type": "commonjs"
}
+22
View File
@@ -0,0 +1,22 @@
MIT License
Copyright (c) 2014-present Sebastian McKenzie and other contributors
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+19
View File
@@ -0,0 +1,19 @@
# @babel/helper-validator-identifier
> Validate identifier/keywords name
See our website [@babel/helper-validator-identifier](https://babeljs.io/docs/babel-helper-validator-identifier) for more information.
## Install
Using npm:
```sh
npm install --save @babel/helper-validator-identifier
```
or using yarn:
```sh
yarn add @babel/helper-validator-identifier
```
+70
View File
@@ -0,0 +1,70 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isIdentifierChar = isIdentifierChar;
exports.isIdentifierName = isIdentifierName;
exports.isIdentifierStart = isIdentifierStart;
let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088f\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5c\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdc-\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c8a\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7dc\ua7f1-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
let nonASCIIidentifierChars = "\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0897-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0cf3\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ece\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1add\u1ae0-\u1aeb\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\u30fb\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f\uff65";
const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;
const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 4, 51, 13, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 7, 25, 39, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 39, 27, 10, 22, 251, 41, 7, 1, 17, 5, 57, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 31, 9, 2, 0, 3, 0, 2, 37, 2, 0, 26, 0, 2, 0, 45, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 200, 32, 32, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 24, 43, 261, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 26, 3994, 6, 582, 6842, 29, 1763, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 433, 44, 212, 63, 33, 24, 3, 24, 45, 74, 6, 0, 67, 12, 65, 1, 2, 0, 15, 4, 10, 7381, 42, 31, 98, 114, 8702, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 229, 29, 3, 0, 208, 30, 2, 2, 2, 1, 2, 6, 3, 4, 10, 1, 225, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4381, 3, 5773, 3, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 8489];
const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 7, 9, 32, 4, 318, 1, 78, 5, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 68, 8, 2, 0, 3, 0, 2, 3, 2, 4, 2, 0, 15, 1, 83, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 7, 19, 58, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 199, 7, 137, 9, 54, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 55, 9, 266, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 10, 5350, 0, 7, 14, 11465, 27, 2343, 9, 87, 9, 39, 4, 60, 6, 26, 9, 535, 9, 470, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4178, 9, 519, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 245, 1, 2, 9, 233, 0, 3, 0, 8, 1, 6, 0, 475, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];
function isInAstralSet(code, set) {
let pos = 0x10000;
for (let i = 0, length = set.length; i < length; i += 2) {
pos += set[i];
if (pos > code) return false;
pos += set[i + 1];
if (pos >= code) return true;
}
return false;
}
function isIdentifierStart(code) {
if (code < 65) return code === 36;
if (code <= 90) return true;
if (code < 97) return code === 95;
if (code <= 122) return true;
if (code <= 0xffff) {
return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));
}
return isInAstralSet(code, astralIdentifierStartCodes);
}
function isIdentifierChar(code) {
if (code < 48) return code === 36;
if (code < 58) return true;
if (code < 65) return false;
if (code <= 90) return true;
if (code < 97) return code === 95;
if (code <= 122) return true;
if (code <= 0xffff) {
return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));
}
return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);
}
function isIdentifierName(name) {
let isFirst = true;
for (let i = 0; i < name.length; i++) {
let cp = name.charCodeAt(i);
if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {
const trail = name.charCodeAt(++i);
if ((trail & 0xfc00) === 0xdc00) {
cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);
}
}
if (isFirst) {
isFirst = false;
if (!isIdentifierStart(cp)) {
return false;
}
} else if (!isIdentifierChar(cp)) {
return false;
}
}
return !isFirst;
}
//# sourceMappingURL=identifier.js.map
File diff suppressed because one or more lines are too long
+57
View File
@@ -0,0 +1,57 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "isIdentifierChar", {
enumerable: true,
get: function () {
return _identifier.isIdentifierChar;
}
});
Object.defineProperty(exports, "isIdentifierName", {
enumerable: true,
get: function () {
return _identifier.isIdentifierName;
}
});
Object.defineProperty(exports, "isIdentifierStart", {
enumerable: true,
get: function () {
return _identifier.isIdentifierStart;
}
});
Object.defineProperty(exports, "isKeyword", {
enumerable: true,
get: function () {
return _keyword.isKeyword;
}
});
Object.defineProperty(exports, "isReservedWord", {
enumerable: true,
get: function () {
return _keyword.isReservedWord;
}
});
Object.defineProperty(exports, "isStrictBindOnlyReservedWord", {
enumerable: true,
get: function () {
return _keyword.isStrictBindOnlyReservedWord;
}
});
Object.defineProperty(exports, "isStrictBindReservedWord", {
enumerable: true,
get: function () {
return _keyword.isStrictBindReservedWord;
}
});
Object.defineProperty(exports, "isStrictReservedWord", {
enumerable: true,
get: function () {
return _keyword.isStrictReservedWord;
}
});
var _identifier = require("./identifier.js");
var _keyword = require("./keyword.js");
//# sourceMappingURL=index.js.map

Some files were not shown because too many files have changed in this diff Show More