Habr වෙතින් පුද්ගලාරෝපිත ලිපි තේරීමක් සඳහා Telegram bot

"ඇයි?" වැනි ප්‍රශ්න සඳහා පැරණි ලිපියක් ඇත - ස්වාභාවික Geektimes - අවකාශය පිරිසිදු කිරීම.

ලිපි රාශියක් ඇත, ආත්මීය හේතූන් මත ඒවායින් සමහරක් මම කැමති නැත, සහ සමහරක්, ඊට පටහැනිව, එය මඟ හැරීම අනුකම්පාවකි. මම මෙම ක්‍රියාවලිය ප්‍රශස්ත කිරීමට සහ කාලය ඉතිරි කර ගැනීමට කැමතියි.

ඉහත ලිපිය බ්‍රවුසරයේ ස්ක්‍රිප්ටින් ප්‍රවේශයක් යෝජනා කර ඇත, නමුත් පහත හේතූන් නිසා මම ඇත්තටම එයට කැමති නොවෙමි (මම එය කලින් භාවිතා කර ඇතත්):

  • ඔබගේ පරිගණකයේ/දුරකථනයේ ඇති විවිධ බ්‍රවුසර සඳහා, ඔබට හැකිනම් එය නැවත වින්‍යාස කිරීමට සිදුවේ.
  • කතුවරුන් විසින් දැඩි ලෙස පෙරීම සැමවිටම පහසු නොවේ.
  • වසරකට වරක් ප්‍රකාශයට පත් කළත්, ඔබට මඟහැරීමට අවශ්‍ය නැති ලිපි ඇති කතුවරුන්ගේ ගැටලුව විසඳී නැත.

ලිපි ශ්‍රේණිගත කිරීම් මත පදනම්ව වෙබ් අඩවිය තුළට පෙරීම සැමවිටම පහසු නොවේ, මන්ද ඉහළ විශේෂිත ලිපි, ඒවායේ වටිනාකම තිබියදීත්, තරමක් නිහතමානී ශ්‍රේණිගත කිරීමක් ලබා ගත හැකිය.

මුලදී, මට RSS සංග්‍රහයක් (හෝ කිහිපයක් පවා) ජනනය කිරීමට අවශ්‍ය විය, එහි රසවත් දේවල් පමණක් ඉතිරි වේ. නමුත් අවසානයේදී, RSS කියවීම එතරම් පහසු නොවන බව පෙනී ගියේය: ඕනෑම අවස්ථාවක, ලිපියක් සඳහා අදහස් දැක්වීමට / ඡන්දය දීමට / ඔබේ ප්‍රියතමයන් වෙත එය එකතු කිරීමට, ඔබ බ්‍රව්සරය හරහා යා යුතුය. ඒකයි මම ටෙලිග්‍රාම් බොට් එකක් ලිව්වේ මට පෞද්ගලික පණිවිඩයකින් රසවත් ලිපි එවන. ටෙලිග්‍රාම් විසින්ම ඒවායින් අලංකාර පෙරදසුන් සාදනු ලබන අතර, කතෘ/ශ්‍රේණිගත කිරීම්/දර්ශන පිළිබඳ තොරතුරු සමඟ ඒකාබද්ධව, තරමක් තොරතුරු සහිත බව පෙනේ.

Habr වෙතින් පුද්ගලාරෝපිත ලිපි තේරීමක් සඳහා Telegram bot

කප්පාදුවට පහළින් කාර්යයේ ලක්ෂණ, ලිවීමේ ක්රියාවලිය සහ තාක්ෂණික විසඳුම් වැනි විස්තර ඇත.

බොට් ගැන කෙටියෙන්

ගබඩාව: https://github.com/Kright/habrahabr_reader

විදුලි පණිවුඩයේ බොට්: https://t.me/HabraFilterBot

පරිශීලකයා ටැග් සහ කර්තෘ සඳහා අමතර ශ්‍රේණිගත කිරීමක් සකසයි. ඊට පසු, ලිපි සඳහා පෙරහනක් යොදනු ලැබේ - හබ්රේ හි ලිපියේ ශ්‍රේණිගත කිරීම, කතෘගේ පරිශීලක ශ්‍රේණිගත කිරීම සහ ටැගය අනුව පරිශීලක ශ්‍රේණිගත කිරීම් සඳහා සාමාන්‍යය එකතු කරනු ලැබේ. මුදල පරිශීලක-නිශ්චිත සීමාවකට වඩා වැඩි නම්, ලිපිය පෙරහන පසු කරයි.

බොට් ලිවීමේ අතුරු ඉලක්කයක් වූයේ විනෝදය සහ අත්දැකීම් ලබා ගැනීමයි. ඊට අමතරව, මම නිතරම මට එය මතක් කර ගත්තෙමි මම Google නොවේ, එබැවින් බොහෝ දේ හැකි තරම් සරලව හා ප්‍රාථමිකව සිදු කෙරේ. කෙසේ වෙතත්, මෙය බොට් ලිවීමේ ක්‍රියාවලියට මාස තුනක් ගත වීම වැළැක්වූයේ නැත.

එය පිටත ගිම්හානය විය

ජූලි මාසය අවසන් වෙමින් තිබූ අතර, මම බොට් එකක් ලිවීමට තීරණය කළෙමි. ඒ විතරක් නෙවෙයි, ස්කාලා ප්‍රගුණ කරමින් ඒ ගැන යමක් ලියන්න හිතාගෙන හිටපු යාළුවෙක් එක්ක. ආරම්භය බලාපොරොත්තු සහගත බවක් පෙනෙන්නට තිබුණි - කණ්ඩායමක් විසින් කේතය කපා හරිනු ඇත, කාර්යය පහසු බව පෙනෙන්නට තිබූ අතර සති කිහිපයකින් හෝ මාසයක් ඇතුළත බොට් සූදානම් වනු ඇතැයි මම සිතුවෙමි.

