Bandcamp explorer
Bandcamp je jeden z těch moderních webů platforem, které se ve své
nekonečné moudrosti rozhodly ignorovat RSS. Proč se zdržovat s univerzálně podporovaným standardem, který lidem umožňuje sledovat novinky od
jejich oblíbených skupin a žánrů, tím je dostat zpátky na sajtu a dát jim
možnost utratit pár €€€ za nové album, ze kterých si bandcamp vezme svých
pár procent? Ne, to dává příliš velký smysl. Bandcamp je platforma &
platformy si hrají na vlastním písečku, protože proto.
Tohle jsem už jednou řešil. Někde na k47čce se dá najít RSS export produkce vybraných post-rockových a post-metalových skupin. Co kdybych vzal scrapovací kód, mírně ho rozšířil do podoby robota, který vytrvale crawluje celý bandcamp a poskytne RSS feed pro každou skupinu a každý tag? Proč ne?
Tak přesně to je bandcamp explorer – jednoduchá věc, která ve strohém UI nabízí přehled nově vydaných alb, jejich export jako RSS a nějaké drobnosti navíc.
Jednoduché, co? Ano i ne. Záhy se ukázalo, že na bandcampu je víc alb než naznačovaly rané odhady. První kompletní crawl vyšťoural 890000 alb, EP a single tracků od 87000 umělců. Navíc zcela jistě nejde o kompletní obraz všeho, co se tam dá najít, tím jsem si jistý.
Od té doby crawler (s přestávkami) běží a objevuje další obsah, nové skupiny, nové umělce, nová alba. Celé je to dimenzované tak, aby to běželo na maličkém Raspberry Pi s 1 GB RAM. Nejde o žádný velký stroj, dokonce by se dalo říct, že výkonem a prostředky jde o pravý opak, menší než běžný mobil. Pravda, ale crawler/generátor se tam s trochou pomoci vejde a má dostatečnou rezervu, aby nepřekážel ostatním procesům, co tam běží. Bylo potřeba udělat několik zajímavých optimalizací, co se paměti týká, a na divoké pokusy padl nějaký ten večer.
Všechno běží na PHP – jak proces generující databázi a tak i webový skript – a to není jazyk zrovna proslulý svou úsporností. Pro dostatečně motivovaného
dělníka to nepředstavuje problém, cíl je jasný a musí se ho dosáhnout za každou
cenu, následky budiž proklety. Experimentování ukázalo, že dva nejdůležitější
triky jsou: objekty reprezentovat jako lehce serializované stringy (stačí
atributy spojit a oddělit \0
) a používat línou materializaci, ale vyhýbat se
při ní použití yield
a Closure
, které sežerou překvapivá kvanta paměti.
Shrnuto, podtrženo: když zkusím dostatečné množství stupidních nápadů, jeden z nich bude fungovat.
Crawler jede přiměřeně pomalým tempem. Vychází to, že by měl objet celý bandcamp jednou za týden. Crawlování běží v náhodném pořadí a aktualizace nemají žádné garance nebo limity, jen ty stochastické ve stylu, že když hodím kostkou mnohokrát, eventuálně padne každé číslo a každé skupina bude eventuálně aktualizovaná.
A to je všechno: „bandcamp explorer“ je nápad, který jsem měl před ±půl rokem a z důvodů mimo moji kontrolu ožívá až teď. A protože ho sám používám, bude mě to motivovat, ho držet v chodu.
+1: V testovacím provozu jsem sledoval pár tagů a už jsem v nich našel pár nových & zajímavých věcí. Třeba Some Became Hollow Tubes. Klasická konstelace alba: Dva tracky, každý má 17 minut, hudba je nekenčná, ale stále vře a nikdy nezačne nudit (à la Western Lands).