Telegram bot alang sa personal nga pagpili sa mga artikulo gikan sa Habr

Para sa mga pangutana sama sa "ngano?" adunay mas karaan nga artikulo - Natural Geektimes - paghimo sa wanang nga limpyo.

Adunay daghang mga artikulo, alang sa suhetibong mga hinungdan ang pipila niini dili nako gusto, ug ang uban, sa sukwahi, makaluluoy nga laktawan. Gusto nako nga ma-optimize kini nga proseso ug makatipig oras.

Ang artikulo sa ibabaw nagsugyot sa usa ka in-browser scripting nga pamaagi, apan dili gyud ko ganahan niini (bisan tuod nga gigamit na nako kini kaniadto) tungod sa mosunod nga mga rason:

  • Alang sa lainlaing mga browser sa imong kompyuter/telepono, kinahanglan nimo nga i-configure kini pag-usab, kung mahimo.
  • Ang estrikto nga pagsala sa mga tagsulat dili kanunay kombenyente.
  • Ang problema sa mga tagsulat kansang mga artikulo dili nimo gusto nga palabyon, bisan kung kini gipatik kausa sa usa ka tuig, wala masulbad.

Ang pagsala nga gitukod sa site base sa mga rating sa artikulo dili kanunay kombenyente, tungod kay ang labi ka espesyal nga mga artikulo, bisan pa sa ilang kantidad, makadawat usa ka medyo kasarangan nga rating.

Sa sinugdan, gusto nako nga maghimo usa ka RSS feed (o bisan daghan), nagbilin lamang mga makapaikag nga mga butang didto. Apan sa katapusan, kini nahimo nga ang pagbasa sa RSS ingon og dili kaayo kombenyente: sa bisan unsa nga kaso, sa pagkomento/pagboto alang sa usa ka artikulo/pagdugang niini sa imong mga paborito, kamo kinahanglan nga moagi sa browser. Mao nga nagsulat ako usa ka bot sa telegrama nga nagpadala mga makapaikag nga artikulo kanako sa usa ka personal nga mensahe. Ang Telegram mismo naghimo sa matahum nga mga preview gikan kanila, nga, inubanan sa kasayuran bahin sa tagsulat / rating / pagtan-aw, tan-awon nga adunay kasayuran.

Telegram bot alang sa personal nga pagpili sa mga artikulo gikan sa Habr

Ubos sa pagputol mao ang mga detalye sama sa mga bahin sa trabaho, ang proseso sa pagsulat ug teknikal nga mga solusyon.

Sa mubo bahin sa bot

Repositoryo: https://github.com/Kright/habrahabr_reader

Bot sa telegrama: https://t.me/HabraFilterBot

Ang user nagtakda og dugang nga rating alang sa mga tag ug mga tagsulat. Pagkahuman niana, usa ka filter ang gipadapat sa mga artikulo - ang rating sa artikulo sa Habré, ang rating sa tiggamit sa tagsulat ug ang average alang sa mga rating sa gumagamit pinaagi sa tag gidugang. Kung ang kantidad mas dako pa sa gitakda sa user nga threshold, nan ang artikulo moagi sa filter.

Ang usa ka kilid nga katuyoan sa pagsulat sa usa ka bot mao ang pag-angkon og kalingawan ug kasinatian. Dugang pa, kanunay nakong gipahinumdoman ang akong kaugalingon niana Dili ko Google, ug busa daghang mga butang ang gihimo sa yano ug bisan sa karaan kutob sa mahimo. Bisan pa, wala kini makapugong sa proseso sa pagsulat sa bot gikan sa pagkuha sa tulo ka bulan.

Summer kadto sa gawas

Ang Hulyo natapos na, ug nakahukom ko nga magsulat ug bot. Ug dili lamang, apan kauban ang usa ka higala nga nag-master sa scala ug gusto nga isulat ang usa ka butang niini. Ang sinugdanan morag nagsaad - ang code pagaputlon sa usa ka team, ang buluhaton ingon og sayon ​​​​ug ako naghunahuna nga sa usa ka magtiayon nga mga semana o usa ka bulan ang bot andam na.

