Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Stahování z czshare pomocí terminálu  (Přečteno 4940 krát)

Kamil Hanus

  • Aktivní člen
  • *
  • Příspěvků: 221
    • kamilhanus.cz
Stahování z czshare pomocí terminálu
« kdy: 16 Července 2012, 17:39:00 »
Ahoj,
protože jsem nenašel (třeba jsem hledal špatně :) ) funkční terminálový program pro stahování z czshare.com a instalovat na RaspberryPi javu, pokud by to šlo, by byla sebevražda, napsal jsem tento program. Původně měl být minimalistický, ale jak narůstali požadavky, kód se lepil a rostl. V další verzi ho snad pročistím na potřebné minimum.

Je potřeba mít nainstalovaný python, což má v Ubuntu snad každý. Dále python-mechanize a blessings modul, který je přibalen. Určitě by se našel nějaký uber-coder, který by to napsal pouze pomocí wgetu, ale to já nejsem  ;)

Stahovat můžete z githubu https://github.com/arthurwozniak/CzGet
PS: Je to můj první commit, takže se s tím ještě učím
Only wimps use tape backup: _real_ men just upload their important stuff on ftp, and let the rest of the world mirror it ;)

starenka

  • Stálý člen
  • **
  • Příspěvků: 1276
  • Karma: plynová [zapalovač] [hasičák]
    • /home/starenka
Re:Stahování z czshare pomocí terminálu
« Odpověď #1 kdy: 23 Července 2012, 01:35:24 »
neber to nejak ve zlym, ale mam par poznamek:

- zavislosti bejva dobry psat do souboru requirements, takze si je pak muze clovek nainstlaovat do virtualenvu najednou "pip install -r requirements.pip"
- cywe to je hodne c style zapis a totalni kopypasta - krvaci mi z toho srdce, kdyz vidim takle psat python. Par z miliona prikladu
Kód: [Vybrat]
> x=0
> for i in self.content:
>     self.content[x]=re.sub("\n","",i)
>     x+=1

se da prepsat na:

> for i in enumerate(self.content):
>    self.content[x]=re.sub("\n","",i)

nicmene jesli chapu dobre, ze to ma nahradit \n za nic, tak elegantnejc:

> map(lambda x: x.replace('\n',''), self.content)
nebo
> [one.replace('\n','') for one in self.content]

zbytecne ne == ckovat:
> if os.path.isfile(filename)==True:
je stejny jako
> if os.path.isfile(filename)
- obecne bych se vyhnul printum, zkus pouzit logging modul. Hlasy si pak muzes sypat na stdout nebo kamkoliv jinam
- pokud nutne nepotrebujes neco strasne speci, doporucuju misto mechanize pouzit https://github.com/kennethreitz/requests a https://github.com/kennethreitz/clint je na terminal taky super. nez se morit s regularama na hledani veci ve strankach, pouzi pyquery. na takovyto domaci scrapovani klidne i muj smirgl https://github.com/starenka/emery

tak at se dari, drzim palce
mojenka | blozinek v2 | starej blozinek | krotim hady za penize | UJ! Kalužátor

Debian testing vrní v Thinkpadu X200/bedně/EEE 900a, MasoX Tiger v lampe

Kamil Hanus

  • Aktivní člen
  • *
  • Příspěvků: 221
    • kamilhanus.cz
Re:Stahování z czshare pomocí terminálu
« Odpověď #2 kdy: 23 Července 2012, 21:49:03 »
Upřímně, doufal jsem v nějakou tvou kritiku  :) Doufám že do konce týdne si udělám víc času abych se na to mohl pořádně mrknout. Každopádně nevím jestli je to přímo zápisem kódu nebo (ne)rychlostí Raspberry, ale než odpoví parser, že chybí nějaké argumenty, trvá to i pár sekund. To je podle mě strašně moc.

- o pipu jsem neměl vůbec ponětí, díky ;)
- nebude použití enumerate v podstatě to samý a řádky se stejně neušetří? Co se na to dívám, tak bych stejně musel počítat pozici v seznamu. Ta lambda vypadá dobře, ale doteď jsem byl líný o ní něco hledat. Jinak kopypasta to není, na psaní prasáckejch kódů mám talent
- vyzkouším
- rád bych mechanize a podobné moduly vynechal úplně a napsal nějaký lightweight modul, aby se urllib neimportovalo dvakrát. Asi hodně utopická myšlenka s mým skillem
Only wimps use tape backup: _real_ men just upload their important stuff on ftp, and let the rest of the world mirror it ;)

starenka

  • Stálý člen
  • **
  • Příspěvků: 1276
  • Karma: plynová [zapalovač] [hasičák]
    • /home/starenka