පසුගිය වසර කිහිපය තුළ මා විසින්ම පර්වතයේ වරින් වර කේත ලියා ඇතත්, සාමාන්‍යයෙන් කිසිවෙකු මෙම කේතය දකින්නේ හෝ බලන්නේ නැත: සුරතල් ව්‍යාපෘති, සමහර අදහස් පරීක්ෂා කිරීම, දත්ත පෙර සැකසීම, FP වෙතින් සමහර සංකල්ප ප්‍රගුණ කිරීම. කණ්ඩායමක ලිවීමේ කේතය කෙබඳුද යන්න ගැන මම සැබවින්ම උනන්දු විය, මන්ද රොක් මත කේතය විවිධ ආකාරවලින් ලිවිය හැකි බැවිනි.

මොකක්ද යන්න තිබ්බේ එසේ? කෙසේ වෙතත්, අපි දේවල් ඉක්මන් නොකරමු.
සිදු වන සෑම දෙයක්ම කැපවීම් ඉතිහාසය භාවිතයෙන් නිරීක්ෂණය කළ හැකිය.

දන්නා හඳුනන අයෙකු ජූලි 27 වන දින ගබඩාවක් නිර්මාණය කළ නමුත් වෙන කිසිවක් නොකළ නිසා මම කේතය ලිවීමට පටන් ගතිමි.

ජූලි

කෙටියෙන්: මම Habr ගේ rss සංග්‍රහයේ විග්‍රහයක් ලිව්වා.

  • com.github.pureconfig typesafe configs කෙලින්ම කේස් පන්ති වලට කියවීම සඳහා (එය ඉතා පහසු විය)
  • scala-xml xml කියවීම සඳහා: මුලදී මට rss සංග්‍රහය සඳහා මගේම ක්‍රියාත්මක කිරීමක් ලිවීමට අවශ්‍ය වූ අතර, rss සංග්‍රහය xml ආකෘතියෙන් ඇති බැවින්, මම මෙම පුස්තකාලය විග්‍රහ කිරීමට භාවිතා කළෙමි. ඇත්ත වශයෙන්ම, RSS විග්‍රහ කිරීම ද දර්ශනය විය.
  • scalatest පරීක්ෂණ සඳහා. කුඩා ව්‍යාපෘති සඳහා පවා, පරීක්ෂණ ලිවීමෙන් කාලය ඉතිරි වේ - නිදසුනක් ලෙස, xml විග්‍රහ කිරීම නිදොස් කිරීමේදී, එය ගොනුවකට බාගත කිරීම, පරීක්ෂණ ලිවීම සහ දෝෂ නිවැරදි කිරීම වඩාත් පහසු වේ. වලංගු නොවන utf-8 අක්ෂර සහිත අමුතු html කිහිපයක් විග්‍රහ කිරීමත් සමඟ දෝෂයක් පසුව දර්ශනය වූ විට, එය ගොනුවකට දමා පරීක්ෂණයක් එක් කිරීම වඩාත් පහසු විය.
  • අක්කාගෙන් නළුවෝ. වෛෂයිකව, ඒවා කිසිසේත් අවශ්‍ය නොවීය, නමුත් ව්‍යාපෘතිය ලියා ඇත්තේ විනෝදය සඳහා ය, මට ඒවා උත්සාහ කිරීමට අවශ්‍ය විය. ප්රතිඵලයක් වශයෙන්, මම එයට කැමති බව පැවසීමට මම සූදානම්. OOP පිළිබඳ අදහස අනෙක් පැත්තෙන් බැලිය හැකිය - පණිවිඩ හුවමාරු කරන නළුවන් ඇත. වඩාත් සිත්ගන්නා කරුණ නම්, ඔබට පණිවිඩය නොපැමිණෙන හෝ ක්‍රියාවට නැංවිය නොහැකි ආකාරයෙන් කේතය ලිවිය හැකි (සහ කළ යුතු) වීමයි (සාමාන්‍යයෙන් කථා කරන විට, ගිණුම තනි පරිගණකයක ක්‍රියාත්මක වන විට, පණිවිඩ නැති නොවිය යුතුය). මුලදී මම මගේ හිස කසමින් සිටි අතර නළුවන් එකිනෙකාට දායක වන කේතයේ කුණු කසළ තිබුණි, නමුත් අවසානයේ මට තරමක් සරල හා අලංකාර ගෘහ නිර්මාණ ශිල්පයක් ඉදිරිපත් කිරීමට හැකි විය. එක් එක් නළුවා තුළ ඇති කේතය තනි නූල් ලෙස සැලකිය හැකිය; නළුවෙකු කඩා වැටුණු විට, ඇක්කා එය නැවත ආරම්භ කරයි - ප්‍රති result ලය තරමක් දෝෂ-ඉවසන පද්ධතියකි.

9 Aug

මම ව්‍යාපෘතියට එකතු කළා scala-scrapper Habr වෙතින් html පිටු විග්‍රහ කිරීම සඳහා (ලිපි ශ්‍රේණිගත කිරීම, පිටුසන් ගණන වැනි තොරතුරු ලබා ගැනීමට).

සහ බළලුන්. පර්වතයේ සිටින අය.

Habr වෙතින් පුද්ගලාරෝපිත ලිපි තේරීමක් සඳහා Telegram bot

මම පසුව බෙදා හරින ලද දත්ත සමුදායන් පිළිබඳ පොතක් කියෙව්වා, මම CRDT (ගැටුම් රහිත අනුරූ දත්ත වර්ගය, https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type, habr), එබැවින් මම Habré පිළිබඳ ලිපිය පිළිබඳ තොරතුරු සඳහා සංක්‍රමණික අර්ධ සමූහයක වර්ග පන්තියක් පළ කළෙමි.

ඇත්ත වශයෙන්ම, අදහස ඉතා සරලයි - අපට ඒකාකාරී ලෙස වෙනස් වන කවුන්ටර තිබේ. ප්ලස් ගණන (මෙන්ම අවාසි ගණන) මෙන් උසස්වීම් ගණන ක්‍රමයෙන් වර්ධනය වේ. මට ලිපියක් පිළිබඳ තොරතුරු අනුවාද දෙකක් තිබේ නම්, මට ඒවා “එකකට ඒකාබද්ධ කළ හැකිය” - විශාල කවුන්ටරයේ තත්වය වඩාත් අදාළ යැයි සැලකේ.

අර්ධ සමූහයක් යනු ලිපියක් පිළිබඳ තොරතුරු සහිත වස්තූන් දෙකක් එකකට ඒකාබද්ධ කළ හැකි බවයි. Commutative යන්නෙන් අදහස් කරන්නේ ඔබට A + B සහ B + A යන දෙකම ඒකාබද්ධ කළ හැකි බවයි, ප්රතිඵලය අනුපිළිවෙල මත රඳා නොපවතින අතර අවසානයේ නවතම අනුවාදය පවතිනු ඇත. මාර්ගය වන විට, මෙහි ආශ්රිතය ද ඇත.

උදාහරණයක් ලෙස, සැලසුම් කර ඇති පරිදි, විග්‍රහ කිරීමෙන් පසු rss ලිපිය පිළිබඳ තරමක් දුර්වල වූ තොරතුරු සපයා ඇත - බැලීම් ගණන වැනි ප්‍රමිතික නොමැතිව. විශේෂ නළුවෙක් පසුව ලිපි පිළිබඳ තොරතුරු ලබාගෙන එය යාවත්කාලීන කිරීමට සහ පැරණි අනුවාදය සමඟ ඒකාබද්ධ කිරීමට html පිටු වෙත දිව ගියේය.

සාමාන්‍යයෙන් කිව්වොත් අක්කේ වගේ මේකේ අවශ්‍යතාවයක් තිබුනේ නෑ, ඔයාට ලිපියට updatedate ගබඩා කරලා අලුත් එකක් ගන්න පුළුවන් කිසිම බද්ධ වීමක් නැතුව, නමුත් ත්‍රාසජනක මාවත මාව ගෙන ගියා.

12 Aug

මට නිදහසක් දැනෙන්නට පටන් ගත් අතර, විනෝදය සඳහා, මම එක් එක් කතාබස් වෙනම නළුවෙකු බවට පත් කළෙමි. න්‍යායාත්මකව, නළුවෙකුගේ බර බයිට් 300 ක් පමණ වන අතර ඒවා මිලියන ගණනකින් නිර්මාණය කළ හැකිය, එබැවින් මෙය සම්පූර්ණයෙන්ම සාමාන්‍ය ප්‍රවේශයකි. විසඳුම තරමක් සිත්ගන්නාසුළු වූ බව මට පෙනේ:

එක නළුවෙක් අක්කේ ටෙලිග්‍රෑම් සර්වර් එකයි මැසේජ් සිස්ටම් එකයි අතර පාලමක් වුණා. ඔහුට හුදෙක් පණිවිඩ ලැබී අවශ්‍ය චැට් නළුවාට යැවීය. කතාබස් නළුවාට ප්‍රතිචාරයක් ලෙස යමක් ආපසු එවිය හැකිය - එය නැවත විදුලි පණිවුඩයට යවනු ලැබේ. ඉතා පහසු දෙය නම්, මෙම නළුවා හැකි තරම් සරල වූ අතර පණිවිඩවලට ප්‍රතිචාර දැක්වීමේ තර්කය පමණක් අඩංගු විය. මාර්ගය වන විට, නව ලිපි පිළිබඳ තොරතුරු සෑම සංවාදයකටම පැමිණි නමුත් නැවතත් මම මෙහි කිසිදු ගැටළුවක් නොදකිමි.

පොදුවේ ගත් කල, බොට් දැනටමත් ක්‍රියා කරමින්, පණිවිඩ වලට ප්‍රතිචාර දක්වමින්, පරිශීලකයාට යවන ලද ලිපි ලැයිස්තුවක් ගබඩා කරමින් සිටි අතර, බොට් පාහේ සූදානම් බව මම දැනටමත් සිතුවෙමි. මම කර්තෘ නම් සහ ටැග් සාමාන්‍යකරණය කිරීම වැනි කුඩා විශේෂාංග සෙමින් එකතු කළෙමි ("sd f" වෙනුවට "s_d_f").

ඉතිරිව තිබුණේ එක දෙයයි කුඩා නමුත් - රාජ්‍යය කොතැනකවත් සුරැකුණේ නැත.

හැම දෙයක්ම වැරදුණා

මම බොට් එක ලිව්වේ වැඩි හරියක් තනියම බව ඔයාල දැකල ඇති. එබැවින්, දෙවන සහභාගිවන්නා සංවර්ධනයට සම්බන්ධ වූ අතර, කේතයේ පහත වෙනස්කම් දර්ශනය විය:

  • MongoDB රාජ්‍ය ගබඩා කිරීමට පෙනී සිටියේය. ඒ සමඟම, ව්‍යාපෘතියේ ලොග් කැඩී ගියේය, මන්ද කිසියම් හේතුවක් නිසා මොන්ගා ඒවා ස්පෑම් කිරීමට පටන් ගත් අතර සමහර අය ඒවා ගෝලීය වශයෙන් ක්‍රියා විරහිත කළ බැවිනි.
  • ටෙලිග්‍රාම් හි පාලම නළුවා හඳුනාගත නොහැකි ලෙස පරිවර්තනය වූ අතර ඔහු විසින්ම පණිවිඩ විග්‍රහ කිරීමට පටන් ගත්තේය.
  • කතාබස් සඳහා නළු නිළියන් අනුකම්පා විරහිතව කපා හැර ඇති අතර, ඒ වෙනුවට ඔවුන් වෙනුවට සියලු කතාබස් පිළිබඳ සියලු තොරතුරු එකවර සඟවන නළුවෙකු විසින් ආදේශ කරන ලදී. හැම කිවිසුමකටම මේ නළුවා අමාරුවේ වැටුණා. හොඳයි, ඔව්, ලිපියක් පිළිබඳ තොරතුරු යාවත්කාලීන කරන විට, එය සියලුම කතාබස් නළුවන්ට යැවීම දුෂ්කර ය (අපි ගූගල් වැනි ය, මිලියන ගණනක් පරිශීලකයින් එක් එක් කතාබස් තුළ ලිපි මිලියනයක් එනතුරු බලා සිටී), නමුත් කතාබස් යාවත්කාලීන වන සෑම අවස්ථාවකම, Monga වලට යන එක සාමාන්‍ය දෙයක්. බොහෝ කලකට පසුව මට වැටහුණු පරිදි, කතාබස් වල ක්‍රියාකාරී තර්කනය ද සම්පූර්ණයෙන්ම කපා හැර ඇති අතර එහි ස්ථානයේ ක්‍රියා නොකරන දෙයක් දිස් විය.
  • වර්ගයේ පන්තිවල කිසිදු හෝඩුවාවක් ඉතිරිව නැත.
  • එකිනෙකාට දායක වීමත් සමඟ නළුවන් තුළ යම් සෞඛ්‍ය සම්පන්න නොවන තර්කයක් පැන නැගී ඇති අතර එය ධාවන තත්වයක් ඇති කරයි.
  • වර්ගයේ ක්ෂේත්ර සහිත දත්ත ව්යුහයන් Option[Int] -1 වැනි ඉන්ද්‍රජාලික පෙරනිමි අගයන් සමඟ Int බවට පත් විය. mongoDB ගබඩා කරන්නේ json බවත් එය එහි ගබඩා කිරීමේ වරදක් නැති බවත් පසුව මට වැටහුණා Option හොඳයි, නැතහොත් අවම වශයෙන් -1 කිසිවක් නැත ලෙස විග්‍රහ කරන්න, නමුත් ඒ වන විට මම මෙය නොදැන සිටි අතර “එය එසේ විය යුතුය” යන්න මගේ වචනය ගත්තා. මම එම කේතය ලිව්වේ නැත, සහ දැනට එය වෙනස් කිරීමට මම කරදර නොවෙමි.
  • මගේ පොදු IP ලිපිනය වෙනස් වීමට නැඹුරු වන බව මම සොයා ගත්තෙමි, සෑම අවස්ථාවකදීම මට එය Mongo හි සුදු ලැයිස්තුවට එක් කිරීමට සිදු විය. මම බොට් එක දේශීයව දියත් කළා, මොන්ගා සමාගමක් ලෙස මොන්ගා සර්වර් වල කොතැනක හෝ සිටියා.
  • හදිසියේම, ටැග් සාමාන්‍යකරණය කිරීම සහ විදුලි පණිවුඩ සඳහා පණිවිඩ හැඩතල ගැන්වීම අතුරුදහන් විය. (හ්ම්, ඇයි එහෙම වෙන්නේ?)
  • බොට්ගේ තත්වය බාහිර දත්ත ගබඩාවක ගබඩා කර ඇති බවට මම කැමති වූ අතර නැවත ආරම්භ කළ විට එය කිසිවක් සිදු නොවූවාක් මෙන් දිගටම ක්‍රියා කරයි. කෙසේ වෙතත්, මෙය එකම ප්ලස් විය.

දෙවන පුද්ගලයා විශේෂ කඩිමුඩියේ නොසිටි අතර, මෙම සියලු වෙනස්කම් සැප්තැම්බර් මස මුලදී දැනටමත් එක් විශාල ගොඩක දර්ශනය විය. එහි ප්‍රතිඵලය වන විනාශයේ පරිමාණය මම වහාම අගය නොකළ අතර දත්ත සමුදායේ ක්‍රියාකාරිත්වය තේරුම් ගැනීමට පටන් ගතිමි, මන්ද ... මම මීට පෙර ඔවුන් සමඟ ගනුදෙනු කර නැත. පස්සේ තමයි තේරුනේ කොච්චර වැඩ කරන කෝඩ් කපලාද, ඒ වෙනුවට බග් කීයක් එකතු වෙලාද කියලා.

සැප්තැම්බර්

මම මුලින් හිතුවා මොංගා ප්‍රගුණ කරලා හොඳට කරන්න පුළුවන් වෙයි කියලා. එතකොට මට හෙමින් හෙමින් තේරෙන්න ගත්තා database එකත් එක්ක සන්නිවේදනය සංවිධානය කරන එකත් ගොඩක් ජාති හදාගෙන නිකන් වැරදි හදාගන්න පුළුවන් කලාවක් කියලා. උදාහරණයක් ලෙස, පරිශීලකයා වැනි පණිවිඩ දෙකක් ලැබෙන්නේ නම් /subscribe - සහ එක් එක් ඒවාට ප්‍රතිචාර වශයෙන් අපි වගුවේ ඇතුළත් කිරීමක් සාදන්නෙමු, මන්ද එම පණිවිඩ සැකසීමේදී පරිශීලකයා දායක වී නොමැත. මොංගා සමඟ වර්තමාන ස්වරූපයෙන් සන්නිවේදනය ලියා ඇත්තේ හොඳම ආකාරයෙන් නොවන බවට මට සැකයක් ඇත. උදාහරණයක් ලෙස, පරිශීලකයාගේ සැකසුම් ඔහු ලියාපදිංචි වූ මොහොතේම නිර්මාණය කර ඇත. දායක වීමේ කාරනයට පෙර ඔහු ඒවා වෙනස් කිරීමට උත්සාහ කළහොත් ... බොට් කිසිවක් ප්රතිචාර දැක්වූයේ නැත, මන්ද නළුවා තුළ ඇති කේතය සැකසුම් සඳහා දත්ත ගබඩාවට ගොස් එය සොයා නොගෙන බිඳ වැටුණි. අවශ්‍ය පරිදි සැකසුම් සාදා නොගන්නේ මන්දැයි විමසූ විට, පරිශීලකයා දායක වී නොමැති නම් ඒවා වෙනස් කිරීමට අවශ්‍ය නොවන බව මම දැන සිටියෙමි ... පණිවිඩ පෙරීමේ පද්ධතිය කෙසේ හෝ පැහැදිලිවම නොවන ලෙස සාදා ඇති අතර, කේතය දෙස සමීපව බැලීමෙන් පසුව පවා මට හැකි විය. එය මුලින් මේ ආකාරයෙන් අදහස් කළේද නැතහොත් එහි දෝෂයක් තිබේද යන්න තේරුම් ගත නොහැක.

සංවාදයට ඉදිරිපත් කළ ලිපි ලැයිස්තුවක් නොතිබුණි; ඒ වෙනුවට, ඒවා මා විසින්ම ලියන ලෙස යෝජනා කරන ලදී. මෙය මා පුදුමයට පත් කළේය - පොදුවේ ගත් කල, මම සියලු ආකාරයේ දේවල් ව්‍යාපෘතියට ඇද ගැනීමට විරුද්ධ නොවෙමි, නමුත් මේ දේවල් ගෙනැවිත් ඒවා ඉස්කුරුප්පු කළ තැනැත්තාට එය තාර්කික වනු ඇත. නමුත් නැත, දෙවන සහභාගිවන්නා සියල්ල අතහැර දැමූ බවක් පෙනෙන්නට තිබුණත්, කතාබස් තුළ ඇති ලැයිස්තුව නරක විසඳුමක් යැයි කියනු ලබන බවත්, “y ලිපියක් පරිශීලකයා වෙත යවන ලදී” වැනි සිදුවීම් සමඟ ලකුණක් කිරීමට අවශ්‍ය බවත් පැවසීය. එවිට, පරිශීලකයා නව ලිපි යැවීමට ඉල්ලා සිටියේ නම්, දත්ත සමුදායට ඉල්ලීමක් යැවීමට අවශ්‍ය විය, එමඟින් සිදුවීම් වලින් පරිශීලකයාට අදාළ සිදුවීම් තෝරා ගැනීම, නව ලිපි ලැයිස්තුවක් ලබා ගැනීම, ඒවා පෙරීම, පරිශීලකයාට යැවීම සහ මේ පිළිබඳ සිදුවීම් නැවත දත්ත ගබඩාවට දමන්න.

බොට් හට හබ්ර් වෙතින් ලිපි පමණක් නොව විදුලි පණිවුඩ වෙත යවනු ලබන විට, දෙවන සහභාගිවන්නා වියුක්තයන් වෙත කොතැනක හෝ ගෙන යන ලදී.

මම කෙසේ හෝ සැප්තැම්බර් දෙවන භාගය සඳහා වෙනම ලකුණක් ආකාරයෙන් සිදුවීම් ක්රියාත්මක කළා. එය ප්රශස්ත නොවේ, නමුත් අඩුම තරමින් බොට් වැඩ කිරීමට පටන් ගෙන නැවත මට ලිපි යැවීමට පටන් ගත් අතර, කේතයේ සිදුවන්නේ කුමක්දැයි මම සෙමින් සොයා ගතිමි.

දැන් ඔබට නැවත මුලට ගොස් මතක තබා ගත හැකි අතර, ගබඩාව මුලින් නිර්මාණය කළේ මා විසින් නොවන බව. මොනවා වෙන්න ඇතිද මේ විදියට. මගේ ඇදීමේ ඉල්ලීම ප්‍රතික්ෂේප විය. මට රෙඩ්නෙක් කේතයක් ඇති බවත්, මම කණ්ඩායමක වැඩ කරන්නේ කෙසේදැයි නොදන්නා බවත්, වර්තමාන ක්‍රියාත්මක කිරීමේ වක්‍රයේ දෝෂ නිවැරදි කිරීමට මට සිදු වූ බවත්, එය භාවිතා කළ හැකි තත්වයකට ශෝධනය නොකළ බවත් පෙනී ගියේය.

මම කලබල වෙලා කමිට් ඉතිහාසෙයි, ලියපු කෝඩ් ප්‍රමාණයයි බැලුවා. මම මුලින් හොඳින් ලියා ඇති අවස්ථා දෙස බැලුවෙමි, පසුව බිඳී ගිය ...

එය F*rk කරන්න

මට ලිපිය මතක් වුනා ඔබ Google නොවේ.

ක්‍රියාවට නැංවීමකින් තොරව කිසිවෙකුට අදහසක් අවශ්‍ය නොවන බව මම සිතුවෙමි. මම හිතුවා මට වැඩ කරන bot එකක් තියෙන්න ඕන කියලා, ඒක එක පරිගණකයක එක පිටපතකින් සරල java program එකක් විදියට වැඩ කරනවා. මම දැනටමත් එවැනි bots අතීතයේ ලියා ඇති බැවින් මගේ බොට් නැවත ආරම්භ කිරීමකින් තොරව මාස ගණනක් වැඩ කරන බව මම දනිමි. එය හදිසියේම වැටී පරිශීලකයාට වෙනත් ලිපියක් නොයවන්නේ නම්, අහස බිමට නොවැටෙන අතර විනාශකාරී කිසිවක් සිදු නොවේ.

කේතය සරලව ක්‍රියා නොකරන්නේ නම් හෝ වංක ලෙස ක්‍රියා කරන්නේ නම් මට Docker, mongoDB සහ "බරපතල" මෘදුකාංගයේ වෙනත් භාණ්ඩ සංස්කෘතියක් අවශ්‍ය වන්නේ ඇයි?

මම ව්‍යාපෘතිය අතෑරලා මට ඕන විදියට හැමදේම කළා.

Habr වෙතින් පුද්ගලාරෝපිත ලිපි තේරීමක් සඳහා Telegram bot

ඒ අතරම, මම රැකියාව වෙනස් කළ අතර නිදහස් කාලය ඉතා අඩු විය. උදේ මම කෝච්චියේම අවදි වුණෙමි, සවස් වන විට මම ප්‍රමාද වී ආපසු පැමිණියෙමි, තවදුරටත් කිසිවක් කිරීමට අවශ්‍ය නොවීය. මම ටික වේලාවක් කිසිවක් නොකළෙමි, පසුව බොට් එක අවසන් කිරීමට ඇති ආශාව මා යටපත් කළ අතර මම උදේ වැඩට යන අතරතුර කේතය සෙමින් නැවත ලිවීමට පටන් ගතිමි. එය ඵලදායී බව මම නොකියමි: ඔබේ උකුලේ ලැප්ටොප් පරිගණකයක් සමඟ සෙලවෙන දුම්රියක වාඩි වී ඔබේ දුරකථනයෙන් පිටාර ගැලීම දෙස බැලීම එතරම් පහසු නැත. කෙසේ වෙතත්, කේතය ලිවීමට ගත කළ කාලය සම්පූර්ණයෙන්ම නොදැනුවත්වම පියාසර කළ අතර, ව්‍යාපෘතිය ක්‍රමයෙන් වැඩ කරන තත්වයක් කරා ගමන් කිරීමට පටන් ගත්තේය.

මගේ මනසේ කොතැනක හෝ mongoDB භාවිතා කිරීමට අවශ්‍ය සැකයේ පණුවෙකු සිටියේය, නමුත් “විශ්වසනීය” රාජ්‍ය ගබඩාවේ වාසි වලට අමතරව, සැලකිය යුතු අවාසි ඇති බව මම සිතුවෙමි:

  • දත්ත සමුදාය අසාර්ථක වීමේ තවත් ලක්ෂයක් බවට පත්වේ.
  • කේතය වඩාත් සංකීර්ණ වෙමින් පවතින අතර, එය ලිවීමට මට වැඩි කාලයක් ගතවනු ඇත.
  • කේතය මන්දගාමී සහ අකාර්යක්ෂම වේ; මතකයේ ඇති වස්තුවක් වෙනස් කිරීම වෙනුවට, වෙනස්කම් දත්ත ගබඩාවට යවනු ලබන අතර අවශ්ය නම් ආපසු ඇද දමනු ලැබේ.
  • දත්ත සමුදායේ සුවිශේෂතා සමඟ සම්බන්ධ වන වෙනම වගුවක සිදුවීම් ගබඩා කිරීමේ වර්ගය පිළිබඳ සීමාවන් තිබේ.
  • Monga හි අත්හදා බැලීමේ අනුවාදයට යම් සීමාවන් ඇති අතර, ඔබ ඒවාට පිවිසෙන්නේ නම්, ඔබට මොන්ගා යමක් දියත් කිරීමට සහ වින්‍යාස කිරීමට සිදුවේ.

මම මොන්ගා කපා දැමුවෙමි, දැන් බොට්ගේ තත්වය වැඩසටහනේ මතකයේ සරලව ගබඩා කර ඇති අතර වරින් වර json ආකාරයෙන් ගොනුවකට සුරකිනු ලැබේ. සමහර විට අදහස් දැක්වීමේදී ඔවුන් ලියන්නේ මම වැරදියි, දත්ත සමුදාය භාවිතා කළ යුතු ස්ථානය මෙයයි. නමුත් මෙය මගේ ව්යාපෘතියයි, ගොනුව සමඟ ප්රවේශය හැකි තරම් සරල වන අතර එය විනිවිද පෙනෙන ආකාරයෙන් ක්රියා කරයි.

-1 වැනි මැජික් අගයන් ඉවතට විසි කර සාමාන්‍ය අගයන් ආපසු ලබා දුන්නේය Option, කතාබස් තොරතුරු සහිත වස්තුව වෙත ආපසු යවන ලද ලිපි සහිත හැෂ් වගුවක ගබඩාව එකතු කරන ලදී. සෑම දෙයක්ම ගබඩා නොකිරීමට, දින පහකට වඩා පැරණි ලිපි පිළිබඳ තොරතුරු මකා දැමීම එකතු කරන ලදී. මම ලොග් කිරීම ක්‍රියාකාරී තත්වයකට ගෙනාවා - ලොග් ගොනුව සහ කොන්සෝලය යන දෙකටම සාධාරණ ප්‍රමාණවලින් ලියා ඇත. තත්වය සුරැකීම හෝ පරිශීලකයින් සහ ලිපි ගණන වැනි සංඛ්‍යාලේඛන ලබා ගැනීම වැනි පරිපාලක විධාන කිහිපයක් එක් කරන ලදී.