Bisan pa sa kamatuoran nga ako mismo nagsulat og code sa bato matag karon ug unya sulod sa pipila ka mga tuig, walay usa nga kasagarang makakita o motan-aw niini nga code: mga proyekto sa binuhi, pagsulay sa pipila ka mga ideya, preprocessing data, pag-master sa pipila ka mga konsepto gikan sa FP. Interesado gyud ko kung unsa ang hitsura sa pagsulat sa code sa usa ka team, tungod kay ang code sa bato mahimong isulat sa lahi kaayo nga mga paagi.

Unsa man unta ang nawala mao nga? Hinuon, dili ta magdali-dali sa mga butang.
Ang tanan nga mahitabo mahimong masubay gamit ang commit history.

Ang usa ka kaila naghimo og repository niadtong Hulyo 27, apan wala nay laing gibuhat, mao nga nagsugod ko sa pagsulat og code.

30 Hulyo

Sa mubo: Nagsulat ko og parsing sa rss feed ni Habr.

  • com.github.pureconfig alang sa pagbasa sa mga typeafe configs direkta ngadto sa mga klase sa kaso (kini nahimong sayon ​​​​kaayo)
  • scala-xml alang sa pagbasa sa xml: tungod kay sa sinugdan gusto nakong isulat ang akong kaugalingon nga pagpatuman alang sa rss feed, ug ang rss feed naa sa xml format, gigamit nako kini nga librarya para sa pag-parse. Sa tinuud, nagpakita usab ang RSS parsing.
  • scalatest alang sa mga pagsulay. Bisan sa gagmay nga mga proyekto, ang pagsulat sa mga pagsulay makadaginot sa oras - pananglitan, kung ang pag-debug sa xml parsing, labi ka dali nga i-download kini sa usa ka file, pagsulat sa mga pagsulay ug pagkorihir sa mga sayup. Sa diha nga ang usa ka bug sa ulahi nagpakita uban sa pag-parse sa pipila ka katingad-an nga html nga adunay dili balido nga utf-8 nga mga karakter, kini nahimo nga mas sayon ​​​​nga ibutang kini sa usa ka file ug makadugang sa usa ka pagsulay.
  • mga aktor gikan sa Akka. Sa tinuud, wala sila kinahanglana, apan ang proyekto gisulat alang sa kalingawan, gusto nako nga sulayan kini. Ingon usa ka sangputanan, andam ako nga isulti nga ganahan ko niini. Ang ideya sa OOP mahimong tan-awon gikan sa pikas nga bahin - adunay mga aktor nga nagbinayloay og mga mensahe. Ang mas makaiikag mao nga mahimo nimo (ug kinahanglan) pagsulat sa code sa paagi nga ang mensahe mahimong dili moabut o dili maproseso (sa kinatibuk-an nga pagsulti, kung ang account nagdagan sa usa ka kompyuter, ang mga mensahe kinahanglan nga dili mawala). Sa una nagkamot ko sa akong ulo ug adunay basura sa code nga adunay mga aktor nga nag-subscribe sa usag usa, apan sa katapusan nakahimo ako nga makahimo og usa ka yano ug elegante nga arkitektura. Ang code sa sulod sa matag aktor mahimong isipon nga single-threaded; kung ang usa ka aktor nahagsa, ang acca magsugod pag-usab - ang resulta mao ang usa ka sistema nga dili makatarunganon nga sayup.

9 Ago

Gidugang nako ang proyekto scala-scrapper alang sa pag-parse sa mga panid sa html gikan sa Habr (aron makuha ang impormasyon sama sa rating sa artikulo, gidaghanon sa mga bookmark, ug uban pa).

Ug mga Iring. Ang mga sa bato.

Telegram bot alang sa personal nga pagpili sa mga artikulo gikan sa Habr

Dayon nagbasa ko og libro bahin sa gipang-apod-apod nga mga database, ganahan ko sa ideya sa CRDT (Conflict-free replicated data type, https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type, habr), mao nga nag-post ako usa ka klase nga klase sa usa ka commutative semigroup alang sa kasayuran bahin sa artikulo sa Habré.

Sa tinuud, ang ideya yano ra - kami adunay mga counter nga nagbag-o nga monotonically. Ang gidaghanon sa mga promosyon anam-anam nga nagtubo, ingon man ang gidaghanon sa mga plus (ingon man ang gidaghanon sa mga minus). Kung ako adunay duha ka bersyon sa kasayuran bahin sa usa ka artikulo, nan mahimo nako nga "iusa kini" - ang estado sa counter nga mas dako giisip nga mas may kalabotan.

Ang semigroup nagpasabot nga ang duha ka butang nga adunay impormasyon bahin sa usa ka artikulo mahimong i-merge sa usa. Ang Commutative nagpasabot nga mahimo nimong i-merge ang A + B ug B + A, ang resulta wala magdepende sa order, ug sa katapusan ang pinakabag-o nga bersyon magpabilin. By the way, naa pud associativity diri.

Pananglitan, ingon sa giplano, ang rss pagkahuman sa pag-parse naghatag gamay nga huyang nga kasayuran bahin sa artikulo - nga wala’y mga sukatan sama sa gidaghanon sa mga pagtan-aw. Usa ka espesyal nga aktor ang mikuha ug impormasyon bahin sa mga artikulo ug midagan ngadto sa html nga mga panid aron i-update kini ug isagol kini sa daan nga bersyon.

Sa kinatibuk-an, sama sa akka, wala’y kinahanglan alang niini, mahimo nimo nga tipigan ang updateDate alang sa artikulo ug magkuha usa ka bag-o nga wala’y mga panagsama, apan ang dalan sa adventure nagdala kanako.

12 Ago

Nagsugod ko nga mobati nga gawasnon ug, alang lang sa kalingawan, gihimo nako ang matag chat nga lahi nga aktor. Sa teoriya, ang usa ka aktor mismo adunay gibug-aton nga mga 300 bytes ug mahimo kini nga minilyon, mao nga kini usa ka hingpit nga normal nga pamaagi. Para nako nga ang solusyon nahimong makapaikag kaayo:

Ang usa ka aktor maoy tulay tali sa telegrama nga server ug sa sistema sa mensahe sa Akka. Nakadawat lang siya og mga mensahe ug gipadala kini sa gusto nga aktor sa chat. Ang aktor sa chat mahimong magpadala usa ka butang balik isip tubag - ug kini ipadala balik sa telegrama. Ang labi ka kombenyente mao nga kini nga aktor nahimo nga yano kutob sa mahimo ug adunay sulud lamang nga lohika sa pagtubag sa mga mensahe. Pinaagi sa dalan, ang kasayuran bahin sa bag-ong mga artikulo miabot sa matag chat, apan pag-usab wala akoy nakita nga mga problema niini.

Sa kinatibuk-an, ang bot nagtrabaho na, pagtubag sa mga mensahe, pagtipig sa usa ka lista sa mga artikulo nga gipadala ngadto sa tiggamit, ug ako naghunahuna na nga ang bot hapit na andam. Hinay-hinay nakong gidugang ang gagmay nga mga bahin sama sa pag-normalize sa mga ngalan sa tagsulat ug mga tag (ilisan ang "sd f" sa "s_d_f").

Usa na lang ka butang ang nahibilin gamay pero — ang estado wala maluwas bisan asa.

Nasayop ang tanan

