[python] Twitter klient- návrh aplikace - diskuze k teoretickému řešení.

Martin Stiborský martin.stiborsky na gmail.com
Pátek Říjen 24 15:21:34 CEST 2008


Zdravím, nevím pokud někdo používáte Twitter, pokud ne, nejspíš tušítě
na co to je (vlastně na nic, ale to je jedno :))
Vadí mi na něm jedna věc, když navštívím svůj účet třeba po půl dni
kdy jsem na něj nekoukl, tak dostanu jenom 20 posledních zpráviček a
kvůli těm starším se musím složitě vracet. Můj klient by mi ukázal
jenom ty nové od poslední návštěvy a starší pouze na vyžádní. Málokdy
se potřebuji kouknout na staré tweety, zajímají mě aktuální a ty,
které jsem ještě nečetl. Sepsal jsem trochu teorie, jak to realizovat.
Byl bych moc rád za vaše připomnky,

Aplikace se skládá ze dvou částí.
Démon slouží k sbírání dat z twitteru pro jednotlivé registrované účty.
Klient nasbíraná data zobrazuje a cachuje.

Démon se spouští každou celou hodinu, to je nejmenší možný interval,
kdy se účty automaticky zaktualizují = dojde k načtení nových tweetů a
jejich uložení.

Twitter API uvádí, že pro jeden dotaz, by počet načtených tweetů neměl
překročit 200 kousků, pokud nějaký účet má za hodinu více než 200
zpráv, je to nemilé a asi bude mít smůlu a v jeho timeline kterou mu
má aplikace zobrazí bude mít díru.

Při spuštění démona se připraví dva seznamy.
V prvním bude seznam účtů, které se zaktualizují v tomto cyklu, v tom
druhém ty, které až další celou hodinu. Při dalším spuštění démona už
bude k dispozici seznam pro aktuální refresh, jenom se připraví seznam
pro další cyklus.
Výběr závisí na několika kritériích.
Po registraci mají všechny účty defaultně automaticky refresh každou
celou hodinu, ale podle toho, kolik tweetů se u účtu za hodinu
průměrně načte, se může interval prodlužit. Například pokud průměr
počtu nových tweetů za hodinu počítaný z 10 automatických refreshů
bude menší než 30, tak se interval prodlouží na automatický refresh
každou druhou hodinu. Těch 30 jsem jenom střelil, určit hranici budu
muset za provozu.
Další věc, která může posunout refresh na další hodinu, je aktualizace
kterou provedl uživatel například návštěvou svého profilu, tom případě
se načtou nové tweety hned, nové se filtrují pomocí parametru "since"
(z Twitter API) který očekává datum a čas a vybere všechny tweety
starší než zadaný parametr, tento parametr získám z databáze, u
každého účtu uchovávám datum poslední návštěvy, které se ale bude
upravovat taky kvůli automatickým refreshům. Při uživatelově refreshi,
se taky účet vykopne ze seznamu pro aktualizaci v dalším cyklu, pokud
v něm je.

Při načtení tweetů ze serverů Twitteru, se každý tweet uloží do
databáze, označí se svým id, jak tím twitterovským, tak databázovým.
Budu muset vyřešit jak je třídit mezi timeline jednotlivých
uživatelů... Posledních řekněme 300 tweetů, se bude cachovat do XML,
samostaný soubor pro každý účet, tím budu co nejmíň otravovat svou
databázi a taky to bude příjemnější pro AJAX manipulaci s tweety ve
frontendu aplikace. Pokud by uživatel chtěl kouknout na své tweety
starší než je těch 300 v XML, dostane je z databáze.

Realizace pomocí python-twitter, sqlite, pylons.
Chci co nejmíň otravovat servery twitteru, koukal jsem že tam jsou
nějaká omezení na počet připojení a další věci, to budu muset ještě
prozkoumat, pokud to opravdu dám do kupy, je mi jedno jestli to někdo
bude používat, mohl bych to udělat jen pro sebe, ale je zajímavější
řešit jak to zpřístupnit i dalším lidem.

-- 
S pozdravem
Martin Stiborský

Jabber: stibi na njs.netlab.cz
ICQ: 224-065-849


Další informace o konferenci Python