කුඩා දේවල් පොකුරක් සවි කර ඇත: උදාහරණයක් ලෙස, ලිපි සඳහා, පරිශීලකයාගේ පෙරණය පසු කරන අවස්ථාවේ දී බැලීම්, කැමති, අකමැති සහ අදහස් ගණන දැන් දක්වා ඇත. පොදුවේ ගත් කල, කුඩා දේවල් කීයක් නිවැරදි කළ යුතුද යන්න පුදුම සහගතය. මම ලැයිස්තුවක් තබා, එහි ඇති සියලුම "අක්‍රමිකතා" සටහන් කර හැකිතාක් දුරට නිවැරදි කළෙමි.

උදාහරණයක් ලෙස, මම එක් පණිවිඩයක් තුළ සියලු සැකසුම් සෘජුවම සැකසීමේ හැකියාව එක් කළෙමි:

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

සහ තවත් කණ්ඩායමක් /settings ඒවා හරියටම මෙම පෝරමයේ පෙන්වයි, ඔබට එයින් පෙළ ගෙන සියලු සැකසුම් මිතුරෙකුට යැවිය හැකිය.
එය කුඩා දෙයක් සේ පෙනේ, නමුත් සමාන සූක්ෂ්ම දුසිම් ගණනක් ඇත.

සරල රේඛීය ආකෘතියක ස්වරූපයෙන් ලිපි පෙරීම ක්‍රියාත්මක කර ඇත - පරිශීලකයාට කතුවරුන් සහ ටැග් සඳහා අමතර ශ්‍රේණිගත කිරීමක් මෙන්ම එළිපත්ත අගයක් ද සැකසිය හැකිය. කතෘගේ ශ්‍රේණිගත කිරීමේ එකතුව, ටැග් සඳහා සාමාන්‍ය ශ්‍රේණිගත කිරීම සහ ලිපියේ සත්‍ය ශ්‍රේණිගත කිරීම එළිපත්ත අගයට වඩා වැඩි නම්, එම ලිපිය පරිශීලකයාට පෙන්වනු ලැබේ. ඔබට /නව විධානය සහිත ලිපි සඳහා බොට්ගෙන් ඉල්ලා සිටිය හැකිය, නැතහොත් බොට් වෙත දායක විය හැකි අතර එය දවසේ ඕනෑම වේලාවක පුද්ගලික පණිවිඩයකින් ලිපි යවනු ඇත.

සාමාන්‍යයෙන් කථා කරන විට, එක් එක් ලිපිය සඳහා තවත් විශේෂාංග (හබ්, අදහස් ගණන, පිටු සලකුණු, ශ්‍රේණිගත කිරීමේ වෙනස්වීම්වල ගතිකතාවයන්, පෙළ ප්‍රමාණය, පින්තූර සහ ලිපියේ කේත, මූල පද) ඉවත් කර පරිශීලකයාට හරි / පෙන්වීමට අදහසක් තිබුණි. හරි නැහැ එක් එක් ලිපිය යටතේ ඡන්දය දී එක් එක් පරිශීලකයා සඳහා ආකෘතියක් පුහුණු කරන්න, නමුත් මම කම්මැලි විය.

ඊට අමතරව, කාර්යයේ තර්කනය එතරම් පැහැදිලි නොවනු ඇත. දැන් මට රෝගියා Zero සඳහා +9000 ශ්‍රේණිගත කිරීමක් අතින් සැකසිය හැකි අතර +20 සීමාවේ ශ්‍රේණිගත කිරීමක් සමඟ මට ඔහුගේ සියලුම ලිපි ලැබීමට සහතික වනු ඇත (ඇත්ත වශයෙන්ම, මම සමහර ටැග් සඳහා -100500 සකසන්නේ නම් මිස).

අවසාන ගෘහ නිර්මාණ ශිල්පය තරමක් සරල විය:

  1. සියලුම කතාබස් සහ ලිපිවල තත්වය ගබඩා කරන නළුවෙකි. එය තැටියේ ඇති ගොනුවකින් එහි තත්වය පටවන අතර එය වරින් වර, සෑම අවස්ථාවකදීම නව ගොනුවකට සුරකියි.
  2. RSS ෆීඩ් එකට ඉඳලා හිටලා එන නළුවෙක්, අලුත් ලිපි ගැන ඉගෙන ගෙන, ලින්ක් බලලා, විග්‍රහ කරලා, මේ ලිපි පළවෙනි නළුවාට යවනවා. ඊට අමතරව, එය සමහර විට පළමු නළුවාගෙන් ලිපි ලැයිස්තුවක් ඉල්ලා, දින තුනකට වඩා පැරණි නොවන, නමුත් දිගු කලක් යාවත්කාලීන නොකළ ඒවා තෝරා ඒවා යාවත්කාලීන කරයි.
  3. විදුලි පණිවුඩයක් සමඟ සන්නිවේදනය කරන නළුවෙක්. මම තවමත් පණිවිඩ විග්‍රහ කිරීම සම්පූර්ණයෙන්ම මෙහි ගෙන ආවා. මිත්‍රශීලී ආකාරයකින්, මම එය දෙකකට බෙදීමට කැමැත්තෙමි - එක් අයෙකු පැමිණෙන පණිවිඩ විග්‍රහ කරයි, සහ දෙවැන්න නොයැවූ පණිවිඩ නැවත යැවීම වැනි ප්‍රවාහන ගැටලු සමඟ කටයුතු කරයි. දැන් නැවත යැවීමක් නොමැති අතර, දෝෂයක් හේතුවෙන් නොපැමිණි පණිවිඩයක් සරලව නැති වී යනු ඇත (එය ලඝු-සටහන් වල සටහන් කර නොමැති නම්), නමුත් මෙතෙක් මෙය කිසිදු ගැටළුවක් ඇති කර නොමැත. මිනිසුන් සමූහයක් බොට් වෙත දායක වුවහොත් සහ මම පණිවිඩ යැවීමේ සීමාවට ළඟා වුවහොත් සමහර විට ගැටළු මතු විය හැකිය).

