Telegram bot ar gyfer detholiad personol o erthyglau o Habr

Ar gyfer cwestiynau fel “pam?” mae yna erthygl hŷn - Natural Geektimes - gwneud gofod yn lanach.

Mae yna lawer o erthyglau, am resymau goddrychol, rhai nad ydw i'n eu hoffi, a rhai, i'r gwrthwyneb, mae'n drueni hepgor. Hoffwn wneud y gorau o'r broses hon ac arbed amser.

Roedd yr erthygl uchod yn awgrymu dull sgriptio mewn porwr, ond doeddwn i ddim yn ei hoffi mewn gwirionedd (er fy mod wedi ei ddefnyddio o'r blaen) am y rhesymau canlynol:

  • Ar gyfer gwahanol borwyr ar eich cyfrifiadur/ffôn, mae'n rhaid i chi ei ffurfweddu eto, os yn bosibl.
  • Nid yw hidlo llym gan awduron bob amser yn gyfleus.
  • Nid yw'r broblem gydag awduron nad ydych chi am eu methu, hyd yn oed os ydyn nhw'n cael eu cyhoeddi unwaith y flwyddyn, wedi'i datrys.

Nid yw hidlo wedi'i gynnwys yn y wefan yn seiliedig ar gyfraddau erthyglau bob amser yn gyfleus, oherwydd gall erthyglau hynod arbenigol, er gwaethaf eu gwerth, dderbyn gradd eithaf cymedrol.

I ddechrau, roeddwn i eisiau cynhyrchu porthiant RSS (neu hyd yn oed sawl un), gan adael dim ond pethau diddorol yno. Ond yn y diwedd, daeth i'r amlwg nad oedd darllen RSS yn ymddangos yn gyfleus iawn: beth bynnag, i wneud sylwadau / pleidleisio am erthygl / ei ychwanegu at eich ffefrynnau, mae'n rhaid i chi fynd trwy'r porwr. Dyna pam ysgrifennais bot telegram sy'n anfon erthyglau diddorol ataf mewn neges bersonol. Mae Telegram ei hun yn gwneud rhagolygon hyfryd ohonynt, sydd, ynghyd â gwybodaeth am yr awdur / sgôr / safbwyntiau, yn edrych yn eithaf addysgiadol.

Telegram bot ar gyfer detholiad personol o erthyglau o Habr

O dan y toriad mae manylion megis nodweddion y gwaith, y broses ysgrifennu a datrysiadau technegol.

Yn fyr am y bot

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

Bot yn telegram: https://t.me/HabraFilterBot

Mae'r defnyddiwr yn gosod sgôr ychwanegol ar gyfer tagiau ac awduron. Ar ôl hynny, rhoddir hidlydd ar yr erthyglau - mae sgôr yr erthygl ar Habré, sgôr defnyddiwr yr awdur a'r cyfartaledd ar gyfer graddfeydd defnyddwyr yn ôl tag yn cael eu hadio. Os yw'r swm yn fwy na throthwy a bennir gan y defnyddiwr, yna mae'r erthygl yn pasio'r hidlydd.

Un o nodau ochr ysgrifennu bot oedd cael hwyl a phrofiad. Yn ogystal, roeddwn yn atgoffa fy hun yn rheolaidd hynny Dydw i ddim yn Google, ac felly mae llawer o bethau'n cael eu gwneud mor syml a hyd yn oed yn gyntefig â phosibl. Fodd bynnag, nid oedd hyn yn atal y broses o ysgrifennu'r bot rhag cymryd tri mis.

Roedd hi'n haf y tu allan

Roedd Gorffennaf yn dod i ben, a phenderfynais ysgrifennu bot. Ac nid yn unig, ond gyda ffrind a oedd yn meistroli scala ac eisiau ysgrifennu rhywbeth arno. Roedd y dechrau yn edrych yn addawol - byddai'r côd yn cael ei dorri gan dîm, y dasg yn ymddangos yn hawdd a meddyliais y byddai'r bot yn barod ymhen ychydig wythnosau neu fis.

Er gwaethaf y ffaith fy mod i fy hun wedi bod yn ysgrifennu cod ar y graig o bryd i'w gilydd am yr ychydig flynyddoedd diwethaf, nid oes neb fel arfer yn gweld nac yn edrych ar y cod hwn: prosiectau anifeiliaid anwes, profi rhai syniadau, rhagbrosesu data, meistroli rhai cysyniadau o FP. Roedd gen i ddiddordeb mawr mewn sut olwg oedd ar ysgrifennu cod mewn tîm, oherwydd gall cod ar roc gael ei ysgrifennu mewn ffyrdd gwahanol iawn.

Beth allai fod wedi mynd felly? Fodd bynnag, gadewch i ni beidio â rhuthro pethau.
Gellir olrhain popeth sy'n digwydd gan ddefnyddio'r hanes ymrwymo.

Creodd cydnabod ystorfa ar Orffennaf 27, ond ni wnaeth unrhyw beth arall, felly dechreuais ysgrifennu cod.

Gorffennaf 30

Yn gryno: Ysgrifennais ddosraniad o borthiant rss Habr.

  • com.github.pureconfig ar gyfer darllen ffurfweddau typeafe yn uniongyrchol i ddosbarthiadau achos (trodd allan i fod yn gyfleus iawn)
  • scala-xml ar gyfer darllen xml: oherwydd i ddechrau roeddwn i eisiau ysgrifennu fy ngweithrediad fy hun ar gyfer y porthiant rss, ac mae'r porthiant rss mewn fformat xml, defnyddiais y llyfrgell hon ar gyfer dosrannu. Mewn gwirionedd, ymddangosodd dosrannu RSS hefyd.
  • scalatest ar gyfer profion. Hyd yn oed ar gyfer prosiectau bach, mae ysgrifennu profion yn arbed amser - er enghraifft, wrth ddadfygio dosrannu xml, mae'n llawer haws ei lawrlwytho i ffeil, ysgrifennu profion a chywiro gwallau. Pan ymddangosodd nam yn ddiweddarach gyda dosrannu rhywfaint o html rhyfedd gyda nodau utf-8 annilys, daeth yn fwy cyfleus i'w roi mewn ffeil ac ychwanegu prawf.
  • actorion o Akka. Yn wrthrychol, nid oedd eu hangen o gwbl, ond ysgrifennwyd y prosiect er hwyl, roeddwn i eisiau rhoi cynnig arnynt. O ganlyniad, rwy'n barod i ddweud fy mod yn ei hoffi. Gellir edrych ar y syniad o OOP o'r ochr arall - mae yna actorion sy'n cyfnewid negeseuon. Yr hyn sy'n fwy diddorol yw y gallwch (ac y dylech) ysgrifennu cod yn y fath fodd fel na fydd y neges yn cyrraedd neu na chaiff ei phrosesu (yn gyffredinol, pan fydd y cyfrif yn rhedeg ar un cyfrifiadur sengl, ni ddylid colli negeseuon). Ar y dechrau roeddwn i'n crafu fy mhen ac roedd sbwriel yn y côd gydag actorion yn tanysgrifio i'w gilydd, ond yn y diwedd llwyddais i feddwl am bensaernïaeth eithaf syml a chain. Gellir ystyried y cod y tu mewn i bob actor yn un edau; pan fydd actor yn damwain, mae'r acca yn ei ailgychwyn - y canlyniad yw system eithaf goddefgar.

9 Awst

Ychwanegais at y prosiect scala-scrapper ar gyfer dosrannu tudalennau html o Habr (i dynnu gwybodaeth megis sgôr erthyglau, nifer y nodau tudalen, ac ati).

A Chathod. Y rhai yn y graig.

Telegram bot ar gyfer detholiad personol o erthyglau o Habr

Yna darllenais lyfr am gronfeydd data gwasgaredig, hoffais y syniad o CRDT (math o ddata wedi'i ddyblygu heb wrthdaro, https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type, habr), felly postiais ddosbarth math o hanner grŵp cymudol i gael gwybodaeth am yr erthygl ar Habré.

Mewn gwirionedd, mae'r syniad yn syml iawn - mae gennym ni gownteri sy'n newid yn undonog. Mae nifer yr hyrwyddiadau yn cynyddu'n raddol, yn ogystal â nifer y manteision (yn ogystal â nifer y anfanteision). Os oes gen i ddau fersiwn o wybodaeth am erthygl, yna fe alla i eu “uno nhw i un” - mae cyflwr y cownter sy'n fwy yn cael ei ystyried yn fwy perthnasol.

Mae hanner grŵp yn golygu y gellir uno dau wrthrych gyda gwybodaeth am erthygl yn un. Mae cymudol yn golygu y gallwch chi uno A + B a B + A, nid yw'r canlyniad yn dibynnu ar y drefn, ac yn y diwedd bydd y fersiwn diweddaraf yn aros. Gyda llaw, mae yna gysylltedd yma hefyd.

Er enghraifft, fel y cynlluniwyd, roedd rss ar ôl dosrannu yn darparu gwybodaeth ychydig yn wan am yr erthygl - heb fetrigau megis nifer y golygfeydd. Yna cymerodd actor arbennig wybodaeth am yr erthyglau a rhedeg i'r tudalennau html i'w diweddaru a'i uno â'r hen fersiwn.

A siarad yn gyffredinol, fel yn akka, nid oedd angen am hyn, fe allech chi yn syml storio updateDate ar gyfer yr erthygl a chymryd un mwy newydd heb unrhyw uno, ond y ffordd o antur fy arwain.

12 Awst

Dechreuais deimlo'n fwy rhydd ac, er mwyn cael hwyl, fe wnes i bob sgwrs yn actor ar wahân. Yn ddamcaniaethol, mae actor ei hun yn pwyso tua 300 beit a gellir eu creu mewn miliynau, felly mae hwn yn ddull hollol normal. Mae'n ymddangos i mi bod yr ateb wedi troi allan i fod yn eithaf diddorol:

Roedd un actor yn bont rhwng y gweinydd telegram a'r system negeseuon yn Akka. Yn syml, derbyniodd negeseuon a'u hanfon at yr actor sgwrsio dymunol. Gallai'r actor sgwrsio anfon rhywbeth yn ôl mewn ymateb - a byddai'n cael ei anfon yn ôl at y telegram. Yr hyn oedd yn gyfleus iawn yw bod yr actor hwn wedi troi allan i fod mor syml â phosibl ac yn cynnwys y rhesymeg dros ymateb i negeseuon yn unig. Gyda llaw, daeth gwybodaeth am erthyglau newydd i bob sgwrs, ond eto nid wyf yn gweld unrhyw broblemau yn hyn o beth.

Yn gyffredinol, roedd y bot eisoes yn gweithio, yn ymateb i negeseuon, yn storio rhestr o erthyglau a anfonwyd at y defnyddiwr, ac roeddwn eisoes yn meddwl bod y bot bron yn barod. Yn araf bach ychwanegais nodweddion bach fel normaleiddio enwau a thagiau awduron (gan ddisodli “sd f” gyda “s_d_f”).

Dim ond un peth oedd ar ôl bach ond —nid achubwyd y dalaeth yn unman.

Aeth popeth o'i le

Efallai eich bod wedi sylwi fy mod wedi ysgrifennu'r bot ar ben fy hun yn bennaf. Felly, cymerodd yr ail gyfranogwr ran yn y datblygiad, ac ymddangosodd y newidiadau canlynol yn y cod:

  • Roedd yn ymddangos bod MongoDB yn storio cyflwr. Ar yr un pryd, torrwyd y logiau yn y prosiect, oherwydd am ryw reswm dechreuodd Monga eu sbamio ac fe wnaeth rhai pobl eu diffodd yn fyd-eang.
  • Trawsnewidiwyd yr actor pont yn Telegram y tu hwnt i adnabyddiaeth a dechreuodd dosrannu negeseuon ei hun.
  • Cafodd actorion ar gyfer sgyrsiau eu torri allan yn ddidrugaredd, ac yn lle hynny fe'u disodlwyd gan actor a guddodd yr holl wybodaeth am yr holl sgyrsiau ar unwaith. Am bob tisian, aeth yr actor hwn i drafferth. Wel, ie, fel wrth ddiweddaru gwybodaeth am erthygl, mae'n anodd ei anfon at yr holl actorion sgwrsio (rydyn ni fel Google, mae miliynau o ddefnyddwyr yn aros am filiwn o erthyglau yn y sgwrs ar gyfer pob un), ond bob tro mae'r sgwrs yn cael ei diweddaru, mae'n arferol mynd i mewn i Monga. Fel y sylweddolais lawer yn ddiweddarach, roedd rhesymeg gweithio'r sgyrsiau hefyd wedi'i dorri allan yn llwyr ac yn ei le ymddangosodd rhywbeth nad oedd yn gweithio.
  • Nid oes unrhyw olion ar ôl o'r dosbarthiadau math.
  • Mae rhywfaint o resymeg afiach wedi ymddangos yn yr actorion gyda'u tanysgrifiadau i'w gilydd, gan arwain at gyflwr hil.
  • Strwythurau data gyda meysydd o fath Option[Int] troi'n Int gyda gwerthoedd diofyn hudol fel -1. Yn ddiweddarach sylweddolais fod mongoDB yn storio json ac nid oes dim o'i le ar ei storio yno Option wel, neu o leiaf dosrannu -1 fel Dim, ond ar y pryd doeddwn i ddim yn gwybod hyn a chymerais fy ngair am y peth “dyna fel y dylai fod.” Wnes i ddim ysgrifennu'r cod hwnnw, a wnes i ddim trafferthu ei newid am y tro.
  • Cefais wybod bod fy nghyfeiriad IP cyhoeddus yn tueddu i newid, a bob tro roedd yn rhaid i mi ei ychwanegu at restr wen Mongo. Lansiais y bot yn lleol, roedd Monga rhywle ar weinyddion Monga fel cwmni.
  • Yn sydyn, diflannodd normaleiddio tagiau a fformatio negeseuon ar gyfer telegramau. (Hmm, pam fyddai hynny?)
  • Roeddwn i'n hoffi bod cyflwr y bot yn cael ei storio mewn cronfa ddata allanol, a phan fydd wedi'i ailgychwyn mae'n parhau i weithio fel pe na bai dim wedi digwydd. Fodd bynnag, dyma oedd yr unig fantais.

Nid oedd yr ail berson mewn unrhyw frys arbennig, ac ymddangosodd yr holl newidiadau hyn mewn un domen fawr eisoes ar ddechrau mis Medi. Wnes i ddim gwerthfawrogi maint y dinistr a ddeilliodd o hynny ar unwaith a dechreuais ddeall gwaith y gronfa ddata, oherwydd... Nid wyf erioed wedi delio â nhw o'r blaen. Dim ond yn ddiweddarach y sylweddolais faint o god gweithio a dorrwyd a faint o fygiau a ychwanegwyd yn ei le.

Medi

Ar y dechrau roeddwn i'n meddwl y byddai'n ddefnyddiol meistroli Monga a'i wneud yn dda. Yna dechreuais yn araf ddeall bod trefnu cyfathrebu â'r gronfa ddata hefyd yn gelfyddyd lle gallwch chi wneud llawer o rasys a gwneud camgymeriadau. Er enghraifft, os yw'r defnyddiwr yn derbyn dwy neges fel /subscribe - ac mewn ymateb i bob un byddwn yn creu cofnod yn y tabl, oherwydd ar adeg prosesu'r negeseuon hynny nid yw'r defnyddiwr wedi'i danysgrifio. Mae gennyf amheuaeth nad yw cyfathrebu â Monga yn ei ffurf bresennol wedi'i ysgrifennu yn y ffordd orau. Er enghraifft, crëwyd gosodiadau'r defnyddiwr ar hyn o bryd y ymunodd. Pe bai'n ceisio eu newid cyn tanysgrifiad ... ni wnaeth y bot ymateb unrhyw beth, oherwydd bod y cod yn yr actor wedi mynd i'r gronfa ddata ar gyfer y gosodiadau, ni ddaeth o hyd iddo a chwalodd. Pan ofynnwyd i mi pam ddim creu gosodiadau yn ôl yr angen, dysgais nad oes angen eu newid os nad yw'r defnyddiwr wedi tanysgrifio... Gwnaed y system hidlo neges rhywsut anamlwg, a hyd yn oed ar ôl edrych yn fanwl ar y cod gallwn ddim yn deall a oedd wedi'i fwriadu fel hyn i ddechrau neu a oes gwall yno.

Nid oedd unrhyw restr o erthyglau wedi'u cyflwyno i'r sgwrs; yn lle hynny, awgrymwyd fy mod yn eu hysgrifennu fy hun. Roedd hyn yn fy synnu - yn gyffredinol, nid oeddwn yn erbyn llusgo pob math o bethau i'r prosiect, ond byddai'n rhesymegol i'r un a ddaeth â'r pethau hyn i mewn a'u sgriwio ymlaen. Ond na, roedd yn ymddangos bod yr ail gyfranogwr yn rhoi’r gorau i bopeth, ond dywedodd fod y rhestr y tu mewn i’r sgwrs i fod yn ateb gwael, a bod angen gwneud arwydd gyda digwyddiadau fel “anfonwyd erthygl y at ddefnyddiwr x.” Yna, pe bai'r defnyddiwr yn gofyn am anfon erthyglau newydd, roedd angen anfon cais i'r gronfa ddata, a fyddai'n dewis digwyddiadau yn ymwneud â'r defnyddiwr o'r digwyddiadau, hefyd yn cael rhestr o erthyglau newydd, yn eu hidlo, yn eu hanfon at y defnyddiwr a thaflu digwyddiadau am hyn yn ôl i'r gronfa ddata.

Cariwyd yr ail gyfranogwr i rywle tuag at dyniadau, pan fydd y bot yn derbyn nid yn unig erthyglau o Habr ac yn cael eu hanfon nid yn unig i delegram.

Fe wnes i rywsut weithredu digwyddiadau ar ffurf arwydd ar wahân ar gyfer ail hanner mis Medi. Nid yw'n optimaidd, ond o leiaf dechreuodd y bot weithio a dechrau anfon erthyglau ataf eto, ac fe wnes i ddarganfod yn araf beth oedd yn digwydd yn y cod.

Nawr gallwch chi fynd yn ôl i'r dechrau a chofio na chafodd yr ystorfa ei chreu yn wreiddiol gennyf i. Beth allai fod wedi mynd fel hyn? Gwrthodwyd fy nghais tynnu. Daeth i'r amlwg bod gennyf god cochni, nad oeddwn yn gwybod sut i weithio mewn tîm, a bu'n rhaid i mi drwsio chwilod yn y gromlin weithredu bresennol, a pheidio â'i fireinio i gyflwr y gellir ei ddefnyddio.

Fe wnes i gynhyrfu ac edrych ar hanes yr ymrwymiad a faint o god a ysgrifennwyd. Edrychais ar eiliadau a oedd wedi'u hysgrifennu'n dda yn wreiddiol, ac yna eu torri'n ôl ...

F*rk fe

Cofiais yr erthygl Nid ydych chi'n Google.

Roeddwn i'n meddwl nad oes gwir angen syniad ar neb heb ei weithredu. Roeddwn i'n meddwl fy mod i eisiau cael bot gweithio, a fydd yn gweithio mewn un copi sengl ar un cyfrifiadur sengl fel rhaglen java syml. Gwn y bydd fy bot yn gweithio am fisoedd heb ailgychwyn, gan fy mod eisoes wedi ysgrifennu bots o'r fath yn y gorffennol. Os bydd yn disgyn yn sydyn ac nad yw'n anfon erthygl arall at y defnyddiwr, ni fydd yr awyr yn disgyn i'r llawr ac ni fydd unrhyw beth trychinebus yn digwydd.

Pam fod angen Docker, mongoDB a chwlt cargo arall o feddalwedd “difrifol” arnaf os nad yw'r cod yn gweithio neu'n gweithio'n gam?

Fforchais y prosiect a gwneud popeth fel roeddwn i eisiau.

Telegram bot ar gyfer detholiad personol o erthyglau o Habr

Tua'r un amser, fe wnes i newid swydd ac roedd amser rhydd yn mynd yn brin iawn. Yn y bore fe ddeffrais i'r dde ar y trên, gyda'r nos dychwelais yn hwyr a doeddwn i ddim eisiau gwneud dim byd mwyach. Wnes i ddim byd am sbel, yna roedd yr awydd i orffen y bot yn drech na fi, a dechreuais ail ysgrifennu'r côd yn araf bach tra roeddwn i'n gyrru i'r gwaith yn y bore. Ni ddywedaf ei fod yn gynhyrchiol: nid yw eistedd ar drên ysgwyd gyda gliniadur ar eich glin ac edrych ar orlif pentwr o'ch ffôn yn gyfleus iawn. Fodd bynnag, hedfanodd yr amser a dreuliwyd yn ysgrifennu cod yn gwbl ddisylw, a dechreuodd y prosiect symud yn araf tuag at gyflwr gweithio.

Rhywle yng nghefn fy meddwl roedd mwydyn o amheuaeth a oedd eisiau defnyddio mongoDB, ond roeddwn i'n meddwl, yn ogystal â manteision storio cyflwr “dibynadwy”, roedd anfanteision amlwg:

  • Mae'r gronfa ddata yn dod yn bwynt arall o fethiant.
  • Mae'r cod yn dod yn fwy cymhleth, a bydd yn cymryd mwy o amser i mi ei ysgrifennu.
  • Daw'r cod yn araf ac aneffeithlon; yn lle newid gwrthrych yn y cof, anfonir y newidiadau i'r gronfa ddata ac, os oes angen, cânt eu tynnu'n ôl.
  • Mae cyfyngiadau ar y math o storio digwyddiadau mewn tabl ar wahân, sy'n gysylltiedig â hynodion y gronfa ddata.
  • Mae gan fersiwn prawf Monga rai cyfyngiadau, ac os ydych chi'n rhedeg i mewn iddynt, bydd yn rhaid i chi lansio a ffurfweddu Monga ar rywbeth.

Torrais y monga allan, nawr mae cyflwr y bot yn cael ei storio yng nghof y rhaglen ac o bryd i'w gilydd yn cael ei gadw i ffeil ar ffurf json. Efallai yn y sylwadau y byddant yn ysgrifennu fy mod yn anghywir, mai dyma lle y dylid defnyddio'r gronfa ddata, ac ati. Ond dyma fy mhrosiect, mae'r ymagwedd gyda'r ffeil mor syml â phosib ac mae'n gweithio mewn modd tryloyw.

Taflu allan werthoedd hud fel -1 a dychwelyd rhai arferol Option, storfa ychwanegol o dabl hash gydag erthyglau a anfonwyd yn ôl at y gwrthrych gyda gwybodaeth sgwrsio. Ychwanegwyd dileu gwybodaeth am erthyglau hŷn na phum diwrnod, er mwyn peidio â storio popeth. Deuthum â logio i gyflwr gweithio - mae logiau wedi'u hysgrifennu mewn symiau rhesymol i'r ffeil a'r consol. Ychwanegwyd sawl gorchymyn gweinyddol fel arbed cyflwr neu gael ystadegau fel nifer y defnyddwyr ac erthyglau.

Wedi trwsio criw o bethau bach: er enghraifft, ar gyfer erthyglau, mae nifer y safbwyntiau, hoffterau, cas bethau a sylwadau ar adeg pasio hidlydd y defnyddiwr bellach wedi'i nodi. Yn gyffredinol, mae'n syndod faint o bethau bach y bu'n rhaid eu cywiro. Fe wnes i gadw rhestr, nodi'r holl “afreoleidd-dra” yno a'u cywiro cyn belled ag y bo modd.

Er enghraifft, ychwanegais y gallu i osod pob gosodiad yn uniongyrchol mewn un neges:

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

A thîm arall /settings yn eu harddangos yn union yn y ffurflen hon, gallwch gymryd y testun ohono ac anfon yr holl osodiadau at ffrind.
Mae'n ymddangos fel peth bach, ond mae yna ddwsinau o arlliwiau tebyg.

Hidlo erthygl wedi'i weithredu ar ffurf model llinellol syml - gall y defnyddiwr osod sgôr ychwanegol ar gyfer awduron a thagiau, yn ogystal â gwerth trothwy. Os yw swm sgôr yr awdur, y sgôr gyfartalog ar gyfer tagiau a sgôr wirioneddol yr erthygl yn fwy na'r gwerth trothwy, yna dangosir yr erthygl i'r defnyddiwr. Gallwch naill ai ofyn i'r bot am erthyglau gyda'r gorchymyn / newydd, neu danysgrifio i'r bot a bydd yn anfon erthyglau mewn neges bersonol ar unrhyw adeg o'r dydd.

A siarad yn gyffredinol, roedd gen i syniad i bob erthygl dynnu mwy o nodweddion (canolfannau, nifer y sylwadau, nodau tudalen, dynameg newidiadau graddio, maint y testun, lluniau a chod yn yr erthygl, geiriau allweddol), a dangos iawn / ddim yn iawn pleidleisio o dan bob erthygl a hyfforddi model ar gyfer pob defnyddiwr, ond roeddwn i'n rhy ddiog.

Yn ogystal, ni fydd rhesymeg y gwaith mor amlwg. Nawr gallaf osod sgôr o +9000 â llaw ar gyfer patientZero a chyda sgôr trothwy o +20 byddaf yn sicr o dderbyn ei holl erthyglau (oni bai, wrth gwrs, fy mod yn gosod -100500 ar gyfer rhai tagiau).

Trodd y bensaernïaeth derfynol yn eithaf syml:

  1. Actor sy'n storio cyflwr pob sgwrs ac erthygl. Mae'n llwytho ei gyflwr o ffeil ar y ddisg ac yn ei arbed yn ôl o bryd i'w gilydd, bob tro i ffeil newydd.
  2. Actor sy'n ymweld â'r ffrwd RSS o bryd i'w gilydd, yn dysgu am erthyglau newydd, yn edrych ar y dolenni, yn dosrannu, ac yn anfon yr erthyglau hyn at yr actor cyntaf. Yn ogystal, weithiau mae'n gofyn am restr o erthyglau gan yr actor cyntaf, yn dewis y rhai nad ydynt yn hŷn na thri diwrnod, ond nad ydynt wedi'u diweddaru ers amser maith, ac yn eu diweddaru.
  3. Actor sy'n cyfathrebu â thelegram. Rwy'n dal i ddod â'r neges dosrannu yn gyfan gwbl yma. Mewn ffordd gyfeillgar, hoffwn ei rannu'n ddau - fel bod un yn dosrannu negeseuon sy'n dod i mewn, a'r ail yn delio â phroblemau trafnidiaeth megis ail-anfon negeseuon nas anfonwyd. Nawr nid oes unrhyw ail-anfon, a bydd neges na chyrhaeddodd oherwydd gwall yn syml yn cael ei golli (oni bai ei fod wedi'i nodi yn y logiau), ond hyd yn hyn nid yw hyn wedi achosi unrhyw broblemau. Efallai y bydd problemau'n codi os bydd criw o bobl yn tanysgrifio i'r bot a dwi'n cyrraedd y terfyn ar gyfer anfon negeseuon).

Yr hyn yr oeddwn yn ei hoffi yw, diolch i akka, nid yw cwympiadau actorion 2 a 3 yn gyffredinol yn effeithio ar berfformiad y bot. Efallai nad yw rhai erthyglau yn cael eu diweddaru mewn pryd neu nad yw rhai negeseuon yn cyrraedd y telegram, ond mae'r cyfrif yn ailgychwyn yr actor ac mae popeth yn parhau i weithio. Rwy'n cadw'r wybodaeth y dangosir yr erthygl i'r defnyddiwr dim ond pan fydd yr actor telegram yn ymateb ei fod wedi cyflwyno'r neges yn llwyddiannus. Y peth gwaethaf sy'n fy mygwth yw anfon y neges sawl gwaith (os caiff ei chyflwyno, ond mae'r cadarnhad yn cael ei golli rywsut). Mewn egwyddor, pe na bai'r actor cyntaf yn storio'r wladwriaeth ynddo'i hun, ond yn cyfathrebu â rhywfaint o gronfa ddata, yna gallai hefyd ddisgyn yn ddiarwybod a dychwelyd i fywyd. Gallwn hefyd roi cynnig ar ddyfalbarhad akka i adfer cyflwr yr actorion, ond mae'r gweithredu presennol yn gweddu i mi gyda'i symlrwydd. Nid yw fy nghod yn chwalu'n aml - i'r gwrthwyneb, fe wnes i gryn dipyn o ymdrech i'w wneud yn amhosibl. Ond mae shit yn digwydd, ac roedd y gallu i dorri'r rhaglen yn ddarnau ynysig-actorion yn ymddangos yn hynod gyfleus ac ymarferol i mi.

Ychwanegais circle-ci fel, os bydd y cod yn torri, byddwch yn dod i wybod amdano ar unwaith. Ar y lleiaf, mae'n golygu bod y cod wedi rhoi'r gorau i lunio. I ddechrau roeddwn i eisiau ychwanegu travis, ond dim ond fy mhrosiectau a ddangosodd heb ffyrc. Yn gyffredinol, gellir defnyddio'r ddau beth hyn yn rhydd mewn ystorfeydd agored.

Canlyniadau

Mae'n fis Tachwedd yn barod. Mae'r bot wedi'i ysgrifennu, rydw i wedi bod yn ei ddefnyddio am y pythefnos diwethaf ac roeddwn i'n ei hoffi. Os oes gennych chi syniadau ar gyfer gwella, ysgrifennwch. Dydw i ddim yn gweld y pwynt mewn rhoi gwerth ariannol arno - gadewch iddo weithio ac anfon erthyglau diddorol.

Dolen bot: https://t.me/HabraFilterBot
Github: https://github.com/Kright/habrahabr_reader

Casgliadau bach:

  • Gall hyd yn oed prosiect bach gymryd llawer o amser.
  • Nid ydych chi'n Google. Nid oes diben saethu adar y to o fagnel. Gall ateb syml weithio cystal hefyd.
  • Mae prosiectau anifeiliaid anwes yn dda iawn ar gyfer arbrofi gyda thechnolegau newydd.
  • Mae bots Telegram wedi'u hysgrifennu'n eithaf syml. Oni bai am “waith tîm” ac arbrofion gyda thechnoleg, byddai'r bot wedi'i ysgrifennu mewn wythnos neu ddwy.
  • Mae model yr actor yn beth diddorol sy'n cyd-fynd yn dda â chod aml-edafu a goddefgar.
  • Rwy'n meddwl i mi gael blas ar pam mae'r gymuned ffynhonnell agored yn caru ffyrc.
  • Mae cronfeydd data yn dda oherwydd nid yw cyflwr y cymhwysiad bellach yn dibynnu ar ddamweiniau/ailgychwyn rhaglenni, ond mae gweithio gyda chronfa ddata yn cymhlethu'r cod ac yn gosod cyfyngiadau ar y strwythur data.

Ffynhonnell: hab.com

Ychwanegu sylw