Tingali namatikdan nimo nga gisulat nako ang bot nga kadaghanan nag-inusara. Mao nga, ang ikaduha nga partisipante naapil sa pag-uswag, ug ang mga mosunud nga pagbag-o nagpakita sa code:

  • Ang MongoDB nagpakita nga nagtipig sa estado. Sa samang higayon, ang mga troso sa proyekto nabuak, tungod kay sa pipila ka rason si Monga nagsugod sa pag-spam kanila ug ang pipila ka mga tawo yanong mipalong niini sa tibuok kalibutan.
  • Ang aktor sa tulay sa Telegram nabag-o nga dili mailhan ug nagsugod sa pag-parse sa mga mensahe sa iyang kaugalingon.
  • Ang mga aktor alang sa mga chat walay kaluoy nga giputol, ug sa baylo gipulihan sila sa usa ka aktor nga nagtago sa tanang impormasyon mahitungod sa tanang mga chat sa usa ka higayon. Sa matag pag-atsi, kini nga aktor adunay problema. Aw, oo, sama sa pag-update sa kasayuran bahin sa usa ka artikulo, ang pagpadala niini sa tanan nga mga aktor sa chat lisud (sama kami sa Google, milyon-milyon nga mga tiggamit ang naghulat alang sa usa ka milyon nga mga artikulo sa chat alang sa matag usa), apan sa matag higayon nga ang chat ma-update, normal lang ang pag-adto sa Monga. Sama sa akong nahibal-an sa ulahi, ang nagtrabaho nga lohika sa mga chat hingpit usab nga giputol ug sa lugar niini adunay usa ka butang nga wala molihok.
  • Wala’y nahabilin nga pagsubay sa mga klase nga klase.
  • Ang pipila ka dili maayo nga lohika nagpakita sa mga aktor sa ilang mga suskrisyon sa usag usa, nga misangpot sa usa ka kahimtang sa lumba.
  • Mga istruktura sa datos nga adunay mga natad sa tipo Option[Int] nahimo nga Int nga adunay mga magical default nga mga kantidad sama sa -1. Sa ulahi akong naamgohan nga ang mongoDB nagtipig sa json ug walay daotan sa pagtipig niini didto Option maayo, o labing menos parse -1 ingon Wala, apan niadtong panahona wala ko kahibalo niini ug gikuha ang akong pulong alang niini nga "mao kana ang kinahanglan." Wala nako isulat kana nga code, ug wala ako maghasol sa pag-usab niini sa pagkakaron.
  • Akong nahibal-an nga ang akong publiko nga IP adres lagmit nga magbag-o, ug matag higayon nga kinahanglan nako kini idugang sa whitelist sa Mongo. Gilunsad nako ang bot sa lokal, si Monga naa sa mga server sa Monga isip usa ka kompanya.
  • Sa kalit, nawala ang normalisasyon sa mga tag ug pag-format sa mensahe alang sa mga telegrama. (Hmm, ngano man?)
  • Ganahan ko nga ang estado sa bot gitipigan sa usa ka eksternal nga database, ug kung gi-restart kini nagpadayon sa pagtrabaho ingon nga wala’y nahitabo. Apan, kini mao lamang ang dugang.

Ang ikaduha nga tawo wala magdali, ug kining tanan nga mga pagbag-o nagpakita sa usa ka dako nga tapok sa sinugdanan sa Septyembre. Wala dayon nako gipasalamatan ang sukod sa sangputanan nga pagkaguba ug nagsugod sa pagsabut sa buhat sa database, tungod kay... Wala pa ako nakiglabot kanila kaniadto. Sa ulahi ra nako nahibal-an kung unsa kadaghan ang giputol nga code sa pagtrabaho ug pila ka mga bug ang gidugang sa lugar niini.

Septyembre