මම කැමති වුනේ අක්කාට පින්සිද්ධ වෙන්න 2 සහ 3 නළුවන්ගේ වැටීම් සාමාන්‍යයෙන් බොට්ගේ රංගනයට බලපාන්නේ නැහැ. සමහර විට සමහර ලිපි නියමිත වේලාවට යාවත්කාලීන කර නැත හෝ සමහර පණිවිඩ විදුලි පණිවුඩයට නොපැමිණේ, නමුත් ගිණුම නළුවා නැවත ආරම්භ කරන අතර සෑම දෙයක්ම දිගටම වැඩ කරයි. ලිපිය පරිශීලකයාට පෙන්වන තොරතුරු මම සුරකිමි, විදුලි පණිවුඩ නළුවා පණිවිඩය සාර්ථකව ලබා දුන් බවට ප්‍රතිචාර දැක්වූ විට පමණි. මට තර්ජනය කරන නරකම දෙය නම් පණිවිඩය කිහිප වතාවක් යැවීමයි (එය භාර දුන්නේ නම්, නමුත් තහවුරු කිරීම කෙසේ හෝ නැති වී යයි). ප්‍රතිපත්තිමය වශයෙන්, පළමු නළුවා තමා තුළම රාජ්‍යය ගබඩා කර නොගෙන, යම් දත්ත සමුදායක් සමඟ සන්නිවේදනය කළේ නම්, ඔහුට නොපෙනෙන ලෙස වැටී ජීවිතයට නැවත පැමිණිය හැකිය. නළුවන්ගේ තත්වය යථා තත්ත්වයට පත් කිරීම සඳහා අක්කා නොපසුබට උත්සාහය ද මට උත්සාහ කළ හැකිය, නමුත් වර්තමාන ක්‍රියාත්මක කිරීම එහි සරල බව සමඟ මට ගැලපේ. මගේ කේතය බොහෝ විට කඩා වැටුණු බවක් නොවේ - ඊට පටහැනිව, එය කළ නොහැකි වීමට මම විශාල උත්සාහයක් දැරූවෙමි. නමුත් ජරාව සිදු වන අතර, වැඩසටහන හුදකලා කෑලි-නළුවන්ට කැඩීමේ හැකියාව මට ඇත්තෙන්ම පහසු සහ ප්‍රායෝගික බවක් පෙනෙන්නට තිබුණි.

මම රවුම-ci එකතු කළෙමි, එවිට කේතය කැඩී ගියහොත්, ඔබ වහාම ඒ ගැන සොයා ගනු ඇත. අවම වශයෙන්, එයින් අදහස් වන්නේ කේතය සම්පාදනය කිරීම නතර කර ඇති බවයි. මුලදී මට ට්‍රැවිස් එකතු කිරීමට අවශ්‍ය විය, නමුත් එය දෙබලකින් තොරව මගේ ව්‍යාපෘති පමණක් පෙන්වීය. පොදුවේ ගත් කල, මෙම කරුණු දෙකම විවෘත ගබඩාවල නිදහසේ භාවිතා කළ හැකිය.

ප්රතිඵල

දැනටමත් නොවැම්බර්. බොට් එක ලියා ඇත, මම එය පසුගිය සති දෙක තුළ භාවිතා කළ අතර මම එයට කැමති විය. ඔබට වැඩිදියුණු කිරීම සඳහා අදහස් තිබේ නම්, ලියන්න. එය මුදල් ඉපැයීමේ කාරණය මට නොපෙනේ - එය ක්‍රියා කිරීමට සහ රසවත් ලිපි යැවීමට ඉඩ දෙන්න.

බොට් ලින්ක්: https://t.me/HabraFilterBot
Github: https://github.com/Kright/habrahabr_reader

කුඩා නිගමන:

  • කුඩා ව්යාපෘතියකට පවා බොහෝ කාලයක් ගත විය හැකිය.
  • ඔබ Google නොවේ. කාලතුවක්කුවෙන් හාල්මැස්සන්ට වෙඩි තැබීමෙන් පලක් නැත. සරල විසඳුමක් ද ක්‍රියාත්මක විය හැකිය.
  • නව තාක්ෂණයන් සමඟ අත්හදා බැලීම සඳහා සුරතල් ව්යාපෘති ඉතා හොඳයි.
  • ටෙලිග්‍රාම් බොට් ඉතා සරලව ලියා ඇත. එය "කණ්ඩායම් වැඩ" සහ තාක්ෂණය සමඟ අත්හදා බැලීම් සඳහා නොවේ නම්, බොට් සතියකින් හෝ දෙකකින් ලියා ඇත.
  • නළු ආකෘතිය යනු බහු-නූල් සහ දෝෂ-ඉවසන කේතය සමඟ හොඳින් ගමන් කරන සිත්ගන්නා දෙයකි.
  • විවෘත මූලාශ්‍ර ප්‍රජාව ගෑරුප්පු වලට ආදරය කරන්නේ මන්දැයි මම සිතමි.
  • යෙදුම් තත්ත්වය තවදුරටත් යෙදුම් බිඳවැටීම්/නැවත ආරම්භ කිරීම මත රඳා නොපවතින නිසා දත්ත සමුදායන් හොඳයි, නමුත් දත්ත සමුදායක් සමඟ වැඩ කිරීම කේතය සංකීර්ණ කරන අතර දත්ත ව්‍යුහයට සීමාවන් පනවයි.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න