Re:Stahování z czshare pomocí terminálu
« Odpověď #3 kdy: 23 Července 2012, 21:58:08 »
- pipina je super - staci si udelat balik (tj de fakto jen setup.py) a muzes instaloval primo z http://pypi.python.org/pypi nebo odkudkoliv odjinud (klasicky github)
- no enumerate ti ulevi od toho si delat pred cyklem counter a jeho inkrementace v nem, nehlede na to, ze je to build-in.
ja sem se tam upsal - psal sem to po pameti, spravne to ma bejt takle a z toho uz ti to asi bude jasnejsi:
Kód: [Vybrat]
In [3]: for i,one in enumerate(range(10,20)): print i, one
0 10
1 11
2 12
3 13
4 14
5 15
6 16
7 17
8 18
9 19
- lambda (anonymni funkce) je fajn, ale nesmi se to s ni prehanet
- kopypasta - tim myslim, ze nejakej kode sem tam videl minimalne 2x stejnej
- ad logging: je to strasne mocny, nehlede na to, ze si muzes napsat vlastni handlery a soupat si to kamkoliv. super je treba kombinace raven+sentry. Onehda sem trosku pomahal s log4mongo https://github.com/starenka/log4mongo-python
- ad mechanize: no, pokud ti muzu radit, tak pokud chces zustat dusevne zdravej, urlib se vyhni. je to docela monstrum, timeouty musis clovek resit socketama, gzip, hlavicky, cookies taky nic moc atd... trosku zbytecne lowlevel a bordel. requests je luxusni knihovna s minimem zavislosti (tusim, ze snad jen simplejson). na pipine a githubu jsou ziliony projektu, nema cenu vynalejzat kolo a psat si to sam (imo)

tak at ti to slape, drzim palce

ps. ad rychlost, zkus to vzit gzipem (poslat hlavicku, ze umis gzip, mohlo by to pomoct), na takle malejch strankach asi nebude mezi knihovnama znatelnej rozdil v parsovani....
pps. mozna by si moh brat prihlasovaci udaje z klasickyho ~/.netrc - takle specifikovany pres lajnu pak visi v historii shellu a to neni asi uplne nejlepsi...
« Poslední změna: 23 Července 2012, 22:05:27 od starenka »
mojenka | blozinek v2 | starej blozinek | krotim hady za penize | UJ! Kalužátor

Debian testing vrní v Thinkpadu X200/bedně/EEE 900a, MasoX Tiger v lampe

Kamil Hanus

  • Aktivní člen
  • *
  • Příspěvků: 221
    • kamilhanus.cz
Re:Stahování z czshare pomocí terminálu
« Odpověď #4 kdy: 12 Srpna 2012, 20:45:40 »
Chvíli to trvalo (nebyl čas), ale dostal jsem se k updatnutí. Kód sice ještě není úplně košér, ale myslím si, že se docela zjednodušil. V další verzi doufám rozchodím dokončení rozstahovaného souboru a printy nahradím loggerem. Kód je stále na githubu.
Only wimps use tape backup: _real_ men just upload their important stuff on ftp, and let the rest of the world mirror it ;)

starenka

  • Stálý člen
  • **
  • Příspěvků: 1276
  • Karma: plynová [zapalovač] [hasičák]
    • /home/starenka
Re:Stahování z czshare pomocí terminálu
« Odpověď #5 kdy: 13 Srpna 2012, 08:18:25 »
na konfigurak bych pouizil http://docs.python.org/library/configparser.html  a nebo treba json 8) btw base64 neni zadny sifrovani, je to jen kodovani, ktery neni problem vratit zpet (koukni do jakyhokoliv mailu s prilohou). Uz se to zacina rysovat a je videt, ze te to asi docela bavi. Supr.
« Poslední změna: 30 Srpna 2012, 21:01:31 od starenka »
mojenka | blozinek v2 | starej blozinek | krotim hady za penize | UJ! Kalužátor

Debian testing vrní v Thinkpadu X200/bedně/EEE 900a, MasoX Tiger v lampe

Kamil Hanus

  • Aktivní člen
  • *
  • Příspěvků: 221
    • kamilhanus.cz
Re:Stahování z czshare pomocí terminálu
« Odpověď #6 kdy: 13 Srpna 2012, 14:50:20 »
Base64 jsem bral jen jako featurku, kdyby byl sdílený účet s někým jiným. Chápu, že to jde hnedka dát zpátky. Původně jsem odstraňoval poslední znak - měl jsem nějak zažitý, že tam je rovnítko. Nakonec jsem to nechal tak, jak je to teďka, ale snad nějak vymyslím lepší ukládání hesla.
Only wimps use tape backup: _real_ men just upload their important stuff on ftp, and let the rest of the world mirror it ;)

Kamil Hanus

  • Aktivní člen
  • *
  • Příspěvků: 221
    • kamilhanus.cz
Re:Stahování z czshare pomocí terminálu
« Odpověď #7 kdy: 30 Srpna 2012, 20:01:56 »
Dostal jsem se k nějakým menším změnám - https://github.com/arthurwozniak/CzGet Každopádně s narůstajícím kódem se to pěkně svi*í, takže asi bude lepší udělat rozsáhlejší revizi kódu.
Only wimps use tape backup: _real_ men just upload their important stuff on ftp, and let the rest of the world mirror it ;)

František Zatloukal

  • Závislák
  • ***
  • Příspěvků: 1799
    • frantisek.zatloukalu.eu
Re:Stahování z czshare pomocí terminálu
« Odpověď #8 kdy: 30 Srpna 2012, 22:21:42 »
Btw, kdybys náhodou neměl co na práci, zkus udělat uploader ;)
Jinak gj, jen tak dál.
« Poslední změna: 30 Srpna 2012, 22:35:30 od František Zatloukal »
First they ignore you, then they laugh at you,
then they fight you, then you win.
Powered by Fedora 22 | Ubuntu 15.10

 

Provoz zaštiťuje spolek OpenAlt.