Sa sinugdan naghunahuna ko nga mapuslanon ang pag-master sa Monga ug buhaton kini og maayo. Dayon hinay-hinay nakong nasabtan nga ang pag-organisar sa komunikasyon sa database usa usab ka arte diin makahimo ka og daghang mga lumba ug masayop lang. Pananglitan, kung ang user makadawat og duha ka mensahe sama sa /subscribe - ug agig tubag sa matag usa maghimo kami usa ka entry sa lamesa, tungod kay sa panahon sa pagproseso sa mga mensahe ang tiggamit wala mag-subscribe. Duna koy pagduda nga ang komunikasyon uban ni Monga sa kasamtangang porma niini wala gisulat sa pinakamaayong paagi. Pananglitan, ang mga setting sa user gihimo sa higayon nga siya nag-sign up. Kung gisulayan niya nga usbon kini sa wala pa ang kamatuoran sa suskrisyon ... ang bot wala mitubag bisan unsa, tungod kay ang code sa aktor miadto sa database alang sa mga setting, wala kini makit-an ug nahagsa. Kung gipangutana kung nganong dili paghimo og mga setting kung gikinahanglan, nahibal-an nako nga dili kinahanglan nga usbon kini kung ang user wala mag-subscribe ... Ang sistema sa pagsala sa mensahe gihimo sa usa ka paagi nga dili klaro, ug bisan human sa usa ka suod nga pagtan-aw sa code mahimo nako dili masabtan kung gituyo ba kini sa sinugdanan o adunay sayup didto.

Walay listahan sa mga artikulo nga gisumite sa chat; hinuon, gisugyot nga ako mismo ang magsulat niini. Nakurat kini kanako - sa kinatibuk-an, dili ako supak sa pag-drag sa tanan nga mga butang sa proyekto, apan lohikal alang sa usa nga nagdala niini nga mga butang ug gibuak kini. Apan dili, ang ikaduha nga partisipante ingon og gitugyan ang tanan, apan giingon nga ang lista sa sulod sa chat usa kuno ka dili maayo nga solusyon, ug kinahanglan nga maghimo usa ka timaan sa mga panghitabo sama sa "usa ka artikulo y gipadala sa user x." Dayon, kung ang user mihangyo nga magpadala ug bag-ong mga artikulo, gikinahanglan nga magpadala ug hangyo sa database, nga mopili sa mga panghitabo nga may kalabotan sa user gikan sa mga panghitabo, makakuha usab ug listahan sa mga bag-ong artikulo, magsala niini, ipadala kini ngadto sa user ug ihulog ang mga panghitabo bahin niini balik sa database.

Ang ikaduha nga partisipante gidala sa usa ka lugar padulong sa mga abstraction, kung ang bot makadawat dili lamang mga artikulo gikan sa Habr ug ipadala dili lamang sa telegrama.

Sa usa ka paagi gipatuman nako ang mga panghitabo sa porma sa usa ka bulag nga timaan alang sa ikaduha nga katunga sa Septyembre. Dili kini kamalaumon, apan labing menos ang bot nagsugod sa pagtrabaho ug nagsugod sa pagpadala kanako pag-usab sa mga artikulo, ug hinayhinay nakong nahibal-an kung unsa ang nahitabo sa code.

Karon makabalik ka sa sinugdanan ug hinumdomi nga ang repositoryo dili orihinal nga gibuhat nako. Unsa kahay nahimo nga ingon niini? Ang akong hangyo sa pagbitad gibalibaran. Kini nahimo nga ako adunay redneck code, nga wala ako mahibal-an kung unsaon pagtrabaho sa usa ka team, ug kinahanglan nako nga ayohon ang mga bug sa kasamtangan nga kurba sa pagpatuman, ug dili kini dalisay sa usa ka magamit nga estado.

Nasuko ko ug gitan-aw ang commit history ug ang gidaghanon sa code nga gisulat. Gitan-aw nako ang mga gutlo nga orihinal nga gisulat nga maayo, ug dayon gibali...

F*rk kini

Nahinumdom ko sa artikulo Dili ka Google.

Naghunahuna ko nga wala’y kinahanglan nga ideya kung wala’y pagpatuman. Naghunahuna ko nga gusto nako nga adunay usa ka nagtrabaho nga bot, nga magamit sa usa ka kopya sa usa ka kompyuter ingon usa ka yano nga programa sa java. Nahibal-an ko nga ang akong bot molihok sa daghang mga bulan nga wala’y pagsugod pag-usab, tungod kay gisulat ko na ang ingon nga mga bot sa nangagi. Kung kini kalit nga mahulog ug dili magpadala sa tiggamit og laing artikulo, ang langit dili mahulog sa yuta ug walay katalagman nga mahitabo.

Ngano nga kinahanglan nako ang Docker, mongoDB ug uban pang kulto sa kargamento sa "seryoso" nga software kung ang code dili molihok o molihok nga hiwi?

Gibiyaan nako ang proyekto ug gibuhat ang tanan sumala sa akong gusto.

Telegram bot alang sa personal nga pagpili sa mga artikulo gikan sa Habr

Sa samang higayon, nag-ilis kog trabaho ug kulang kaayo ang libreng oras. Sa buntag nagmata ko diha mismo sa tren, sa pagkagabii ako mibalik nga ulahi ug wala nay gustong buhaton. Wala koy nahimo sa makadiyot, unya ang tinguha nga mahuman ang bot mibuntog kanako, ug nagsugod ako sa hinay-hinay nga pagsulat pag-usab sa code samtang nagdrayb ko paingon sa trabahoan sa buntag. Dili ko isulti nga kini mabungahon: ang paglingkod sa usa ka nag-uyog nga tren nga adunay usa ka laptop sa imong sabakan ug pagtan-aw sa stack overflow gikan sa imong telepono dili kaayo kombenyente. Bisan pa, ang oras nga gigugol sa pagsulat sa code milupad sa hingpit nga wala mamatikdi, ug ang proyekto nagsugod sa hinay nga paglihok padulong sa usa ka nagtrabaho nga estado.

Sa usa ka dapit sa likod sa akong hunahuna adunay usa ka ulod sa pagduhaduha nga gustong mogamit sa mongoDB, apan naghunahuna ko nga dugang sa mga bentaha sa "kasaligan" nga pagtipig sa estado, adunay mga mamatikdan nga mga disbentaha:

  • Ang database nahimong laing punto sa kapakyasan.
  • Ang kodigo nahimong mas komplikado, ug mas dugay pa ang pagsulat niini.
  • Ang code mahimong hinay ug dili episyente; imbis nga usbon ang usa ka butang sa memorya, ang mga pagbag-o ipadala sa database ug, kung gikinahanglan, ibalik.
  • Adunay mga pagdili sa matang sa pagtipig sa mga panghitabo sa usa ka bulag nga lamesa, nga nalangkit sa mga peculiarities sa database.
  • Ang pagsulay nga bersyon sa Monga adunay pipila ka mga limitasyon, ug kung makadagan ka niini, kinahanglan nimo nga ilunsad ug i-configure ang Monga sa usa ka butang.

Giputol nako ang monga, karon ang estado sa bot gitipigan lamang sa panumduman sa programa ug matag karon ug unya gitipigan sa usa ka file sa porma sa json. Tingali sa mga komentaryo ilang isulat nga ako nasayop, nga dinhi kinahanglan gamiton ang database, ug uban pa. Apan kini ang akong proyekto, ang pamaagi sa file ingon ka yano kutob sa mahimo ug kini molihok sa usa ka transparent nga paagi.

Gilabay ang mga salamangka nga kantidad sama sa -1 ug gibalik ang mga normal Option, gidugang nga pagtipig sa usa ka hash nga lamesa nga adunay gipadala nga mga artikulo balik sa butang nga adunay kasayuran sa chat. Gidugang ang pagtangtang sa kasayuran bahin sa mga artikulo nga mas tigulang kaysa lima ka adlaw, aron dili matipigan ang tanan. Gidala nako ang pag-log sa usa ka nagtrabaho nga estado - ang mga log gisulat sa makatarunganon nga gidaghanon sa file ug sa console. Gidugang ang daghang mga mando sa admin sama sa pagtipig sa estado o pagkuha sa mga istatistika sama sa gidaghanon sa mga tiggamit ug mga artikulo.

