புரோஹோஸ்டர் > Блог > இணைய செய்தி > பவர்ஷெல்லைப் பயன்படுத்தி 7-9 வகுப்புகளில் உள்ள பள்ளி மாணவர்களுக்கான எளிய டெலிகிராம் போட்டிற்கான டெம்ப்ளேட்
பவர்ஷெல்லைப் பயன்படுத்தி 7-9 வகுப்புகளில் உள்ள பள்ளி மாணவர்களுக்கான எளிய டெலிகிராம் போட்டிற்கான டெம்ப்ளேட்
ஒரு நண்பருடன் உரையாடியபோது, அவர்களின் பள்ளியில் 8-10 வகுப்புகளில் உள்ள குழந்தைகளுக்கு நிரலாக்கம் கற்பிக்கப்படுவதில்லை என்பதை நான் திடீரென்று அறிந்தேன். Word, Excel மற்றும் அனைத்தும். லோகோ இல்லை, பாஸ்கல் கூட இல்லை, எக்செலுக்கான VBA கூட இல்லை.
நான் மிகவும் ஆச்சரியப்பட்டேன், இணையத்தைத் திறந்து படிக்க ஆரம்பித்தேன் - ஒரு சிறப்புப் பள்ளியின் பணிகளில் ஒன்று, புதிய தலைமுறையின் கல்வியை மேம்படுத்துவதாகும், இது தகவல் சமூகத்தின் நிலைமைகளை அதன் வளர்ச்சி மற்றும் வாழ்க்கை முறையின் மட்டத்தில் சந்திக்கிறது.
பாஸ்கல் நிரலாக்க மொழியின் அடிப்படைக் கட்டமைப்பைப் பற்றிய அவர்களின் அறிவை நடைமுறையில் ஒருங்கிணைக்க இந்தப் பாடநெறி மாணவர்களை அனுமதிக்கும். (2017 ஆம் ஆண்டிற்கான சில உடற்பயிற்சி கூடத்தின் திட்டத்திலிருந்து)
முடிவில், இரண்டு மணிநேரம் செலவழித்து, "பள்ளிக் குழந்தைகளுக்கு ஒரு எளிய போட்டை எவ்வாறு உருவாக்குவது" என்பதற்கான உதாரணத்தை வரைய முடிவு செய்தேன்.
பவர்ஷெல்லில் மற்றொரு எளிய போட்டை எழுதுவது மற்றும் வெப்ஹூக், வெள்ளை ஐபிகள், பிரத்யேக சேவையகங்கள், கிளவுட்டில் பயன்படுத்தப்படும் மெய்நிகர் இயந்திரங்கள் மற்றும் பலவற்றை இல்லாமல் - வழக்கமான விண்டோஸ் கொண்ட வழக்கமான ஹோம் பிசியில் எப்படி வேலை செய்வது என்பது கீழே உள்ளது.
TLDR: இலக்கண மற்றும் உண்மைப் பிழைகள் கொண்ட மற்றொரு சலிப்பான கட்டுரை, படிக்க எதுவும் இல்லை, நகைச்சுவை இல்லை, படங்கள் இல்லை.
கட்டுரையில் புதிதாக எதுவும் இல்லை, இதற்கு முன்பு எழுதப்பட்ட அனைத்தும் ஏற்கனவே ஹப்ரேயில் உள்ளன, எடுத்துக்காட்டாக கட்டுரைகளில் வழிமுறைகள்: டெலிகிராமில் போட்களை எவ்வாறு உருவாக்குவது и கணினி நிர்வாகிக்கான டெலிகிராம் போட்.
மேலும், ஒவ்வொரு முறையும் கல்வி இலக்கியங்களைக் குறிப்பிடாத வகையில் கட்டுரை வேண்டுமென்றே தேவையற்றது. கேங் 4, பவர்ஷெல் டீப் டைவ்ஸ் அல்லது, ஏடபிள்யூஎஸ் வெல்-ஆர்கிடெக்ட் ஃப்ரேம்வொர்க்கின் 5 தூண்கள் பற்றிய குறிப்புகள் எதுவும் உரையில் இல்லை.
முன்னுரைக்கு பதிலாக, நீங்கள் தவிர்க்கலாம்
தயங்காமல் தவிர்க்கவும்2006 இல், மைக்ரோசாப்ட் பவர்ஷெல் 1.0 ஐ அப்போதைய விண்டோஸ் எக்ஸ்பி, விஸ்டா மற்றும் சர்வர் 2003க்கு வெளியிட்டது. சில வழிகளில், இது cmdbat ஸ்கிரிப்டுகள், vb ஸ்கிரிப்டுகள், விண்டோஸ் ஸ்கிரிப்ட் ஹோஸ்ட் மற்றும் JScript போன்றவற்றை மாற்றியது.
லூப்கள், வகுப்புகள், செயல்பாடுகள், MS GUI அழைப்புகள் இருந்தபோதிலும், லோகோ விருப்பங்களுக்குப் பிறகு பவர்ஷெல் அடுத்த கட்டமாக மட்டுமே கருதப்பட முடியும். Git ஒருங்கிணைப்பு மற்றும் பல.
பவர்ஷெல் ஒப்பீட்டளவில் அரிதாகவே பயன்படுத்தப்படுகிறது; நீங்கள் அதை PowerShell Core, VMware vSphere PowerCLI, Azure PowerShell, MS Exchange, விரும்பிய நிலை கட்டமைப்பு, போன்ற வடிவங்களில் மட்டுமே சந்திக்க முடியும். பவர்ஷெல் இணைய அணுகல் மற்றும் ஒரு டஜன் அல்லது அதற்கு மேற்பட்ட அரிதாக பயன்படுத்தப்படும் திட்டங்கள் மற்றும் செயல்பாடுகள். ஒருவேளை அவர் விடுதலையுடன் இரண்டாவது காற்று கிடைக்கும் WSL2, ஆனால் அது சரியாக இல்லை.
பவர்ஷெல் மூன்று பெரிய நன்மைகளையும் கொண்டுள்ளது:
இது ஒப்பீட்டளவில் எளிமையானது, அதைப் பற்றி நிறைய இலக்கியங்கள் மற்றும் எடுத்துக்காட்டுகள் உள்ளன, மேலும் ரஷ்ய மொழியில் கூட, எடுத்துக்காட்டாக, Foreach பற்றிய ஒரு கட்டுரை - புத்தகத்திலிருந்து பவர்ஷெல் ஆழம் - வேறுபாடு பற்றி () மற்றும் {}
அவர் ஆசிரியருடன் செல்கிறார் நிறுவனம் ISE, விண்டோஸ் உடன் சேர்க்கப்பட்டுள்ளது. ஒருவித பிழைத்திருத்தி கூட உள்ளது.
குறைந்தபட்சம் சில வகையான இணைய அணுகல் (உதாரணமாக NAT வழியாக)
டெலிகிராமிற்கு வரையறுக்கப்பட்ட அணுகல் உள்ளவர்களுக்கு - உலாவியில் ஃப்ரீகேட் நிறுவப்பட்டு கட்டமைக்கப்பட்டது, சில கடினமான சந்தர்ப்பங்களில், சிம்பிள் டிஎன்எஸ் கிரிப்டுடன் சேர்ந்து
உங்கள் ஃபோனில் டெலிகிராம் கிளையண்ட் வேலை செய்யும்
அடிப்படைகளைப் புரிந்துகொள்வது - மாறி, வரிசை, வளையம் என்றால் என்ன.
அனைவருக்கும் இது ஏற்கனவே தெரியும் என்பதால், ஏற்கனவே நடந்துள்ளது, நீங்கள் அதை தவிர்க்கலாம்மேலே உள்ள கட்டுரையில் கூறியது போல் - முதலில், டெலிகிராமிற்கான ஒரு போட் - இது இன்னும் உங்கள் பக்கத்தில் இயங்கும் ஒரு பயன்பாடு மற்றும் Telegram Bot API க்கு கோரிக்கைகளை வைக்கிறது. மேலும், API தெளிவாக உள்ளது - பாட் ஒரு குறிப்பிட்ட URL ஐ அளவுருக்களுடன் அணுகுகிறது, மேலும் டெலிகிராம் JSON பொருளுடன் பதிலளிக்கிறது.
தொடர்புடைய சிக்கல்கள்: சில அறியப்படாத வழியில் நீங்கள் JSON பொருளிலிருந்து சில குறியீட்டை எடுத்து, அதை எப்படியாவது செயல்படுத்துவதற்கு அனுப்பினால் (நோக்கத்துடன் அல்ல), குறியீடு உங்களுக்காக செயல்படுத்தப்படும்.
உருவாக்கும் செயல்முறை மேலே உள்ள இரண்டு கட்டுரைகளில் விவரிக்கப்பட்டுள்ளது, ஆனால் நான் மீண்டும் சொல்கிறேன்: ஒரு தந்தியில் நாங்கள் தொடர்புகளைத் திறக்கிறோம், @botfather ஐத் தேடுகிறோம், அவரிடம் /newbot என்று சொல்லுங்கள், Botfortest12344321 ஒரு போட் ஒன்றை உருவாக்கவும், அதை Mynext1234bot என்று அழைக்கவும், மேலும் ஒரு செய்தியைப் பெறவும். படிவம் 1234544311:AbcDefNNNNNNNNNNNNNN
சாவியைக் கவனித்துக் கொள்ளுங்கள், அதைக் கொடுக்க வேண்டாம்!
நீங்கள் போட்டை உள்ளமைக்கலாம், எடுத்துக்காட்டாக, அதை குழுக்களில் சேர்ப்பதைத் தடைசெய்க, ஆனால் முதல் படிகளில் இது தேவையில்லை.
BotFather இடம் “/mybot” என்று கேட்டு, நமக்கு ஏதாவது பிடிக்கவில்லை என்றால் அமைப்புகளைச் சரிசெய்வோம்.
மீண்டும் தொடர்புகளைத் திறப்போம், அங்கே @Botfortest12344321 ஐக் கண்டறியவும் (@ உடன் தேடலைத் தொடங்குவது கட்டாயமாகும்), "தொடங்கு" என்பதைக் கிளிக் செய்து "/Glory to the robots" என்ற போட்க்கு எழுதவும். / அடையாளம் தேவை, மேற்கோள்கள் தேவையில்லை.
போட், நிச்சயமாக, எதற்கும் பதிலளிக்காது.
போட் உருவாக்கப்பட்டுள்ளதா என்பதைச் சரிபார்த்து அதைத் திறக்கவும்.
api.telegram.org/bot1234544311:AbcDefNNNNNNNNNNNNN/getMe
இங்கு 1234544311:AbcDefNNNNNNNNNNNNNN என்பது முன்னர் பெறப்பட்ட விசையாகும்,
மற்றும் போன்ற ஒரு வரி கிடைக்கும்
{"சரி":உண்மை,"முடிவு":{""}}
எங்களிடம் முதல் ரகசிய சொற்றொடர் (டோக்கன்) உள்ளது. இப்போது நாம் இரண்டாவது ரகசிய எண்ணைக் கண்டுபிடிக்க வேண்டும் - போட் உடனான அரட்டையின் ஐடி. ஒவ்வொரு அரட்டை, குழு, முதலியன தனிப்பட்ட மற்றும் அதன் சொந்த எண் (சில நேரங்களில் கழித்தல் - திறந்த குழுக்களுக்கு) உள்ளது. இந்த எண்ணைக் கண்டறிய, உலாவியில் (உண்மையில், இது உலாவியில் அவசியமில்லை, ஆனால் ஒரு சிறந்த புரிதலுக்காக நீங்கள் அதைத் தொடங்கலாம்) முகவரியைக் கோர வேண்டும் (இங்கு 1234544311:NNNNNNNNNஎன் உங்கள் டோக்கன்
அரட்டைக்கு கைமுறையாக எழுத முடியுமா என்பதைச் சரிபார்ப்போம்: உலாவியில் இருந்து முகவரியை அழைக்கவும்
https://api.telegram.org/botваштокен/sendMessage?chat_id=123456789&text="Life is directed motion"
உங்கள் அரட்டையில் உள்ள ஒரு போட்டிலிருந்து செய்தியைப் பெற்றால், சரி, அடுத்த கட்டத்திற்குச் செல்லுங்கள்.
இந்த வழியில் (உலாவி வழியாக) இணைப்பு உருவாக்கத்தில் சிக்கல்கள் உள்ளதா அல்லது எங்காவது ஏதாவது மறைக்கப்பட்டு வேலை செய்யவில்லையா என்பதை நீங்கள் எப்போதும் சரிபார்க்கலாம்.
தொடர்ந்து படிக்கும் முன் நீங்கள் தெரிந்து கொள்ள வேண்டியது
டெலிகிராம் பல வகையான குழு அரட்டைகளைக் கொண்டுள்ளது (திறந்த, மூடிய). இந்த அரட்டைகளுக்கு, சில செயல்பாடுகள் (உதாரணமாக, ஐடி) வேறுபட்டவை, இது சில நேரங்களில் சில சிக்கல்களை ஏற்படுத்துகிறது.
இது 2019 ஆம் ஆண்டின் இறுதி என்று வைத்துக்கொள்வோம், மேலும் நம் காலத்தின் ஹீரோ, நன்கு அறியப்பட்ட மேன்-ஆர்கெஸ்ட்ரா (நிர்வாகி, வழக்கறிஞர், தகவல் பாதுகாப்பு நிபுணர், புரோகிராமர் மற்றும் நடைமுறையில் MVP) Evgeniy V. $i மாறியை ஒரு வரிசையில் இருந்து வேறுபடுத்துகிறார், மாஸ்டர் சுழல்கள், பாருங்கள் அடுத்த இரண்டு ஆண்டுகளில் சாக்லேட் மாஸ்டர், பின்னர் PowerShell உடன் இணையான செயலாக்கம் и ஒவ்வொரு பொருளுக்கும் இணை அது வரும்.
1. எங்கள் போட் என்ன செய்யும் என்பதைப் பற்றி நாங்கள் சிந்திக்கிறோம்
எனக்கு எந்த யோசனையும் இல்லை, நான் சிந்திக்க வேண்டியிருந்தது. நான் ஏற்கனவே ஒரு போட்-நோட்புக் எழுதியுள்ளேன். "எங்காவது எதையாவது அனுப்பும்" போட்டை உருவாக்க நான் விரும்பவில்லை. Azure உடன் இணைக்க உங்களுக்கு கிரெடிட் கார்டு தேவை, ஆனால் மாணவர் அதை எங்கிருந்து பெறுகிறார்? எல்லாம் அவ்வளவு மோசமாக இல்லை என்பதை கவனத்தில் கொள்ள வேண்டும்: பிரதான மேகங்கள் ஒருவித சோதனைக் காலத்தை இலவசமாகக் கொடுக்கின்றன (ஆனால் உங்களுக்கு இன்னும் கிரெடிட் கார்டு எண் தேவை - மேலும் அதிலிருந்து ஒரு டாலர் டெபிட் செய்யப்படும் என்று எனக்குத் தெரியவில்லை. அது பின்னர் திருப்பி அனுப்பப்பட்டது.)
AI ML இல்லாமல் ஒரு போட்-ஏழை-கவி-நெசவாளர் உருவாக்குவது அவ்வளவு சுவாரஸ்யமாக இல்லை.
அகராதியிலிருந்து ஆங்கில வார்த்தைகளை எனக்கு நினைவூட்டும் (அல்லது எனக்கு அல்ல) ஒரு போட் ஒன்றை உருவாக்க முடிவு செய்தேன்.
தரவுத்தளத்தில் சிக்கலைத் தவிர்க்க, அகராதி ஒரு உரை கோப்பில் சேமிக்கப்பட்டு கைமுறையாக புதுப்பிக்கப்படும்.
இந்த விஷயத்தில், பணியின் அடிப்படைகளைக் காண்பிப்பதே பணியாகும், மேலும் குறைந்தபட்சம் ஒரு பகுதி முடிக்கப்பட்ட தயாரிப்பை உருவாக்கக்கூடாது.
2. முதன்முறையாக என்ன, எப்படி முயற்சி செய்தல்
C:poshtranslate என்ற கோப்புறையை உருவாக்குவோம்
முதலில், நம்மிடம் என்ன வகையான பவர்ஷெல் உள்ளது என்பதைப் பார்ப்போம், ஸ்டார்ட்-ரன் வழியாக ISE ஐ தொடங்குவோம்
பவர்ஷெல்
அல்லது நிறுவப்பட்ட நிரல்களில் Powershell ISEஐக் கண்டறியவும்.
தொடங்கப்பட்ட பிறகு, வழக்கமான "ஒருவித எடிட்டர்" திறக்கும்; உரை புலம் இல்லை என்றால், நீங்கள் எப்போதும் "கோப்பு - புதியதை உருவாக்கு" என்பதைக் கிளிக் செய்யலாம்.
பவர்ஷெல் பதிப்பைப் பார்ப்போம் - உரை புலத்தில் எழுதவும்:
get-host
மற்றும் F5 ஐ அழுத்தவும்.
பவர்ஷெல் சேமிக்க முன்வருகிறது - "நீங்கள் இயக்கவிருக்கும் ஸ்கிரிப்ட் சேமிக்கப்படும்.", நாங்கள் ஒப்புக்கொள்கிறோம், மேலும் C: poshtranslate என்ற பெயரில் கோப்பை பவர்ஷெல்லிலிருந்து சேமிக்கவும். myfirstbotBT100.
துவக்கிய பிறகு, கீழ் உரை சாளரத்தில் தரவு அட்டவணையைப் பெறுகிறோம்:
Name : Windows PowerShell ISE Host
Version : 5.1.(и так далее)
என்னிடம் 5.1 உள்ளது, அது போதும். உங்களிடம் பழைய விண்டோஸ் 7/8 இருந்தால் பெரிய விஷயமில்லை - இருப்பினும் பவர்ஷெல் பதிப்பு 5 க்கு புதுப்பிக்கப்பட வேண்டும் - எ.கா. அறிவுறுத்தல்கள்.
கீழே உள்ள கட்டளை வரியில் Get-Date என தட்டச்சு செய்து, Enter ஐ அழுத்தி, நேரத்தைப் பார்த்து, கட்டளையுடன் ரூட் கோப்புறைக்குச் செல்லவும்
cd
cls கட்டளையுடன் திரையை அழிக்கவும் (இல்லை, நீங்கள் rm ஐப் பயன்படுத்தத் தேவையில்லை)
இப்போது என்ன வேலை செய்கிறது, எப்படி என்பதைச் சரிபார்ப்போம் - குறியீட்டைக் கூட எழுதாமல், இரண்டு வரிகளை எழுதுவோம், மேலும் அவர்கள் என்ன செய்கிறார்கள் என்பதைப் புரிந்துகொள்ள முயற்சிக்கவும். # குறியீட்டைக் கொண்டு கெட்-ஹோஸ்ட் மூலம் வரியைக் கமெண்ட் செய்து சிறிது சேர்க்கவும்.
# Пример шаблона бота
# get-host
<# это пример многострочного комментария #>
$TimeNow = Get-Date
$TimeNow
(சுவாரஸ்யமான விஷயம் என்னவென்றால், Habré இல் குறியீடு வடிவமைப்பு கீழ்தோன்றும் பட்டியலில் இரண்டு டஜன் விருப்பங்கள் உள்ளன - ஆனால் Powershell இல்லை. Dos உள்ளது. Perl உள்ளது.)
GUI இலிருந்து F5 அல்லது ">" ஐ அழுத்தி குறியீட்டை இயக்கலாம்.
பின்வரும் வெளியீட்டைப் பெறுகிறோம்:
Saturday, December 8, 2019 21:00:50 PM (или что-то типа)
இப்போது இந்த இரண்டு வரிகளையும் சில சுவாரஸ்யமான புள்ளிகளையும் பார்ப்போம், இதனால் எதிர்காலத்தில் நாம் இதற்குத் திரும்பக்கூடாது.
பாஸ்கலைப் போலல்லாமல் (மற்றும் மட்டுமல்ல), பவர்ஷெல் ஒரு மாறிக்கு எந்த வகையை ஒதுக்க வேண்டும் என்பதை தீர்மானிக்க முயற்சிக்கிறது; இது பற்றிய கூடுதல் விவரங்கள் கட்டுரையில் எழுதப்பட்டுள்ளன. நிரலாக்க மொழிகளில் தட்டச்சு செய்வதற்கான கல்வித் திட்டம்
எனவே, $TimeNow மாறியை உருவாக்கி அதற்கு தற்போதைய தேதி மற்றும் நேரத்தின் மதிப்பை (Get-Date) ஒதுக்குவதன் மூலம், எந்த வகையான தரவு இருக்கும் என்பதைப் பற்றி நாம் அதிகம் கவலைப்பட வேண்டியதில்லை.
உண்மை, இந்த அறியாமை பின்னர் காயப்படுத்தலாம், ஆனால் அது பின்னர். உரையில் கீழே ஒரு உதாரணம் இருக்கும்.
என்ன கிடைத்தது என்று பார்ப்போம். இயக்குவோம் (கட்டளை வரியில்)
$TimeNow | Get-member
மற்றும் புரிந்துகொள்ள முடியாத உரையின் பக்கத்தைப் பெறுங்கள்
புரிந்துகொள்ள முடியாத உரை எண் 1 இன் எடுத்துக்காட்டு
PS C:> $TimeNow | Get-member
TypeName: System.DateTime
Name MemberType Definition
---- ---------- ----------
Add <b>Method </b>datetime Add(timespan value)
..
DisplayHint NoteProperty DisplayHintType DisplayHint=DateTime
Date <b>Property </b>datetime Date {get;}
Year Property int Year {get;}
..
DateTime ScriptProperty System.Object DateTime {get=if ((& { Set-StrictMode -Version 1; $this.DisplayHint }) -ieq "Date")...
நீங்கள் பார்க்க முடியும் என, வகை பெயர் வகையின் ஒரு மாறி: System.DateTime பல முறைகள் (இந்த மாறி பொருளைக் கொண்டு நாம் என்ன செய்ய முடியும் என்ற பொருளில்) மற்றும் பண்புகளுடன் உருவாக்கப்பட்டது.
கூப்பிடலாம் $TimeNow.DayOfYear - ஆண்டின் நாளின் எண்ணிக்கையைப் பெறுகிறோம்.
கூப்பிடலாம் $TimeNow.DayOfYear | Get-Member - நாங்கள் பெறுகிறோம் TypeName: System.Int32 மற்றும் ஒரு குழு முறைகள்.
கூப்பிடலாம் $TimeNow.ToUniversalTime() - மற்றும் UTC இல் நேரத்தைப் பெறுங்கள்
பிழைத்திருத்தி
சில நேரங்களில் அது ஒரு குறிப்பிட்ட வரி வரை ஒரு நிரலை இயக்க வேண்டும் மற்றும் அந்த நேரத்தில் நிரலின் நிலையை பார்க்க வேண்டும். இந்த நோக்கத்திற்காக, ISE ஒரு பிழைத்திருத்த செயல்பாடு உள்ளது - மாற்று முறிவு புள்ளி
நடுவில் எங்காவது பிரேக் பாயிண்ட் போட்டு, இந்த இரண்டு வரிகளையும் இயக்கி, இடைவெளி எப்படி இருக்கும் என்று பாருங்கள்.
3. டெலிகிராம் போட் உடனான தொடர்பைப் புரிந்துகொள்வது
நிச்சயமாக, போட் உடனான தொடர்பு, அனைத்து கெட்புஷ் மற்றும் பலவற்றில் இன்னும் அதிகமான இலக்கியங்கள் எழுதப்பட்டுள்ளன, ஆனால் கோட்பாட்டின் சிக்கலை விருப்பமாக கருதலாம்.
எங்கள் விஷயத்தில் இது அவசியம்:
கடிதத்தில் ஏதாவது அனுப்ப கற்றுக்கொள்ளுங்கள்
கடிதப் பரிமாற்றத்திலிருந்து எதையாவது பெற கற்றுக்கொள்ளுங்கள்
3.1 கடிதத்தில் எதையாவது அனுப்பவும் அதிலிருந்து பெறவும் கற்றுக்கொள்வது
மற்றும் ரஷ்ய கூட்டமைப்பில் இந்த கட்டத்தில் பிழையைப் பெறுகிறோம் தொலை சேவையகத்துடன் இணைக்க முடியவில்லை.
அல்லது நாங்கள் அதைப் பெறவில்லை - டெலிகாம் ஆபரேட்டர் மற்றும் ப்ராக்ஸி கட்டமைக்கப்பட்டு செயல்படுகிறதா என்பதைப் பொறுத்தது
சரி, ப்ராக்ஸியைச் சேர்ப்பது மட்டுமே எஞ்சியுள்ளது. மறைகுறியாக்கப்படாத மற்றும் பொதுவாக மோசடியான ப்ராக்ஸியைப் பயன்படுத்துவது உங்கள் ஆரோக்கியத்திற்கு மிகவும் ஆபத்தானது என்பதை நினைவில் கொள்ளவும்.
வேலை செய்யும் ப்ராக்ஸியைக் கண்டுபிடிக்கும் பணி மிகவும் கடினம் அல்ல - வெளியிடப்பட்ட பெரும்பாலான http ப்ராக்ஸிகள் வேலை செய்கின்றன. ஐந்தாவது எனக்கு வேலை செய்தது என்று நினைக்கிறேன்.
ப்ராக்ஸியைப் பயன்படுத்தும் தொடரியல்:
Invoke-WebRequest -Uri $URL4SEND -Proxy $MyProxy
போட் உடனான உங்கள் அரட்டையில் ஒரு செய்தியைப் பெற்றால், எல்லாம் நன்றாக இருக்கிறது, நீங்கள் தொடரலாம். இல்லையெனில், பிழைத்திருத்தத்தைத் தொடரவும்.
உங்கள் $URL4SEND சரம் என்னவாக மாறும் என்பதை நீங்கள் பார்க்கலாம் மற்றும் உலாவியில் அதைக் கோர முயற்சிக்கவும்:
Write-Host "ParsedHtml"
$MyMessageGet.ParsedHtml # тут интересное
Write-Host "RawContent"
$MyMessageGet.RawContent # и тут интересное, но еще к тому же и читаемое.
Write-Host "Content"
$MyMessageGet.Content
எல்லாம் உங்களுக்காக வேலை செய்தால், நீங்கள் ஒரு நீண்ட வரியைப் பெறுவீர்கள்:
அதிர்ஷ்டவசமாக, கணினி நிர்வாகிக்கான டெலிகிராம் போட் கட்டுரையில் இந்த வரி (ஆம், $MyMessageGet.RawContent | படி பெற-உறுப்பினர் என்பது System.String), ஏற்கனவே பிரிக்கப்பட்டது.
4. நீங்கள் பெறுவதைச் செயல்படுத்தவும் (எங்களுக்கு ஏற்கனவே எதையாவது அனுப்புவது எப்படி என்று தெரியும்)
ஏற்கனவே எழுதியது போல் இங்கே, மிகவும் தேவையான விஷயங்கள் உள்ளடக்கத்தில் உள்ளன. அதைக் கூர்ந்து கவனிப்போம்.
முதலில், வலை இடைமுகத்திலிருந்து அல்லது தொலைபேசியிலிருந்து இன்னும் இரண்டு சொற்றொடர்களை போட்டிற்கு எழுதுவோம்
/message1
/message2
/message3
$URLGET மாறியில் உருவாக்கப்பட்ட முகவரியை உலாவியில் பார்க்கவும்.
அது என்ன? எண்ட்-டு-எண்ட் செய்தி அடையாளங்காட்டி, அரட்டை அடையாளங்காட்டி, அனுப்பும் அடையாளங்காட்டி மற்றும் பல தகவல்களைக் கொண்ட பொருள்களின் வரிசைகளிலிருந்து சில சிக்கலான பொருள்.
இருப்பினும், "இது என்ன வகையான பொருள்" என்பதை நாம் கண்டுபிடிக்க தேவையில்லை - வேலையின் ஒரு பகுதி ஏற்கனவே எங்களுக்காக செய்யப்பட்டுள்ளது. உள்ளே என்ன இருக்கிறது என்று பார்ப்போம்:
பெறப்பட்ட செய்திகள் அல்லது பகுதி 4 படித்தல்
Write-Host "This is part 4" <# конечно эта строка нам не нужна в итоговом тексте, но по ней удобно искать. #>
$Content4Pars01 = ConvertFrom-Json $MyMessageGet.Content
$Content4Pars01 | Get-Member
$Content4Pars01.result
$Content4Pars01.result[0]
$Content4Pars01.result[0] | Get-Member
$Content4Pars01.result[0].update_id
$Content4Pars01.result[0].message
$Content4Pars01.result[0].message.text
$Content4Pars01.result[1].message.text
$Content4Pars01.result[2].message.text
5. அதற்கு நாம் இப்போது என்ன செய்ய வேண்டும்?
இதன் விளைவாக வரும் கோப்பை myfirstbotBT105 என்ற பெயரில் சேமித்து கொள்வோம் அல்லது நீங்கள் விரும்பியதைச் சேமித்து, தலைப்பை மாற்றி, ஏற்கனவே எழுதப்பட்ட அனைத்து குறியீட்டையும் கருத்துத் தெரிவிக்கவும்.
<#start comment 105 end comment 105#>
அகராதியை எங்கு பெறுவது (நன்றாக, எங்கே - ஒரு கோப்பில் வட்டில்) மற்றும் அது எப்படி இருக்கும் என்பதை இப்போது நாம் தீர்மானிக்க வேண்டும்.
நிச்சயமாக, ஸ்கிரிப்ட்டின் உரையில் நீங்கள் ஒரு பெரிய அகராதியை எழுதலாம், ஆனால் இது முற்றிலும் புள்ளிக்கு அப்பாற்பட்டது.
எனவே பவர்ஷெல் பொதுவாக என்ன வேலை செய்ய முடியும் என்பதைப் பார்ப்போம்.
பொதுவாக, எந்தக் கோப்புடன் பணிபுரிய வேண்டும் என்று அவர் கவலைப்படுவதில்லை, அது எங்களுக்கு முக்கியமில்லை.
எங்களுக்கு ஒரு தேர்வு உள்ளது: txt (உங்களால் முடியும், ஆனால் ஏன்), csv, xml.
எல்லோரையும் பார்க்கலாமா?எல்லோரையும் பார்க்கலாம்.
MyVocabClassExample1 வகுப்பையும் $MyVocabExample1 என்ற மாறியையும் உருவாக்குவோம்
வகுப்பில் $ இல்லாமல் எழுதப்பட்டிருப்பதை நான் கவனிக்கிறேன்
சில குறியீடு #5
write-host "This is part 5"
class MyVocabClassExample1 {
[string]$Original # слово
[string]$Transcript
[string]$Translate
[string]$Example
[int]$VocWordID # очень интересный момент. Использование int с его ограничениями может порой приводить к диким последствиям, для примера - недавний случай с SSD HPE. Изначально я не стал добавлять этот элемент, потом все же дописал и закомментировал.
}
$MyVocabExample1 = [MyVocabClassExample1]::new()
$MyVocabExample1.Original = "Apple"
$MyVocabExample1.Transcript = "[ ˈapəl ]"
$MyVocabExample1.Translate = "Яблоко"
$MyVocabExample1.Example = "An apple is a sweet, edible fruit produced by an apple tree (Malus domestica)"
# $MyVocabExample1.$VocWordID = 1
$MyVocabExample2 = [MyVocabClassExample1]::new()
$MyVocabExample2.Original = "Pear"
$MyVocabExample2.Transcript = "[ pe(ə)r ]"
$MyVocabExample2.Translate = "Груша"
$MyVocabExample2.Example = "The pear (/ˈpɛər/) tree and shrub are a species of genus Pyrus"
# $MyVocabExample1.$VocWordID = 2
இதைப் பயன்படுத்தி கோப்புகளில் எழுத முயற்சிப்போம் மாதிரி.
என்ன நடக்கிறது என்று பார்ப்போம். சிறந்த உரை காட்சி - ஆனால் அதை மீண்டும் ஏற்றுமதி செய்வது எப்படி? காற்புள்ளிகள் போன்ற சில வகையான உரை பிரிப்பான்களை நான் அறிமுகப்படுத்த வேண்டுமா?
இறுதியில் நீங்கள் "காற்புள்ளியால் பிரிக்கப்பட்ட மதிப்புகள் (CSV) கோப்பு A ஐப் பெறுவீர்கள் ஸ்டாப் வெயிட்.
#
பார்க்க எளிதானது, MS அதன் தர்க்கத்தால் குறிப்பாக வேறுபடுத்தப்படவில்லை; இதேபோன்ற செயல்முறைக்கு, ஒரு வழக்கில் -FilePath பயன்படுத்தப்படுகிறது, மற்றொரு -பாதை.
கூடுதலாக, மூன்றாவது கோப்பில் ரஷ்ய மொழி மறைந்து விட்டது, நான்காவது கோப்பில் அது மாறியது ... சரி, ஏதோ நடந்தது. #TYPE System.Object[] 00
# “கவுண்ட்”,”நீளம்”,”நீண்ட நீளம்”,”ரேங்க்”,”SyncRoot”,”Readonly”,”IsFixedSize”,”isSynchronized” #
கொஞ்சம் மாற்றி எழுதுவோம்:
இது உதவியது போல் தெரிகிறது, ஆனால் எனக்கு இன்னும் வடிவம் பிடிக்கவில்லை.
ஒரு பொருளின் வரிகளை நேரடியாக கோப்பில் போட முடியாது என்பது எனக்கு குறிப்பாக பிடிக்கவில்லை.
பைல்களுக்கு எழுத ஆரம்பித்ததிலிருந்து, ஸ்டார்ட்அப் பதிவை வைத்திருக்கலாமா? எங்களுக்கு ஒரு மாறியாக நேரம் உள்ளது, கோப்பு பெயரை அமைக்கலாம்.
உண்மை, இன்னும் எழுத எதுவும் இல்லை, ஆனால் பதிவுகளை எவ்வாறு சுழற்றுவது என்பது பற்றி நீங்கள் சிந்திக்கலாம்.
இப்போதைக்கு xml ஐ முயற்சிப்போம்.
$MyFilenameExample06 = $ScriptDir + "Example06.xml"
$MyVocabExample4AsArray = Import-Clixml -Path $MyFilenameExample06
# $MyVocabExample4AsArray
# $MyVocabExample4AsArray[0]
# и немного о совершенно неочевидных нюансах. Powershell время от времени ведет себя не так, как вроде бы как бы стоило бы ожидать бы.
# например у меня эти два вывода отличаются
# Write-Output $MyVocabExample4AsArray
# write-host $MyVocabExample4AsArray
பணிக்குத் திரும்புவோம். நாங்கள் ஒரு சோதனைக் கோப்பை எழுதினோம், அதைப் படிக்கவும், சேமிப்பக வடிவம் தெளிவாக உள்ளது, தேவைப்பட்டால், வரிகளைச் சேர்க்க மற்றும் நீக்க தனி சிறிய கோப்பு எடிட்டரை எழுதலாம்.
ஒரு சிறிய பயிற்சி போட்டை உருவாக்குவதே பணி என்பதை உங்களுக்கு நினைவூட்டுகிறேன்.
பணி வடிவம்: நான் போட்க்கு "எடுத்துக்காட்டு" கட்டளையை அனுப்புகிறேன், போட் எனக்கு தோராயமாக தேர்ந்தெடுக்கப்பட்ட சொல் மற்றும் டிரான்ஸ்கிரிப்ஷனை அனுப்புகிறது, மேலும் 10 வினாடிகளுக்குப் பிறகு எனக்கு ஒரு மொழிபெயர்ப்பு மற்றும் கருத்தை அனுப்புகிறது. கட்டளைகளை எவ்வாறு படிப்பது என்பது எங்களுக்குத் தெரியும், ப்ராக்ஸிகளைத் தானாகத் தேர்ந்தெடுப்பது மற்றும் சரிபார்ப்பது மற்றும் செய்தி கவுண்டர்களை மறதிக்கு மீட்டமைப்பது எப்படி என்பதை அறிய விரும்புகிறோம்.
தேவையற்றது என முன்னர் கருத்துரைத்த அனைத்தையும் நீக்குவோம், இப்போது தேவையற்ற எடுத்துக்காட்டுகளை txt மற்றும் csv உடன் கருத்துரைப்போம், மேலும் கோப்பை பதிப்பு B106 ஆக சேமிக்கவும்.
ஓ, ஆமாம். மீண்டும் போட்க்கு ஏதாவது அனுப்புவோம்.
6. செயல்பாடுகள் மற்றும் பலவற்றிலிருந்து அனுப்பவும்
வரவேற்பைச் செயலாக்குவதற்கு முன், சோதனைச் செய்தியைத் தவிர "குறைந்தது ஏதாவது" அனுப்புவதற்கான செயல்பாட்டை நீங்கள் உருவாக்க வேண்டும்.
நிச்சயமாக, எடுத்துக்காட்டில் ஒரே ஒரு அனுப்புதல் மற்றும் ஒரே ஒரு செயலாக்கம் மட்டுமே இருக்கும், ஆனால் அதையே பல முறை செய்ய வேண்டியிருந்தால் என்ன செய்வது?
ஒரு செயல்பாட்டை எழுதுவது எளிது. எனவே, எங்களிடம் $MyVocabExample4AsArray என்ற வகைப் பொருளின் மாறி உள்ளது, கோப்பிலிருந்து படிக்கப்பட்டது, இரண்டு உறுப்புகளின் வரிசையின் வடிவத்தில் உள்ளது. படிக்கப் போவோம்.
அதே நேரத்தில், நாங்கள் கடிகாரத்தை கையாள்வோம்; எங்களுக்கு இது பின்னர் தேவைப்படும் (உண்மையில், இந்த எடுத்துக்காட்டில் எங்களுக்கு இது தேவையில்லை :)
சில குறியீடு #6.1
Write-Output "This is Part 6"
$Timezone = (Get-TimeZone)
IF($Timezone.SupportsDaylightSavingTime -eq $True){
$TimeAdjust = ($Timezone.BaseUtcOffset.TotalSeconds + 3600) } # приведенное время
ELSE{$TimeAdjust = ($Timezone.BaseUtcOffset.TotalSeconds)
}
function MyFirstFunction($SomeExampleForFunction1){
$TimeNow = Get-Date
$TimeNow.ToUniversalTime()
# $MyText02 = $TimeNow + " " + $SomeExampleForFunction1 # и вот тут мы получим ошибку
$MyText02 = $SomeExampleForFunction1 + " " + $TimeNow # а тут не получим, кто догадается почему - тот молодец.
$URL4SendFromFunction = "https://api.telegram.org/bot$MyToken/sendMessage?chat_id=$MyChatID&text=$MyText02"
Invoke-WebRequest -Uri $URL4SendFromFunction -Proxy $MyProxy
}
நீங்கள் எளிதாக பார்க்க முடியும் என, செயல்பாடு முன்பு கடின குறியிடப்பட்ட $MyToken மற்றும் $MyChatID அழைக்கிறது.
இதைச் செய்ய வேண்டிய அவசியமில்லை, மேலும் ஒவ்வொரு போட்க்கும் $MyToken ஒன்று இருந்தால், அரட்டையைப் பொறுத்து $MyChatID மாறும்.
இருப்பினும், இது ஒரு உதாரணம் என்பதால், இப்போதைக்கு இதைப் புறக்கணிப்போம்.
$MyVocabExample4AsArray ஒரு வரிசை அல்ல என்பதால், இது ஒன்றுக்கு மிகவும் ஒத்ததாக இருந்தாலும், பிறகு நீங்கள் அதை எடுக்க முடியாது அதன் நீளத்தைக் கோருங்கள்.
மீண்டும் ஒருமுறை நாம் செய்ய முடியாத ஒன்றைச் செய்ய வேண்டியிருக்கும் - பாராசூட் குறியீட்டின் படி அல்ல - அதை எடுத்து எண்ணுங்கள்
சில குறியீடு #6.2
$MaxRandomExample = 0
foreach ($Obj in $MyVocabExample4AsArray) {
$MaxRandomExample ++
}
Write-Output $MaxRandomExample
$RandomExample = Get-Random -Minimum 0 -Maximum ($MaxRandomExample)
$TextForExample1 = $MyVocabExample4AsArray[$RandomExample].Original
# MyFirstFunction($TextForExample1)
# или в одну строку
# MyFirstFunction($MyVocabExample4AsArray[Get-Random -Minimum 0 -Maximum ($MaxRandomExample -1)].Example)
# Угадайте сами, какой пример легче читается посторонними людьми.
சீரற்ற சுவாரஸ்யமான அம்சம். நாம் 0 அல்லது 1 ஐப் பெற விரும்புகிறோம் என்று வைத்துக்கொள்வோம் (வரிசையில் இரண்டு கூறுகள் மட்டுமே உள்ளன). எல்லைகளை 0..1 அமைக்கும் போது, "1" கிடைக்குமா?
இல்லை - நாங்கள் அதைப் பெற மாட்டோம், எங்களிடம் ஒரு சிறப்பு உதாரணம் உள்ளது எடுத்துக்காட்டு 2: 0 மற்றும் 99 க்கு இடையில் ஒரு சீரற்ற முழு எண்ணைப் பெறவும் - ரேண்டம் - அதிகபட்சம் 100
எனவே, 0..1க்கு அதிகபட்ச உறுப்பு எண் = 0 உடன் 2..1 அளவை அமைக்க வேண்டும்.
7. உள்வரும் செய்திகளின் செயலாக்கம் மற்றும் அதிகபட்ச வரிசை நீளம்
முன்பு எங்கே நிறுத்தினோம்? எங்களிடம் $MyMessageGet மாறி உள்ளது
மற்றும் $Content4Pars01 அதிலிருந்து பெறப்பட்டது, இதில் Content4Pars01.result வரிசையின் கூறுகளில் நாங்கள் ஆர்வமாக உள்ளோம்.
பெறப்பட்ட அனைத்தையும் சென்று செய்தி /வார்த்தை என்றால் பதில் அனுப்புவோம்
கட்டமைப்பின் வழக்கு, if-elseif என்று சிலர் விவரிப்பது, பவர்ஷெல்லில் அழைக்கப்படுகிறது சுவிட்ச் வழியாக. அதே நேரத்தில், கீழே உள்ள குறியீடு -wildcard விசையைப் பயன்படுத்துகிறது, இது முற்றிலும் தேவையற்றது மற்றும் தீங்கு விளைவிக்கும்.
சில குறியீடு #7.1
Write-Output "This is part 7"
Foreach ($Result in $Content4Pars01.result) # Да, можно сделать быстрее
{
switch -wildcard ($Result.message.text)
{
"/word" {MyFirstFunction($TextForExample1)}
}
}
ஓரிரு முறை ஸ்கிரிப்டை இயக்குவோம். ஒவ்வொரு மரணதண்டனை முயற்சிக்கும் ஒரே வார்த்தையை இரண்டு முறை பெறுவோம், குறிப்பாக சீரற்ற முறையில் செயல்படுத்துவதில் தவறு செய்தால்.
ஆனால் நிறுத்து. நாங்கள் மீண்டும்/வார்த்தையை அனுப்பவில்லை, எனவே செய்தி ஏன் மீண்டும் செயலாக்கப்படுகிறது?
போட்டிற்கு செய்திகளை அனுப்புவதற்கான வரிசையானது வரையறுக்கப்பட்ட நீளம் கொண்டது (100 அல்லது 200 செய்திகள், நான் நினைக்கிறேன்) மற்றும் கைமுறையாக அழிக்கப்பட வேண்டும்.
இது நிச்சயமாக ஆவணத்தில் விவரிக்கப்பட்டுள்ளது, ஆனால் நீங்கள் அதைப் படிக்க வேண்டும்!
இந்த வழக்கில், எங்களுக்கு ?chat_id அளவுரு தேவை, மேலும் &நேரம், &வரம்பு, &parse_mode=HTML மற்றும் &disable_web_page_preview=true ஆகியவை இன்னும் தேவையில்லை.
அதற்கான ஆவணம் டெலிகிராம் ஏபிஐ இங்கே உள்ளது இது வெள்ளை மற்றும் ஆங்கிலத்தில் கூறுகிறது: திரும்பப் பெறப்படும் முதல் புதுப்பித்தலின் அடையாளங்காட்டி. முன்பு பெற்ற புதுப்பிப்புகளின் அடையாளங்காட்டிகளில் மிக உயர்ந்ததை விட ஒன்று அதிகமாக இருக்க வேண்டும். முன்னிருப்பாக, புதுப்பிப்புகள் ஆரம்பத்திலேயே தொடங்கும் உறுதிப்படுத்தப்படவில்லை புதுப்பிப்பு திரும்பும். getUpdates உடன் அழைக்கப்பட்டவுடன் புதுப்பிப்பு உறுதிப்படுத்தப்பட்டதாகக் கருதப்படுகிறது ஆப்செட் அதிக அதன் update_id ஐ விட. புதுப்பிப்புகள் வரிசையின் முடிவில் இருந்து -offset புதுப்பிப்பில் இருந்து தொடங்கும் புதுப்பிப்புகளை மீட்டெடுக்க எதிர்மறை ஆஃப்செட்டைக் குறிப்பிடலாம். முந்தைய புதுப்பிப்புகள் அனைத்தும் மறக்கப்படும்.
ஆம், நாங்கள் அதை மீட்டமைத்து, செயல்பாட்டை சிறிது மீண்டும் எழுதுவோம். எங்களிடம் இரண்டு விருப்பங்கள் உள்ளன - முழு செய்தியையும் செயல்பாட்டிற்கு அனுப்பவும், அதை முழுவதுமாக செயல்பாட்டில் செயலாக்கவும் அல்லது செய்தி ஐடியை மட்டும் கொடுத்து மீட்டமைக்கவும். உதாரணமாக, இரண்டாவது எளிமையானது.
முன்பு, எங்கள் “அனைத்து செய்திகளும்” வினவல் சரம் இப்படி இருந்தது
முதலில் எல்லாச் செய்திகளையும் பெறவும், அவற்றைச் செயல்படுத்தவும், மற்றும் வெற்றிகரமான செயலாக்கத்திற்குப் பிறகு மட்டுமே கோரிக்கை உறுதிப்படுத்தப்படாமல் -> உறுதிப்படுத்தப்படுவதை யாரும் தடைசெய்யவில்லை.
அனைத்து செயலாக்கமும் முடிந்த பிறகு, உறுதிப்படுத்தலை அழைப்பது ஏன்? செயல்பாட்டின் நடுவில் ஒரு தோல்வி சாத்தியமாகும், மேலும் இலவச சாட்போட்டின் உதாரணத்திற்கு, ஒரு செய்தியைக் காணவில்லை என்றால், நீங்கள் ஒருவரின் சம்பளம் அல்லது அட்டை பரிவர்த்தனையைச் செயலாக்குகிறீர்கள் என்றால், விளைவு மோசமாக இருக்கலாம்.
இன்னும் ஒரு ஜோடி குறியீடு வரிகள்
$LastMessageId = ($Content4Pars01.result | select -last 1).update_id #ошибку в этом месте предполагается исправить самостоятельно.
$URLGET1 = "https://api.telegram.org/bot$mytoken/getUpdates?offset=$LastMessageId&limit=100"
Invoke-WebRequest -Uri $URLGET1 -Method Get -Proxy $MyProxy
8. ஒரு முடிவுக்கு பதிலாக
அடிப்படை செயல்பாடுகள் - செய்திகளைப் படித்தல், வரிசையை மீட்டமைத்தல், கோப்பிலிருந்து கோப்பிற்குப் படித்தல் மற்றும் கோப்புக்கு எழுதுதல் ஆகியவை செய்து காட்டப்படுகின்றன.
செய்ய நான்கு விஷயங்கள் மட்டுமே உள்ளன:
அரட்டையில் ஒரு கோரிக்கைக்கு சரியான பதிலை அனுப்புகிறது
போட் சேர்க்கப்பட்ட எந்த அரட்டைக்கும் பதில் அனுப்புகிறது
ஒரு வளையத்தில் குறியீட்டை இயக்குகிறது
விண்டோஸ் ஷெட்யூலரில் இருந்து ஒரு போட்டை துவக்குகிறது.
இந்த பணிகள் அனைத்தும் எளிமையானவை மற்றும் போன்ற அளவுருக்கள் பற்றிய ஆவணங்களைப் படிப்பதன் மூலம் எளிதாக நிறைவேற்ற முடியும்
செட்-எக்ஸிகியூஷன் பாலிசி கட்டுப்பாடற்ற மற்றும் -எக்ஸிகியூஷன் பாலிசி பைபாஸ்
படிவத்தின் சுழற்சி
$TimeToSleep = 3 # опрос каждые 3 секунды
$TimeToWork = 10 # минут
$HowManyTimes = $TimeToWork*60/$TimeToSleep # счетчик для цикла
$MainCounter = 0
for ($MainCounter=0; $MainCounter -le $HowManyTimes) {
sleep $TimeToSleep
$MainCounter ++