Týdenní poznámky: Scrapery a OpenAI API

Jak se mi daří v jednom člověku provozovat a rozvíjet junior.guru? Od posledních poznámek už utekl nějaký ten týden (19. 1. až 26. 1.), tak nastal čas se opět ohlédnout a utřídit si myšlenky.

Poznámky

Apify na produkci

Dokončil jsem přesun scraperů na Apify, opravil jsem jeden zásadní scraper, a pak jsem na Apify připojil produkci junior.guru. Pracovní inzeráty se stahují z Apify API, místo aby se scrapovaly přímo u mně. Výsledný Pull Request odebral z kódu junior.guru skoro 21.000 řádků kódu a přidal 230. To mi dělá ohromnou radost.

O jednotlivostech se asi nemá smysl moc rozepisovat. Řešil jsem monitoring, cachování, no různé věci.

Klukům z Apify jsem dál koukal pod ruce, otravoval je na Discordu, a dokonce jsem se zapletl do jednoho code review.

OpenAI API

Po přesunu scraperů jsem hned začal napojovat junior.guru na OpenAI API. Chci pracovní inzeráty posílat GPT na vyhodnocení. To se mi povedlo hned, s krásnými výsledky, jenže pak začala bitva o rate limiting. Abych projel stovky inzerátů, nasázel je do GPT a dostal výsledky, potřebuju se nějak vlézt do limitů, které mi OpenAI dává. A to byl problém.

Zkoušel jsem knihovnu openlimit, která plus minus fungovala, ale nebyla v dobré kondici. Musel jsem ji instalovat z nějakého forku apod. Nakonec jsem to podle návodu přímo od OpenAI předělal na tenacity, což je pěkné, obecné řešení.

Ale stále to ještě ladím. Hloupé je, že to párkrát spustím a je konec, dosáhnu limitu 10.000 požadavků na den. Takže někdy na tom prostě musím v půlce přestat pracovat, jít dělat jiné věci, a pokračovat druhý den.

Jsem už schopen projet všechny inzeráty a dostat se na konec skriptu, ale celé to trvá 10 minut, což je příšerné. Možná to tak ale budu prostě muset dělat. Leda že bych našel alternativní API, kde to funguje jinak.

Další

  • Sepsal jsem konečně článek, kde jsou mé aktuální plány.
  • Měl jsem rýmu a některé dny jsem pracoval z postele.
  • Byli jsme na LEGO výstavě.
  • Optimalizoval jsem, jak se v mém kódu pracuje s asyncio loops. Místo procesů jsem vrazil vlákna a hned je vše rychlejší.
  • Řešil jsem, jak udělat progress bar, když mám hromadu asyncio tasků a posílám je do asyncio.gather(). Našel jsem toto milé řešení, ale nakonec jsem to udělal stejně jinak (přes asyncio.as_completed()).
  • Připravil jsem podklady pro zpracování daňového přiznání. Když už jsem lezl do všech účtů a stahoval dokumenty, spočítali jsme si s manželkou, kolik máme celkem peněz, což několikrát ročně děláme.
  • Podíval jsem se na nespárované platby ve Fakturoidu a spároval je.
  • E-maily, klubový Discord, Pyvec Slack, zprávy na LinkedIn.
  • Za 8 dní jsem se nevěnoval žádné sportovní aktivitě.

Plánuji

  1. Doladím nějak třídění inzerátů přes LLM. Ideálně pak smažu veškerý kód, který řeší třídění inzerátů teď.
  2. Přidám podporu pro slovenštinu.
  3. Vyberu a naplánuju klubové přednášky na rok 2024.

Zaujalo mě

Když na něco narazím a líbí se mi to, sdílím to na Mastodonu. Od posledních poznámek jsem sdílel: