k47.cz
mastodon twitter RSS
bandcamp explorer 0xDEADBEEF
««« »»»

Bandcamp explorer

— k47

Bancamp neměl RSS. Teď ho má.

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í yieldClosure, 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).

píše k47, ascii@k47.cz