Giayo ang usa ka hugpong sa gagmay nga mga butang: pananglitan, alang sa mga artikulo ang gidaghanon sa mga pagtan-aw, gusto, dili gusto ug komento sa panahon sa pagpasa sa filter sa tiggamit gipakita na karon. Sa kinatibuk-an, katingad-an kung pila ka gagmay nga mga butang ang kinahanglan tul-iron. Nagtipig ako usa ka lista, namatikdan ang tanan nga "mga iregularidad" didto ug gitul-id kini kutob sa mahimo.

Pananglitan, gidugang nako ang abilidad nga itakda ang tanan nga mga setting direkta sa usa ka mensahe:

/subscribe
/rating +20
/author a -30
/author s -20
/author p +9000
/tag scala 20
/tag akka 50

Ug laing team /settings Gipakita kini sa eksakto niini nga porma, mahimo nimong kuhaon ang teksto gikan niini ug ipadala ang tanan nga mga setting sa usa ka higala.
Kini ingon usa ka gamay nga butang, apan adunay daghang mga parehas nga nuances.

Gipatuman nga pagsala sa artikulo sa porma sa usa ka yano nga linear nga modelo - ang tiggamit mahimo’g magbutang usa ka dugang nga rating alang sa mga tagsulat ug mga tag, ingon man usa ka kantidad sa threshold. Kung ang sumada sa rating sa tagsulat, ang kasagaran nga rating alang sa mga tag ug ang aktuwal nga rating sa artikulo labi pa sa kantidad sa threshold, nan ang artikulo gipakita sa tiggamit. Mahimo nimong pangutan-on ang bot alang sa mga artikulo nga adunay mando / bag-o, o mag-subscribe sa bot ug magpadala kini mga artikulo sa usa ka personal nga mensahe sa bisan unsang oras sa adlaw.

Sa kinatibuk-an, ako adunay usa ka ideya alang sa matag artikulo sa pagkuha sa dugang nga mga bahin (hub, gidaghanon sa mga komentaryo, mga bookmark, dynamics sa mga pagbag-o sa rating, gidaghanon sa teksto, mga hulagway ug code sa artikulo, mga keyword), ug ipakita sa user ang usa ka ok / dili ok pagboto sa ilalum sa matag artikulo ug pagbansay sa usa ka modelo alang sa matag user, apan ako tapolan kaayo.

Dugang pa, ang lohika sa trabaho dili kaayo klaro. Karon mahimo nako nga mano-mano ang pagtakda sa usa ka rating nga +9000 alang sa pasyenteZero ug sa usa ka threshold nga rating nga +20 ako garantiya nga makadawat sa tanan niyang mga artikulo (gawas kung, siyempre, akong gibutang -100500 alang sa pipila nga mga tag).

Ang katapusan nga arkitektura nahimo nga yano ra:

  1. Usa ka aktor nga nagtipig sa kahimtang sa tanan nga mga chat ug mga artikulo. Gikarga niini ang estado niini gikan sa usa ka file sa disk ug gitipigan kini balik matag karon ug unya, matag higayon sa usa ka bag-ong file.
  2. Usa ka aktor nga mobisita sa RSS feed matag karon ug unya, makakat-on mahitungod sa bag-ong mga artikulo, motan-aw sa mga link, mag-parse, ug magpadala niini nga mga artikulo ngadto sa unang aktor. Dugang pa, usahay mangayo kini og lista sa mga artikulo gikan sa unang aktor, mopili niadtong dili mas magulang kay sa tulo ka adlaw, apan wala pa ma-update sa dugay nga panahon, ug gi-update kini.
  3. Usa ka aktor nga nakigsulti sa usa ka telegrama. Gidala gihapon nako ang mensahe sa pag-parse sa hingpit dinhi. Sa usa ka maayo nga paagi, gusto nako bahinon kini sa duha - aron ang usa mag-parse sa umaabot nga mga mensahe, ug ang ikaduha maghisgot sa mga problema sa transportasyon sama sa pagpadala pag-usab sa wala ipadala nga mga mensahe. Karon wala'y pagpadala pag-usab, ug ang usa ka mensahe nga wala moabut tungod sa usa ka sayup mawala ra (gawas kung kini natala sa mga troso), apan hangtod karon wala kini hinungdan sa bisan unsang mga problema. Tingali adunay mga problema kung ang usa ka pundok sa mga tawo mag-subscribe sa bot ug akong maabot ang limitasyon sa pagpadala mga mensahe).

