Open havremunken opened 9 years ago
Ah så ikke dette spørsmålet før jeg la ut svar på rbkweb.
Fant ut at jeg kunne finne en "kode" på websiden for salg av pakken/kampene som sammen med eventid kan brukes til å snekre sammen faktisk URL for availability.xml filen.
Det skjuler seg noe rammeverk bak URLen som server availabilit.xml filer, så vha feilmeldinger kunne jeg prøve meg litt frem og finne et mønster som virker.
[basic URL] + kode + "-2015,NO-" + eventid + ".xml" (sånn omtrentlig) gir availability URL.
Filene var ikke tilgjengelig når jeg prøvde, men etterpå har vegardj klart å laste ned med samme URL for de to første kampene.
Kodene for kampene var TLDEL001, TLDEL002 og TLDEL003. TLD bety "Trondheim Lerkendal" for Billettservice og alle kamp-koder ser ut til å starte med det.
Kode for "value event" var TLDELC, men uklart hva denne er. Koden for selve "pakken" ser ut til å være TLDELP, men URLen det gav førte til feilkode at denne event ID ikke eksisterte. Så mulig at pakkesalget er "eid" av "value event" eller at det er noe annet. Mulig pakkesalget bare er løst med egne koder også.
Må tenke igjennom litt hva dette betyr for innsamling av data. Spørs om vi bør ha en eller annen variant av collektoren hvor vi kan gi inn en event ID eller en liste med event IDer ved oppstart, så leter collectoren opp matchende websider, graver fram kamp koder, lager URL for availability.XML og setter igang innsamling for disse så lenge den får svar. Så får vi sette igang slike halvmanuelle innsamlinger de gangene det dukker opp kamper som er halvveis skjult for oss på denne måten.
Andre ideer?
Hva med å dele opp prosessen i to deler (omtrentelig det du er inne på over):
1) Collector sjekker BS-siden til RBK for å se om det har kommet nye events. Har det det, legges de inn i event-tabellen.
2) Collector leser event-tabellen og forsøker å dra ned data for de eventene som ligger der.
Så kan vi da legge inn events manuelt i tilfeller som dette - forhåpentligvis sjeldent nødvendig, men potensielt nyttig i spesielle situasjoner, som her hvor RBK ikke selger enkeltbilletter før pakkesalget har pågått lenge.
Klart, dette forutsetter jo da et ekstra nivå med kompleksitet i det collectoren må vite om SQL-tabellene, og vi må være flinke til å sync'e endringer på tabeller o.l.
Så - koster det mer enn det smaker?
Hm, ja vi kan gjøre noe ala dette, men usikker på om vi bør bruke databasen direkte fra collectoren eller ikke.
Må uansett eksperimentere litt med kode som ut ifra eventid (og en antagelse om at kampen kanskje ikke finnes fra BS sin søkeside) kan lete opp kampsiden og kamp-koden og forsøke generere en korrekt availabilityURL fra det. Så må vi også takle at kampen kanskje ikke er tilgjengelig for nedlasting fra starten av, hva gjør vi da? Prøver på nytt hver "periode" vi laster ned nye filer? Når gir vi evt. opp en kamp som vi har lagt til manuelt? Et par timer etter kampstart?
Muligens kan vi endre kriteriene for å avslutte nedlasting generelt til å være X tid etter kampstart istedet for det tidspunktet fila ikke synes fra BS søkesiden lenger.
Dette krever tankevirksomhet ja. :)
Jeg ser poenget med å holde collectoren unna databasen - det vil komplisere ting og gjøre sync oss imellom mer komplisert.
Det er vel ikke sånn at dette nødvendigvis må skalere så veldig mye - det vil vel sannsynligvis aldri gjelde noe særlig mer enn tre kamper om gangen? Allikevel så kan det være greit at vi har mulighet til å legge til kamper i fart uten fare for at det fucker opp noe. Hva med noe sånt:
Vi lager vår egen "filtype" som heter .ulm (UnListed Match) e.l. - en .ulm-fil inneholder info om én match som ikke er "tilgjengelig" som normalt på BS. Vi har en mappe som vi legger disse filene i (de kan godt genereres av f.eks. web-api'et for alt jeg vet), og hver runde med datasanking sjekker collectoren etter .ulm-filer i denne mappa, leser dem, og forsøker å hente ned data basert på det som er i fila. Går det, hurra, går det ikke så prøver vi igjen neste gang.
Also, når collectoren ser en ny kamp på BS-siden, så kan den sjekke - har jeg noen .ulm for denne eventen? Hvis så, flytt den til .ulm-arkivet, da vi fra og med nå forventer å behandle denne eventen som alle andre.
Unødig komplisert? Problematisk? Vet ikke om dette er den beste måten men det burde vel kunne funke sånn noenlunde..
Tenkte i samme bane, vi får ha en fil som lar deg dynamisk legge til noe informasjon som forteller collectoren at den også skal sjekke nøye etter kamp x,y og z. Så kan du manuelt fjerne det igjen når du ikke vil at collectoren skal se etter den kampen. Dersom collectoren selv ser kampen uansett så bør ikke det påvirke noe, den slår bare sammen lista med URLer som den skal laste ned enten det kommer herfra eller derfra.
På RBKweb har denyngstelillebroren klart å finne IDene til hjemmekampene i EL.
http://www.rbkweb.no/forum/viewtopic.php?p=794764#794764
Enkeltkampene ligger ikke i "Rosenborg-lista" til BS enda, så collectoren ser dem ikke. Den ser "pakke-eventen" men den er jo annerledes så ingen overraskelse at ikke den fører til noe nedlastning av data.
Ved å jukse litt med URL-mønstre kan vi jo f.eks. finne frem til siden til kampen mot Dnipro:
http://www.billettservice.no/event/472047
Men den har ingen availabilityUrl foreløpig, så da er vi vel fucked inntil videre?