!7 concept Slurpable { S videoID; bool slurped; } cmodule YouTubeSurfer > DynPrintLogAndEnabled { switchable double interval = 10.0; start-thread { dbIndexing(Slurpable, 'videoID); if (noConcepts(Slurpable)) addVideoID("GKvMhYCJA-c"); doEvery(interval, rEnter { if (enabled) slurpOne() }); print("URLs: " + countConcepts(Slurpable) + ", slurpable: " + l(urlsToSlurp())); print("Fetch interval: " + interval + " s"); } void addVideoID(S videoID) { uniq Slurpable(+videoID); } Cl urlsToSlurp() { ret conceptsWhere(Slurpable, slurped := false); } void slurpOne { Slurpable s = random(urlsToSlurp()), ret if null; for (PairS p : videoLinksFromYouTubePage(s.videoID)) addVideoID(p.a); cset(s, slurped := true); } }