Ang akong nagustohan mao nga salamat sa akka, ang pagkahulog sa mga aktor 2 ug 3 sa kasagaran dili makaapekto sa pasundayag sa bot. Tingali ang pipila ka mga artikulo wala ma-update sa oras o ang pipila nga mga mensahe wala makaabot sa telegrama, apan ang account nag-restart sa aktor ug ang tanan nagpadayon sa pagtrabaho. Gitipigan nako ang kasayuran nga ang artikulo gipakita sa tiggamit lamang kung ang aktor sa telegrama mitubag nga malampuson niyang nahatud ang mensahe. Ang pinakagrabe nga butang nga naghulga kanako mao ang pagpadala sa mensahe sa makadaghang higayon (kon kini ipadala, apan ang kumpirmasyon sa usa ka paagi nawala). Sa prinsipyo, kung ang una nga aktor wala magtipig sa estado sa sulod sa iyang kaugalingon, apan nakigsulti sa pipila nga database, nan siya mahimo usab nga mahulog nga dili mahibal-an ug mobalik sa kinabuhi. Mahimo usab nako nga sulayan ang akka nga pagpadayon aron mapasig-uli ang kahimtang sa mga aktor, apan ang karon nga pagpatuman nahiangay kanako sa kayano niini. Dili kay ang akong code kanunay nga nag-crash - sa kasukwahi, nagbutang ako og daghang paningkamot aron mahimo kini nga imposible. Apan mahitabo ang shit, ug ang abilidad sa pagbungkag sa programa ngadto sa hilit nga mga piraso-mga aktor ingon og sayon ​​​​ug praktikal alang kanako.

Gidugangan nako ang circle-ci aron kung maguba ang code, mahibal-an dayon nimo kini. Sa labing gamay, kini nagpasabut nga ang code mihunong sa pag-compile. Sa sinugdan gusto nakong idugang si travis, apan gipakita lang niini ang akong mga proyekto nga walay mga tinidor. Sa kinatibuk-an, kining duha nga mga butang mahimong libre nga magamit sa bukas nga mga repositoryo.

Mga resulta

November na diay. Gisulat ang bot, gigamit nako kini sa miaging duha ka semana ug ganahan ko niini. Kon duna kay mga ideya alang sa kalamboan, pagsulat. Wala nako makita ang punto sa pag-monetize niini - pasagdi lang kini nga molihok ug magpadala mga makapaikag nga artikulo.

Bot link: https://t.me/HabraFilterBot
Github: https://github.com/Kright/habrahabr_reader

Gamay nga mga konklusyon:

  • Bisan ang usa ka gamay nga proyekto mahimo’g daghang oras.
  • Dili ka Google. Walay kapuslanan ang pagpusil sa mga goryon gikan sa kanyon. Ang usa ka yano nga solusyon mahimong molihok usab.
  • Ang mga proyekto sa binuhi maayo kaayo alang sa pag-eksperimento sa mga bag-ong teknolohiya.
  • Ang mga bot sa Telegram kay yano ra nga gisulat. Kung dili tungod sa "pagtinabangay" ug mga eksperimento sa teknolohiya, ang bot gisulat sa usa o duha ka semana.
  • Ang modelo sa aktor usa ka makapaikag nga butang nga maayo sa multi-threading ug fault-tolerant code.
  • Sa akong hunahuna nakatilaw ko kung ngano nga ang open source nga komunidad nahigugma sa mga tinidor.
  • Maayo ang mga database tungod kay ang estado sa aplikasyon wala na magdepende sa pag-crash/pag-restart sa aplikasyon, apan ang pagtrabaho sa usa ka database nagpakomplikado sa code ug nagpahamtang og mga pagdili sa istruktura sa datos.

Source: www.habr.com

Idugang sa usa ka comment