Bot για τη σύνταξη άρθρων. Υπάρχουν τέσσερις τύποι chatbots. Πού μπορείτε να τους μιλήσετε;

Έτσι, σε αυτό το άρθρο θα δείξω πώς να δημιουργήσετε ένα απλό bot με βάση την οπτική αναζήτηση για αντικείμενα στην οθόνη. Το πλεονέκτημα αυτής της μεθόδου είναι η «αόρατη» της για διάφορα συστήματα προστασίας anti-bot. Για να γράψουμε ένα bot, θα χρησιμοποιήσουμε φυσικά ένα εξειδικευμένο περιβάλλον για την ανάπτυξη bots. Εάν τα bots δημιουργούνται για να εξοικονομήσετε χρόνο για την εκτέλεση μονότονων ενεργειών ρουτίνας, τότε το NOMAD δημιουργείται για να εξοικονομήσει χρόνο όταν γράφετε ένα bot. Σε σύγκριση με τη σύνταξη bots σε μη εξειδικευμένα περιβάλλοντα προγραμματισμού ή σε μη πολύ εξειδικευμένα, η ανάπτυξη στο NOMAD μπορεί να συμβεί δεκάδες ή και εκατοντάδες φορές πιο γρήγορα. (αφού πρώτα θα πρέπει να αναπτύξετε εργαλεία ανίχνευσης αντικειμένων, τα οποία είναι ήδη ενσωματωμένα στο NOMAD έτοιμα). Μπορείτε να κάνετε λήψη του κιτ διανομής NOMAD με το bot που είναι ήδη εγκατεστημένο από αυτό το άρθρο χρησιμοποιώντας αυτόν τον σύνδεσμο (προσοχή! οι ρυθμίσεις του προγράμματος στο κιτ διανομής έχουν σχεδιαστεί για να το εγκαταστήσετε στον προεπιλεγμένο φάκελο, εάν το εγκαταστήσετε σε άλλη τοποθεσία, αλλάξτε τις διαδρομές στη βάση και ο σχεδιαστής με τον παίκτη!)

adminbot
Ημερομηνία:22.07.2015

Η διαχείριση πολλών είναι το ίδιο με τη διαχείριση λίγων. Είναι θέμα οργάνωσης.

Σουν Τζου

Το καθήκον μας τώρα είναι να δείξουμε πώς φτιάχνεται ένα πρόγραμμα bot και επομένως για αυτοματοποίηση θα επιλέξουμε κάτι απλό και ταυτόχρονα προσβάσιμο σε όλους, για παράδειγμα, έναν υπολογιστή. Φυσικά, αυτό δεν είναι ένα διαδικτυακό παιχνίδι, αλλά πιστέψτε με, η δημιουργία ενός bot για ένα διαδικτυακό παιχνίδι δεν διαφέρει. (προσοχή, το παράδειγμα λειτουργεί σε Windows 8 και Windows 7 και η αριθμομηχανή θα πρέπει να μοιάζει με το παρακάτω στιγμιότυπο οθόνης, δηλαδή, για παράδειγμα, στα Windows XP η αριθμομηχανή καλείται και φαίνεται διαφορετική και επομένως το bot δεν θα λειτουργεί εκεί)

Για να ξεκινήσουμε να παίζουμε κάτι «αυτόματα», πρέπει να ακολουθήσουμε τα παρακάτω βήματα:

  • Διατυπώστε μια εργασία για τον εαυτό σας. Ποιους στόχους πρέπει να πετύχει το bot μας;
  • Τι ενέργειες πρέπει να κάνει για αυτό;
  • Με βάση την εργασία, καθορίστε ποια αντικείμενα πρέπει να δει, και πώς και σε ποια γεγονότα πρέπει να αντιδράσει για να επιτύχει τους στόχους που περιγράφονται στην παράγραφο 1.
  • Δημιουργία αλγορίθμου.
  • Προγραμματισμός.
  • Η αποστολή του bot μας θα είναι να προσθέτει ατελείωτα 2 αριθμούς 59 και 3 σε μια αριθμομηχανή.

    Για να πετύχουμε τον στόχο μας, χρειαζόμαστε το πρόγραμμά μας να πατήσει τα κουμπιά 5 και 9 της αριθμομηχανής και, εάν είναι επιτυχές, το κουμπί + και το κουμπί 3 και μετά το κουμπί =

    Επομένως, θα πρέπει να αναζητήσουμε αυτά τα αντικείμενα στην εικόνα και στη συνέχεια να τα χτυπήσουμε με το ποντίκι. Θα αναλύσουμε επίσης τον αριθμό 59 και τον αριθμό 0 στο πεδίο αποτελεσμάτων, καθώς και το κουμπί CE για να επαναφέρουμε τον υπολογισμό στο 0 πριν ξεκινήσουμε την επόμενη επανάληψη.

    Ο αλγόριθμός μας λοιπόν: Σε έναν ατελείωτο βρόχο, πρώτα κάνουμε αναζήτηση και κάνουμε κλικ στο κουμπί 5 και στο κουμπί 9 με το ποντίκι, εάν είναι επιτυχές, κάνουμε παύση για 3 δευτερόλεπτα (για να έχουμε χρόνο να απολαύσουμε το αποτέλεσμα). Έπειτα ελέγχουμε αν έχουμε εικόνα του αριθμού 59, αν υπάρχει, βρίσκουμε και κάνουμε κλικ στα κουμπιά + και 3 της αριθμομηχανής, εάν και αυτές οι πράξεις έχουν ολοκληρωθεί με επιτυχία, τότε βρίσκουμε και κάνουμε κλικ στο κουμπί = του η αριθμομηχανή. Μετά από αυτό κοιμόμαστε για 5 δευτερόλεπτα. Στη συνέχεια ελέγχουμε αν δεν υπάρχει εικόνα 0 στο πεδίο αποτελεσμάτων, τότε πρέπει να πατήσετε το κουμπί CE για να επαναφέρετε τα αποτελέσματα των προηγούμενων υπολογισμών. Μετά από αυτό επαναλαμβάνεται η επανάληψη. Όταν πατήσετε το κουμπί Esc, το πρόγραμμα σταματά.

    Ας δείξουμε τον κώδικα του προγράμματος που πήραμε:

    Δελφοί/Πασκάλ

    Διαδικασία StartOnClick(); ξεκινούν ενώ (getasynckeystate($1B) = 0) do //ο βρόχος συνεχίζεται μέχρι να πατήσουν Esc++ ξεκινάει εάν πέντε.MouseClick("l") και nine.MouseClick("l") τότε //εάν πατηθούν με επιτυχία πέντε και 9 μετά ξεκινήστε τον ύπνο (3000). //sleep for 3 seconds if fiftynine.FindPicture, τότε //αν βρείτε 59, προσθέστε 3 σε αυτά: ξεκινήστε εάν συν.MouseClick("l") και three.MouseClick("l") τότε //αν καταφέρετε να πατήστε συν 3 και μετά κάντε κλικ στο equal.MouseClick("l"); τέλος;

    τέλος;

    ύπνος (5000); //sleep για 5 δευτερόλεπτα αν όχι zero.FindPicture τότε //αν δεν υπάρχει μηδέν στην οθόνη CE.MouseClick("l"); //μετά κάντε κλικ στο CE Application.ProcessMessages;//επεξεργάζεται αναγκαστικά //μηνύματα που εμφανίστηκαν στο παράθυρο κατά τη λειτουργία, για παράδειγμα //ένα μήνυμα σχετικά με το πάτημα του πλήκτρου Esc. Εάν δεν το καλέσετε, //το πρόγραμμα μπορεί να παγώσει, να αντιδράσει άσχημα στο πάτημα του Esc κ.λπ. τέλος; //ο βρόχος συνεχίζεται μέχρι να πατηθεί το Esc -- ShowMessage("Το πρόγραμμα έχει σταματήσει!"); τέλος;

    Διαδικασία StartOnClick () ;

    ύπνος (5000); //sleep για 5 δευτερόλεπτα αν όχι zero.FindPicture τότε //αν δεν υπάρχει μηδέν στην οθόνη CE.MouseClick("l"); //μετά κάντε κλικ στο CE Application.ProcessMessages;//επεξεργάζεται αναγκαστικά //μηνύματα που εμφανίστηκαν στο παράθυρο κατά τη λειτουργία, για παράδειγμα //ένα μήνυμα σχετικά με το πάτημα του πλήκτρου Esc. Εάν δεν το καλέσετε, //το πρόγραμμα μπορεί να παγώσει, να αντιδράσει άσχημα στο πάτημα του Esc κ.λπ. τέλος; //ο βρόχος συνεχίζεται μέχρι να πατηθεί το Esc -- ShowMessage("Το πρόγραμμα έχει σταματήσει!"); τέλος;

    αρχίζουν

    ύπνος (5000); //sleep για 5 δευτερόλεπτα αν όχι zero.FindPicture τότε //αν δεν υπάρχει μηδέν στην οθόνη CE.MouseClick("l"); //μετά κάντε κλικ στο CE Application.ProcessMessages;//επεξεργάζεται αναγκαστικά //μηνύματα που εμφανίστηκαν στο παράθυρο κατά τη λειτουργία, για παράδειγμα //ένα μήνυμα σχετικά με το πάτημα του πλήκτρου Esc. Εάν δεν το καλέσετε, //το πρόγραμμα μπορεί να παγώσει, να αντιδράσει άσχημα στο πάτημα του Esc κ.λπ. τέλος; //ο βρόχος συνεχίζεται μέχρι να πατηθεί το Esc -- ShowMessage("Το πρόγραμμα έχει σταματήσει!"); τέλος;

    ενώ (getasynckeystate ($ 1B ) =0 ) do //ο βρόχος συνεχίζεται μέχρι να πατηθεί Esc++

    αν πέντε. MouseClick ("l") και εννέα . Κάντε κλικ στο ποντίκι ("l") και μετά //αν πατήσατε με επιτυχία το πέντε και το 9, τότε

    ύπνος (5000); //sleep για 5 δευτερόλεπτα αν όχι zero.FindPicture τότε //αν δεν υπάρχει μηδέν στην οθόνη CE.MouseClick("l"); //μετά κάντε κλικ στο CE Application.ProcessMessages;//επεξεργάζεται αναγκαστικά //μηνύματα που εμφανίστηκαν στο παράθυρο κατά τη λειτουργία, για παράδειγμα //ένα μήνυμα σχετικά με το πάτημα του πλήκτρου Esc. Εάν δεν το καλέσετε, //το πρόγραμμα μπορεί να παγώσει, να αντιδράσει άσχημα στο πάτημα του Esc κ.λπ. τέλος; //ο βρόχος συνεχίζεται μέχρι να πατηθεί το Esc -- ShowMessage("Το πρόγραμμα έχει σταματήσει!"); τέλος;

    ύπνος (3000); //ύπνο για 3 δευτερόλεπτα

    αν πενηντυνίνη. FindPicture τότε //αν βρήκαμε 59, προσθέστε 3 σε αυτά:

    αν συν . MouseClick ("l") και τρία . MouseClick ("l") και μετά //αν μπορείτε να πατήσετε συν 3, κάντε κλικ στο ίσο

    αν συν . MouseClick ("l") και τρία . MouseClick ("l") και μετά //αν μπορείτε να πατήσετε συν 3, κάντε κλικ στο ίσο

    ύπνος (5000); //ύπνο για 5 δευτερόλεπτα

    αν όχι μηδέν. FindPicture τότε //αν δεν υπάρχει μηδέν στην οθόνη

    C.E. MouseClick("l"); // στη συνέχεια πατήστε CE

    Εφαρμογή. Διαδικασία Μηνύματα ; //αναγκάζει την επεξεργασία

    //μηνύματα που ήρθαν στο παράθυρο κατά τη λειτουργία, για παράδειγμα

    //μήνυμα σχετικά με το πάτημα του πλήκτρου Esc. Αν δεν τηλεφωνήσεις τότε

    //το πρόγραμμα μπορεί να παγώσει, να αντιδράσει άσχημα στο πάτημα του Esc κ.λπ.

    τέλος ; //ο βρόχος συνεχίζεται μέχρι να πατηθεί Esc --

    ShowMessage("Το πρόγραμμα έχει σταματήσει!");

    αν συν . MouseClick ("l") και τρία . MouseClick ("l") και μετά //αν μπορείτε να πατήσετε συν 3, κάντε κλικ στο ίσο

    Εδώ προλάβαμε λίγο, γράφοντας αμέσως τον κώδικα, γιατί... Στο NOMAD, πρέπει πρώτα να δημιουργήσουμε τα πρότυπα εικόνας που θα αναζητήσουμε. Έτσι, αν κοιτάξετε τον κώδικα, μπορείτε να δείτε τις ακόλουθες εγγραφές: πέντε, εννέα, πενήντα εννέα, συν, τρία, ίσα, μηδέν, CE - τι είναι αυτό; και αυτά είναι στην πραγματικότητα εκείνα τα πρότυπα στο NOMAD που μπορείτε να δουλέψετε με αυτά από κώδικα όπως και με αντικείμενα, π.χ. γράφουμε το όνομα του αντικειμένου στον κώδικα και καλούμε τη μέθοδο του, για παράδειγμα: FindPicture - βρείτε την εικόνα προτύπου, MouseClick('l') - βρείτε την εικόνα προτύπου και κάντε αριστερό κλικ πάνω της. Για να μελετήσετε λεπτομερώς τις δυνατότητες και τις λειτουργίες του NOMAD, προτείνω να απευθυνθείτε. Και τώρα θα περιγράψω εν συντομία πώς μπορούμε να δημιουργήσουμε τα πρότυπα που λείπουν:

    Αρχικά, ας δημιουργήσουμε μια βάση δεδομένων για να το κάνουμε αυτό, κάντε κλικ στο κουμπί ΠΡΟΣΘΗΚΗ στο Launcher, στο παράθυρο που ανοίγει, συμπληρώστε το πρώτο πεδίο με το όνομα της βάσης δεδομένων (για παράδειγμα, Αριθμομηχανή) και στο δεύτερο πεδίο, υποδείξτε το κατάλογο όπου θέλουμε να αποθηκεύσουμε όλα όσα έχουμε προγραμματίσει. Εκείνοι. τον πραγματικό πηγαίο κώδικα του προγράμματός μας, ή με άλλα λόγια, τη βάση δεδομένων. Στη συνέχεια, κάντε κλικ στο κουμπί Αποθήκευση και θα εμφανιστεί μια καταχώρηση στη λίστα. Επιλέξτε το και πατήστε το κουμπί Κατασκευαστής.

    Δεύτερον, πρέπει να δημιουργήσετε και να διαμορφώσετε έναν μεταφορέα στιγμιότυπου οθόνης, ένα αντικείμενο που είναι υπεύθυνο για τη φωτογράφηση του παραθύρου, στην περίπτωσή μας του παραθύρου της αριθμομηχανής. Ανοίγουμε λοιπόν το πρόγραμμα σε λειτουργία Κατασκευαστή, στο παράθυρο που ανοίγει στα δεξιά θα δούμε την παρακάτω εικόνα:

    Στο στοιχείο που επισημαίνεται με μπλε χρώμα στην εικόνα, κάντε δεξί κλικ και επιλέξτε το στοιχείο μενού "προσθήκη σωλήνωσης στιγμιότυπου οθόνης". Στο παράθυρο που εμφανίζεται, υποδείξτε το όνομά του - "Υπολογισμός". Και πατήστε το κουμπί Εισαγωγή. Μετά από αυτό, ένα αντικείμενο με το ίδιο όνομα θα πρέπει να εμφανιστεί στο δέντρο αντικειμένων στην ενότητα ScreenShotPipe. Ας το βρούμε εκεί και ας κάνουμε κλικ πάνω του με το αριστερό κουμπί του ποντικιού. Το ακόλουθο παράθυρο θα εμφανιστεί στην αριστερή πλευρά του προγράμματος (οι ιδιότητες μπορεί να έχουν διαφορετική σειρά):

    Το έχω ήδη συμπληρώσει όπως θα έπρεπε να σου φαίνεται. Στην πραγματικότητα, όλα έχουν ήδη υποδειχθεί, απλά πρέπει να γράψετε τη λέξη Αριθμομηχανή στο πεδίο WindName. Ολόκληρος ο μεταφορέας είναι έτοιμος και μπορούμε να ξεκινήσουμε τη δημιουργία προτύπων, όπου θα σας πω γιατί φτιάξαμε αυτόν τον μεταφορέα εξαρχής.

    Τρίτον, ας εκκινήσουμε την αριθμομηχανή και ας τραβήξουμε μια φωτογραφία για να τραβήξετε μια φωτογραφία, πρέπει να κάνετε κλικ στο κουμπί ScreenShot στην επάνω αριστερή γωνία του Designer. Μετά από αυτό, θα έχουμε ένα παράθυρο τηλεόρασης με ένα στιγμιότυπο οθόνης. Τώρα πρέπει να πατήσουμε το κουμπί Αποκοπή και να επιλέξουμε την αριθμομηχανή μας στο παράθυρο της τηλεόρασης, το αποτέλεσμα αυτών των ενεργειών θα πρέπει να είναι το παράθυρο της τηλεόρασης με την εικόνα της αριθμομηχανής.

    Κάντε κλικ στο κουμπί Borders (σημείωση: από τη στιγμή που γράφτηκε αυτό το άρθρο, το πρόγραμμα έχει προσθέσει τη λειτουργία FixBorders (μαύρο κουμπί οθόνης με φεγγάρι), προτείνω να το χρησιμοποιήσετε. Χρησιμοποιείται με τον ίδιο τρόπο όπως το Borders, αλλά λειτουργεί σε δυναμικές εικόνες πολύ πιο σταθερό) και αρχίστε να φτιάχνετε πρότυπα. Θα εξηγήσω πώς γίνεται αυτό χρησιμοποιώντας το παράδειγμα ενός προτύπου για το κουμπί "+" - πρέπει να επιλέξουμε το πιο χαρακτηριστικό τμήμα της εικόνας που δεν επαναλαμβάνεται σε άλλα μέρη. Στην πραγματικότητα, επιλέγουμε το ίδιο το σύμβολο +, κάνουμε κλικ στο κουμπί Επιλογή και επιλέγουμε αυτό το σύμβολο σε ένα τετράγωνο:

    Κάνουμε δεξί κλικ μέσα στο διάστικτο τετράγωνο και εμφανίζεται ένα παράθυρο:

    στο πεδίο το όνομα του οποίου γράφουμε “συν” (αφού αυτό το αντικείμενο ήταν γραμμένο στον κώδικά μας) και πατάμε Εισαγωγή. Στην ενότητα Πρότυπα του δέντρου αντικειμένων, έχουμε τώρα ένα αντικείμενο με το ίδιο όνομα. Κάντε κλικ σε αυτό και ένα παράθυρο που είναι ήδη γνωστό σε εμάς θα εμφανιστεί στα αριστερά:

    Εδώ πρέπει να αλλάξουμε την ιδιότητα ConnectedScreen σε αυτήν πρέπει να επιλέξουμε το screenshot pipeline που δημιουργήσαμε στην αρχή, γιατί Από προεπιλογή, εδώ επιλέγεται ο καθολικός μεταφορέας, ο οποίος φωτογραφίζει ολόκληρη την επιφάνεια εργασίας και όχι μόνο την αριθμομηχανή μας. Αυτό ολοκληρώνει την ελάχιστη διαμόρφωση του προτύπου και νομίζω ότι αυτό θα είναι αρκετό για εμάς. Περισσότερες λεπτομέρειες σχετικά με αυτό μπορείτε να βρείτε στην τεκμηρίωση. Το μόνο που έχετε να κάνετε είναι να κάνετε το ίδιο με όλα τα άλλα αντικείμενα που πρέπει να προσθέσουμε στα πρότυπα. Μετά την προσθήκη όλων των προτύπων, το δέντρο αντικειμένων θα πρέπει να μοιάζει με αυτό:

    Είναι πολύ σημαντικό τα ονόματα, συμπεριλαμβανομένης της θήκης εισαγωγής, να ταιριάζουν ακριβώς με αυτό που βλέπετε στην εικόνα. Στο παράδειγμα, τα πέντε και τα εννέα πρότυπα κατασκευάζονται με διαφορετικό τρόπο, σε λειτουργία ColMap για λεπτομέρειες σχετικά με το πώς γίνεται αυτό, σας προτείνω να ανατρέξετε στην τεκμηρίωση. Αυτό δεν θα έχει μεγάλο αντίκτυπο στη λειτουργία του κώδικα προγράμματος και μπορείτε να φτιάξετε όλα τα πρότυπα με τον ίδιο τρόπο όπως το πρότυπο κουμπιού +. Ή δεν μπορείτε να κάνετε τίποτα και να κατεβάσετε μια έτοιμη διανομή με ένα παράδειγμα

    Για να δημιουργήσετε τα πρότυπα fiftynine και zero, πρέπει να δημιουργήσετε ένα πρότυπο για το τμήμα της αριθμομηχανής που επισημαίνεται στην εικόνα:

    Όλα σύμφωνα με τα πρότυπα.

    3) Πρέπει επίσης να δημιουργήσουμε ένα γραφικό περιβάλλον για το πρόγραμμα μέσω του οποίου θα επικοινωνεί με τον χρήστη. Για να το κάνετε αυτό, μεταβείτε στο μενού "Windows" στο Program Designer και επιλέξτε "Form Designer"

    Θα ανοίξει ένα παράθυρο με μια φόρμα, στο οποίο πρέπει να κάνετε διπλό κλικ και από το παράθυρο που ανοίγει, να προσθέσετε ένα αντικείμενο Button και στα δύο πεδία της φόρμας και να γράψετε Έναρξη. Κάντε κλικ στο ΟΚ και βγείτε από τη φόρμα και στην κύρια φόρμα έχουμε ένα κουμπί Έναρξη, κάντε κλικ σε αυτό και εμφανίζεται ξανά το μενού ιδιοτήτων, κάντε κλικ στην καρτέλα Συμβάντα και δείτε τα εξής:

    Στη στήλη Τιμή έναντι του συμβάντος OnClick, κάντε διπλό κλικ με το ποντίκι και η Τιμή στην παραπάνω εικόνα συμπληρώνεται αυτόματα. Και ένα πρόγραμμα επεξεργασίας κειμένου εμφανίζεται στο κεντρικό παράθυρο:

    Πρέπει να αντικαταστήσουμε αυτό το κείμενο με τον κωδικό που έδωσα στην αρχή του άρθρου. Το πρόγραμμα είναι τώρα έτοιμο. Για να ξεκινήσετε, πρέπει να αποθηκεύσετε το πρόγραμμα κάνοντας κλικ στο κουμπί με την εικόνα δύο δισκέτες, στη συνέχεια να μεταγλωττίσετε το πρόγραμμα κάνοντας κλικ στο κουμπί με την εικόνα ενός σταυρωτού κατσαβιδιού και ενός κλειδιού και, στη συνέχεια, κάντε κλικ στο κουμπί Εκκίνηση ή εκτελέστε το από ο εκτοξευτής. Από τον σχεδιαστή, το πρόγραμμα εκτελείται πάντα σε λειτουργία εντοπισμού σφαλμάτων, επομένως θα εμφανίζονται μηνύματα εντοπισμού σφαλμάτων. Εάν τα κάναμε όλα σωστά, θα πρέπει να δούμε ένα παράθυρο με ένα κουμπί που δημιουργήσαμε:

    Εκκινήστε την αριθμομηχανή, κάντε την ορατή στην επιφάνεια εργασίας και πατήστε το κουμπί έναρξης. Όταν κουραστείτε, πατήστε το κουμπί Esc και περιμένετε για ένα μήνυμα ότι το πρόγραμμα έχει τελειώσει.

    Αυτό είναι όλο. Δύσκολος; Το να το κάνεις αυτό σε μια κανονική γλώσσα προγραμματισμού είναι πολύ πιο δύσκολο. Προσωπικά, η συγγραφή αυτού του bot δεν μου πήρε περισσότερο από μισή ώρα, κάτι που δεν μπορώ να πω για αυτό το άρθρο.

    Άλλα παραδείγματα ρομπότ μπορούν να βρεθούν στο φόρουμ, για παράδειγμα,

    Δυστυχώς, αυτή τη στιγμή δεν υπάρχουν καλές βιβλιοθήκες Python2 για να δημιουργήσετε γρήγορα ένα chatbot. Παρακάτω θα δείξω πόσο εύκολο είναι να γράψετε ένα πρωτόγονο ρομπότ συνομιλίας για VK χρησιμοποιώντας το VK API.


    Το άρθρο γράφτηκε για αρχάριους για να δείξει ότι δεν υπάρχει τίποτα δύσκολο στη σύνταξη bots στην Python.

    Εξουσιοδότηση

    Θα χρειαστούμε τη βιβλιοθήκη vk_api. Μπορείτε να συνδεθείτε στο VK με δύο τρόπους:
    - Ως χρήστης
    - Ως κοινότητα


    Στην πρώτη περίπτωση, θα χρειαστεί να εισαγάγετε το όνομα χρήστη και τον κωδικό πρόσβασής σας. Στη δεύτερη περίπτωση, πρέπει να ενεργοποιήσετε τα "Μηνύματα κοινότητας" στην ομάδα και να δημιουργήσετε ένα κλειδί πρόσβασης API:





    χρόνος εισαγωγής εισαγωγή vk_api vk = vk_api.VkApi(login = "login", password = "password") #vk_api.VkApi(token = "a02d...e83fd") #Σύνδεση ως κοινότητα vk.auth() Αποστολή μηνυμάτων

    Τώρα ας γράψουμε μια σύντομη συνάρτηση που στέλνει ένα μήνυμα στο επιλεγμένο άτομο.


    ΥΣΤΕΡΟΓΡΑΦΟ.


    Η κοινότητα μπορεί να στέλνει μηνύματα μόνο σε χρήστες που έχουν αναρτηθεί στο παρελθόν.

    def write_msg(user_id, s): vk.method("messages.send", ("user_id":user_id,"message":s)) Στο vk.method μπορούμε να καλέσουμε οποιαδήποτε μέθοδο από VK API


    και περάστε τις παραμέτρους ως λεξικό. Σε αυτή την περίπτωση καλούμε τη μέθοδομηνύματα.αποστολή

    και περάστε το αναγνωριστικό χρήστη και το κείμενο του μηνύματος ως παραμέτρους.

    Λήψη μηνυμάτων Εξαιρετική! Έχουμε μάθει να στέλνουμε μηνύματα, απλά πρέπει να μάθουμε πώς να τα λαμβάνουμε. Για αυτό χρειαζόμαστε μια μέθοδο.


    messages.get


    Μερικές παράμετροι που πρέπει να προσέξετε:
    1) out - εάν αυτή η παράμετρος είναι ίση με 1, ο διακομιστής θα επιστρέψει τα εξερχόμενα μηνύματα.
    2) count - ο αριθμός των μηνυμάτων που πρέπει να ληφθούν.
    3) time_offset - ο μέγιστος χρόνος που έχει περάσει από τη στιγμή που στάλθηκε το μήνυμα έως την τρέχουσα στιγμή σε δευτερόλεπτα.


    4) last_message_id - το αναγνωριστικό του μηνύματος που ελήφθη πριν από αυτό που πρέπει να επιστραφεί τελευταίο (υπό την προϋπόθεση ότι δεν ελήφθησαν περισσότερα από πλήθος μηνυμάτων μετά από αυτό)

    values‎ = ("out": 0,"count": 100,"time_offset": 60) vk.method("messages.get", τιμές)


    Στην περίπτωσή μας, αυτή η μέθοδος θα επιστρέψει όλα τα μηνύματα που ελήφθησαν τα τελευταία 60 δευτερόλεπτα, αν φυσικά ήταν λιγότερα από 100 και αν περισσότερα, τότε τα τελευταία 100.


    Ως αποτέλεσμα, λαμβάνουμε μια λίστα με στοιχεία:

    (u"count": 3441, u"στοιχεία": [(u"body": u"\u041f\u0438\u0448\u0435\u043c \u0431\u043e\u0442\u0430 \u0434\u043\u043f\u044 !", u"date": 1491934484, u"id": 7387, u"out": 0, u"read_state": 0, u"title": u" ... ", u"user_id": 23107592) , (u"body": u"\u041f\u0440\u0438\u0432\u0435\u0442 \u0425\u0430\u0431\u0440!", u"ημερομηνία": 1491934479, u"8"out": 7 : 0, u"read_state": 0, u"title": u" ... ", u"user_id": 23107592)])



    Για να το εξηγήσουμε με απλά λόγια, τα στοιχεία είναι κάτι που μπορεί να επισημανθεί στο διάλογο.


    while True: answer = vk.method("messages.get", values) if answer["items"]: values["last_message_id"] = answer["items"]["id"] for item in answer["items" "]: write_msg(item,u"Hello, Habr!") time.sleep(1)

    Το chatbot είναι έτοιμο.


    ΥΣΤΕΡΟΓΡΑΦΟ.


    Θυμόμαστε την παράμετρο last_message_id έτσι ώστε την επόμενη φορά να επεξεργαζόμαστε μόνο νέα μηνύματα.

    Πλήρης κωδικός


    # -*- κωδικοποίηση: utf-8 -*- χρόνος εισαγωγής εισαγωγή vk_api vk = vk_api.VkApi(login = "login", password = "password") #vk_api.VkApi(token = "a02d...e83fd") # Συνδεθείτε ως κοινότητα vk.auth() values‎ = ("out": 0,"count": 100,"time_offset": 60) def write_msg(user_id, s): vk.method("messages.send" , ("user_id ":user_id,"message":s)) ενώ True: answer = vk.method("messages.get", values) if answer["items"]: values["last_message_id"] = απάντηση[" αντικείμενα"][ "αναγνωριστικό"] για το αντικείμενο σε απόκριση["αντικείμενα"]: write_msg(item,u"Hello, Habr!") time.sleep(1)


    Αποδείχθηκε ότι ήταν 17 γραμμές κώδικα. Καλή τύχη!
    UPD 17/09/18:

    Δυστυχώς, στη νέα έκδοση (5.80) του VK API, η μέθοδος "messages.get" καταργήθηκε και αυτό το άρθρο έχει χάσει τη συνάφειά του. Τώρα χρησιμοποιήστε το σύστημα longpoll για να δημιουργήσετε bots. Μπορείτε να βρείτε ένα παράδειγμα στη λειτουργική μονάδα vk_api για την Python.

    Τα bots έχουν γίνει απίστευτα δημοφιλή τον τελευταίο καιρό. Αυτή είναι η τάση της σεζόν. Με την ανάπτυξη της πληροφορικής, την εμφάνιση νέων ιδεών και προγραμμάτων, η αντικατάσταση της ζωντανής επικοινωνίας είναι περισσότερο ο κανόνας παρά μια περιέργεια. Σίγουρα ο καθένας από εμάς έχει συναντήσει ένα ρομπότ τουλάχιστον μία φορά όταν λάβαμε νέα ή ειδοποιήσεις στα τηλέφωνά μας, επικοινωνήσαμε με ένα τηλεφωνικό κέντρο ή παίξαμε διαδικτυακά παιχνίδια. Πολλοί χρήστες κοινωνικών δικτύων γνωρίζουν πώς να δημιουργήσουν ένα bot στο VK. Θα μιλήσουμε για αυτό στο άρθρο.

    Τι είναι ένα bot;

    Τα bots στο VK είναι σελίδες γεμάτες με ψευδείς πληροφορίες. Εκτελούν αυτόματα εργασίες που ανατίθενται από τον συγγραφέα. Συχνά οι χακαρισμένες σελίδες πραγματικών χρηστών γίνονται bot στα κοινωνικά δίκτυα. Τα ρομπότ μολύνουν χιλιάδες κοινότητες. Το κύριο καθήκον τους είναι να προωθούν την ομάδα, να αφήνουν σχόλια, να λαμβάνουν likes, να αναδημοσιεύουν και πολλά άλλα. Εκτελούν μια σειρά από ασήμαντες εργασίες: αποστολή spam, αύξηση του αριθμού των συνδρομητών ή των φίλων.

    Γιατί χρειάζεται;

    Πώς να δημιουργήσετε ένα bot στο VK για μια ομάδα; Τα ρομπότ σε γνωστό κοινωνικό δίκτυο προωθούν διάφορες κοινότητες. Η απόκτηση οπαδών στα κοινωνικά δίκτυα είναι επικίνδυνη, ειδικά αν ο αριθμός τους ξεπερνά τους πεντακόσιους την ημέρα. Εάν η ομάδα αποτελείται από ρομπότ, και αυτό είναι πάνω από 30%, τότε θα αποκλειστεί από τη διοίκηση.

    Αλλά τα bots δεν είναι πάντα κακά. Μπορούν να παρέχουν σημαντική υποστήριξη σε ένα πραγματικό πρόσωπο ή σύστημα. Τα βοηθητικά ρομπότ ανταποκρίνονται αυτόματα σε αιτήματα και παρέχουν τις απαραίτητες πληροφορίες. Ένα απλό παράδειγμα είναι τα bots που μιλούν για τα τελευταία νέα ή τον καιρό.

    Κατασκευαστές

    Πολλοί χρήστες κοινωνικών δικτύων δεν γνωρίζουν πώς να δημιουργήσουν ένα bot στο VK. Πριν το κάνετε αυτό, πρέπει να αποφασίσετε σε τι χρησιμεύει. Η δημιουργία του δεν απαιτεί δεξιότητες προγραμματισμού ή ιδιαίτερες γνώσεις. Τα προγράμματα δημιουργίας ρομπότ (το Chatfuel είναι ένα από τα πιο δημοφιλή) σας επιτρέπουν να δημιουργήσετε ένα bot για επικοινωνία χρησιμοποιώντας μια φιλική προς το χρήστη διεπαφή. Τέτοιοι βοηθοί χρησιμοποιούνται από σοβαρές εταιρείες και εταιρείες. Οι πιο δημοφιλείς σχεδιαστές σήμερα είναι: Api.ai, Meya, Pandarabots, Manybot. Αυτές οι υπηρεσίες χρησιμοποιούνται για τη δημιουργία chat bots σε κοινωνικά δίκτυα.

    VK chatbot

    Ο σύγχρονος χρήστης των κοινωνικών δικτύων απαιτεί έναν ενεργό βοηθό. Η έλλειψη χρόνου έχει γίνει το σημείο εκκίνησης για τη δημιουργία ρομπότ που ανταποκρίνονται σε μηνύματα και εκτελούν άλλες εργασίες. Το chatbot είναι ένα πρόγραμμα μέσω του οποίου ο χρήστης επικοινωνεί.

    Υπάρχουν τέσσερις τύποι chatbots:

    • Βοηθοί. Είναι πάντα κοντά, βρίσκουν τις πληροφορίες που χρειάζεται ο χρήστης, βάζουν ξυπνητήρι, εκτελούν οργανωτικές εργασίες, όπως παραγγελία φαγητού στο γραφείο ή σπίτι, κράτηση δωματίου σε ξενοδοχείο, αγορά εισιτηρίων.
    • Τεχνητή νοημοσύνη. Οι πρόσφατες εξελίξεις οδηγούν σε chatbot που εκτελούν εργασίες που απαιτούν πολύ ανθρώπινο χρόνο. Τα ρομπότ μπορούν να απαντήσουν σε ερωτήσεις του συνομιλητή τους.
    • Επιχειρηματικά ρομπότ. Έχουν σχεδιαστεί για να αυξάνουν την αποτελεσματικότητα και να βελτιστοποιούν τις επιχειρήσεις. Για παράδειγμα, η υπηρεσία SpyCat 2.0 ειδοποιεί τον χρήστη για σχόλια που έλαβε στο VK με μια λειτουργία αυτόματης απόκρισης. Τα ρομπότ επιχειρήσεων μειώνουν το κόστος και αυτοματοποιούν τις διαδικασίες εργασίας (αποστολή μηνυμάτων σε εργαζόμενους και πελάτες).
    • Παιχνίδι. Ένα πρόγραμμα που ελέγχεται από υπολογιστή. Μιμείται συνεργάτες σε ένα διαδικτυακό ομαδικό παιχνίδι. Τέτοια bots βασίζονται στην τεχνητή νοημοσύνη και προσαρμόζονται στα χαρακτηριστικά ενός συγκεκριμένου παιχνιδιού.

    Πώς να δημιουργήσετε ένα chatbot στο VK; Αυτό είναι αρκετά εύκολο να γίνει. Πριν ξεκινήσετε, πρέπει να πληροίτε ορισμένα κριτήρια: συνεχή πρόσβαση στο Διαδίκτυο και πολύ ελεύθερο χρόνο. Κατεβάστε το δωρεάν chatbot, ξεκινήστε το και προσθέστε έναν λογαριασμό. Στη συνέχεια, εισαγάγετε τα στοιχεία σύνδεσης και τον κωδικό πρόσβασης της σελίδας σας VK. Στη συνέχεια, θα ανοίξει μια οδηγία, θα πρέπει να τη διαβάσετε και να μεταβείτε στην καρτέλα "Μηνύματα". Γράψτε "Bot, hello!" στον τοίχο του λογαριασμού σας. Σε τριάντα δευτερόλεπτα θα πρέπει να απαντήσει. Στις καρτέλες προγράμματος "Λογαριασμός" και "Ομάδες" μπορείτε να διαμορφώσετε και να αλλάξετε τις λειτουργίες του bot.

    Δεν ξέρετε πώς να δημιουργήσετε μόνοι σας ένα bot στο VK; Οι δωρεάν κατασκευαστές μπορούν να βοηθήσουν σε αυτό. Εάν σκοπεύετε να κάνετε το bot πιο περίπλοκο, είναι καλύτερο να το γράψετε χειροκίνητα χρησιμοποιώντας οποιαδήποτε γλώσσα προγραμματισμού. Υπάρχουν εργαλεία που διευκολύνουν την εργασία για τον σχεδιαστή. Για παράδειγμα, το api.ai μπορεί να μεταμορφώσει τα αιτήματα των χρηστών έτσι ώστε ο υπολογιστής να κατανοεί αυτές τις εντολές. Αν ρωτήσετε το ρομπότ: "Πώς θα είναι ο καιρός αύριο στην περιοχή του Ροστόφ;" - θα κατανοήσει την ερώτηση χρησιμοποιώντας τις λέξεις-κλειδιά «καιρός, αύριο, περιοχή του Ροστόφ» και θα δώσει το αποτέλεσμα.

    Στην ερώτηση πώς να δημιουργήσετε ένα bot στο VK χωρίς προγράμματα, οι ειδικοί απαντούν: πρώτα απ 'όλα, επιλέξτε μια γλώσσα προγραμματισμού. Αυτό ισχύει για εκείνους τους χρήστες που έχουν μια ιδέα για αυτό. Τα πιο συχνά χρησιμοποιούμενα είναι η Python και η Javascript. Στη συνέχεια επιλέγεται μια πλατφόρμα για εργασία με το bot: οποιοδήποτε κοινωνικό δίκτυο, ένα πρόγραμμα για την αποστολή και τη λήψη μηνυμάτων και μια βιβλιοθήκη για την αλληλεπίδραση με τον αγγελιοφόρο (API). Επιτρέπει στο πρόγραμμα να επικοινωνεί με το κοινωνικό δίκτυο. Όταν επιλεγεί η πλατφόρμα και η γλώσσα προγραμματισμού, μπορείτε να δημιουργήσετε ένα απλό bot και όλες οι περαιτέρω ενέργειες εξαρτώνται από την πρώτη. Μόλις δημιουργηθεί το bot, δοκιμάστε να το δοκιμάσετε. Αυτό βοηθά στην εξάλειψη των ελλείψεων και των σφαλμάτων και στη βελτίωση του.

    Πώς να προχωρήσω;

    Το Android είναι ένα λειτουργικό σύστημα που δημιουργήθηκε για ηλεκτρονικές συσκευές. Βασίζεται στον πυρήνα του Linux και σας επιτρέπει να δημιουργείτε εφαρμογές που ελέγχονται από τη συσκευή μέσω των βιβλιοθηκών της Google. Πώς να δημιουργήσετε ένα bot VK; Το Android υποστηρίζει προγράμματα για τη δημιουργία bots από smartphone. Η γνώση μιας γλώσσας προγραμματισμού θα σας βοηθήσει και πάλι να το κάνετε μόνοι σας. Εάν αντιμετωπίζετε δυσκολίες με αυτό, χρησιμοποιήστε έναν αυτόματο μηχανισμό ή υπηρεσίες. Για παράδειγμα, το Abot θα σας βοηθήσει να δημιουργήσετε έναν προσωπικό εικονικό βοηθό. Απαντάει σε μηνύματα και σε διάφορες ερωτήσεις πελατών. Αυτό είναι ένα βολικό πράγμα για τη λειτουργία ή την παρακολούθηση μιας επιχείρησης μέσω ενός smartphone.

    Γράφοντας ένα bot για έναν ιστότοπο σε javascript

    (Παρά το γεγονός ότι το κείμενο περιέχει παραδείγματα κώδικα και συναρτήσεις εργασίας, αυτό το άρθρο χρησιμεύει περισσότερο ως οδηγός για άτομα που πρέπει να γράψουν ένα πρόγραμμα, παρά ως συγκεκριμένο παράδειγμα δράσης. Περιέγραψα τις δυσκολίες που αντιμετώπισα και τη λύση τους, αλλά εγώ μην νομίζεις ότι αυτό είναι αρκετό)

    Όπως θα το ήθελε η μοίρα, έπρεπε να γράψω ένα bot για έναν ιστότοπο του οποίου η πλοήγηση είναι εξ ολοκλήρου χτισμένη σε ajax.

    Έχω ήδη αντιμετωπίσει ένα τέτοιο πρόβλημα και καταλαβαίνω πολύ καλά ότι η βιβλιοθήκη curl PHP αντιμετωπίζει το έργο της αρκετά καλά και σε αυτήν την περίπτωση με το ajax, αλλά, προφανώς, δεν ήμουν ο πρώτος τέτοιος έξυπνος τύπος και οι προγραμματιστές του ιστότοπου προστατεύτηκαν από τα bots αλλάζοντας συνεχώς αιτήματα ajax, ακόμη και τη δημιουργία τους χρησιμοποιώντας javascript.

    Όλα τα άρθρα της σειράς
    Μετά από ταλαιπωρία για τρεις νύχτες, συνειδητοποίησα ότι έπρεπε να γράψω έναν διερμηνέα javascript, αλλά αυτή η εργασία, για να το θέσω ήπια, δεν ανταμείβει μετά από ψάξιμο στο Διαδίκτυο, βρήκα 2 έτοιμα (το υπόλοιπο της παραγράφου είναι στην πραγματικότητα δεν έχει σημασία):

    Για java. (Θα ήθελα με αυτήν την ευκαιρία να σημειώσω ότι, σε αντίθεση με τη δημοφιλή πεποίθηση, η java και η javascript είναι δύο εντελώς διαφορετικές γλώσσες και η javascript απέκτησε το πρόθεμα «java» την τελευταία στιγμή και μόνο για σκοπούς μάρκετινγκ).

    Χάρη στο βιβλίο του Peter Naughton του 1996, το οποίο τράβηξε κατά λάθος το μάτι μου πριν από ένα μήνα, συνειδητοποίησα ότι η java είναι αναμφίβολα μια ενδιαφέρουσα γλώσσα και μια γλώσσα που σας επιτρέπει να λύσετε πολλά συγκεκριμένα προβλήματα. Αλλά εγώ, όπως η πλειοψηφία, νομίζω, δεν θα μπορώ να γράψω ένα bot σε αυτό, η java απαιτεί πολλή προσπάθεια για να μάθεις, και αν τη μελετήσεις, δεν θα είναι για να γράψεις ένα μικρό πρόγραμμα.
    Για πύθωνα. Πιθανώς στις αρχές της άνοιξης, άκουσα μια ενθουσιώδη ανασκόπηση αυτής της γλώσσας προγραμματισμού από ένα άτομο (τον επικεφαλής ενός από τα γραφεία παραγωγής ιστοσελίδων, όπως αποκαλεί τον εαυτό του), στην οποία όλες οι γλώσσες διακομιστή που είναι γνωστές σε μένα είχαν απορριφθεί και ο μεγάλος και πανίσχυρος πύθωνας δοξάστηκε. Από αυτόν τον μονόλογο έμαθα επίσης ότι για το γραφείο, τώρα γράφεται ένα CMS κατόπιν αιτήματος σε Python και έχει σχεδόν ολοκληρωθεί. Μόνο αυτό:
    δεν μίλησε με τα δικά του λόγια, αλλά με τα λόγια του προγραμματιστή που γράφει αυτό το CMS, αλλά ο ίδιος δεν ξέρει καν πώς μοιάζει ο python.
    στον προγραμματισμό, αυτό το άτομο δεν προχωρά πέρα ​​από τις εργαστηριακές δοκιμές στο ινστιτούτο και είναι ακόμη ελάχιστα έμπειρο σε αυτό, όλος ο προγραμματισμός του περιορίζεται στην πλοήγηση σε διαδραστικά κινούμενα σχέδια,
    ακόμα και μετά από ενάμιση χρόνο λειτουργίας, το γραφείο είναι ασύμφορο,
    ίσως λόγω του προηγούμενου σημείου, στην πραγματικότητα, δεν είναι νόμιμο και είναι απλώς ο Νοστός αριθμός φίλων που εργάζονται για μια ιδέα,
    Το CMS δεν έχει ακόμη οριστικοποιηθεί ακόμη και στην έκδοση beta.

    Με βάση όλα αυτά, σχημάτισα την αντίθετη άποψη για αυτή τη γλώσσα προγραμματισμού. Μπορεί, φυσικά, να είναι μάταιο, αλλά δεν θα εξετάσω καθόλου αυτήν την επιλογή.

    Μετά από μια άλλη άυπνη νύχτα χαμένη, ο νυσταγμένος εγκέφαλος μου θυμήθηκε τους Δελφούς. Σχετικά με αυτήν την παλιά 7η έκδοση, την οποία εγκαθιστώ αυτόματα μετά από κάθε μορφοποίηση δίσκου, αλλά στην πραγματικότητα δεν έχω δουλέψει για πέντε ή και επτά χρόνια. (Παρεμπιπτόντως, νομίζω ότι τα ίδια αγγούρια υπάρχουν στο C++Builder, αλλά δεν το έχω ελέγξει προσωπικά.)

    Εκεί, στην καρτέλα Διαδικτύου, το στοιχείο TWebBrowser είναι κρυμμένο, είναι μια παρουσία του Internet Explorer ενσωματωμένο στους Delphi, ο οποίος έχει ήδη τον διερμηνέα Javascript που χρειάζομαι τόσο πολύ.

    Ταυτόχρονα, κερδίζουμε σχεδόν απεριόριστη δύναμη σε αυτήν τη δημιουργία της Microsoft.

    Αυτό, φυσικά, είναι καλό, αλλά πρώτα πρέπει να μάθετε πώς να χρησιμοποιείτε το WebBrowser και είχα προβλήματα με αυτό, ξέρετε, δεν είμαι συνηθισμένος στα εγχειρίδια της Delph. Ως εκ τούτου, περιορίστηκα σε μερικά μόνο κόλπα που με βοήθησαν να μεταφέρω την εργασία από το ίδιο το στοιχείο στη σελίδα που φορτώθηκε απευθείας σε αυτό.

    Έτσι, πρώτα απ 'όλα, αφού τοποθετήσουμε το στοιχείο TWebBrowser στη φόρμα, πρέπει να φορτώσουμε τη σελίδα σε αυτήν, γι 'αυτό χρησιμοποιούμε τη μέθοδο Navigate:
    WebBrowser.Navigate('http://vvy.me');

    Υπάρχει επίσης μια μέθοδος για την αποστολή δεδομένων ανάρτησης, αλλά δεν τη χρειαζόμαστε καθόλου, το ίδιο το WebBrowser θα στείλει όλες τις φόρμες, χρειαζόμαστε μόνο τη σελίδα από την οποία το bot θα ξεκινήσει να περπατά στον ιστότοπο και η διεύθυνσή του δεν μπορεί να περιέχει αιτήματα ανάρτησης.

    Μετά τη φόρτωση της σελίδας, εμφανίζεται το συμβάν onDocumentComplete, στο οποίο μπορούμε να αρχίσουμε να εργαζόμαστε με τη σελίδα, αλλά πρώτα χρειαζόμαστε:

    προσθέστε τη λειτουργική μονάδα MSHTML στις χρήσεις
    προσθήκη μεταβλητών:
    WB_Doc: IHTMLDocument2; // Αυτή η μεταβλητή θα αποθηκεύσει τη διεπαφή για αλληλεπίδραση με ολόκληρο το πρόγραμμα περιήγησης Web WB_HTMLWindow: IHTMLWindow2; // Και εδώ είναι το παράθυρό μας, με το οποίο λειτουργεί η javascript

    και φυσικά ένα κομμάτι κώδικα στη διαδικασία onDocumentComplete
    WebBrowser1.Document.QueryInterface(IHTMLDocument2, WB_Doc); WB_HTMLWindow:= WB_Doc.parentWindow; αν δεν έχει εκχωρηθεί(WB_HTMLWindow) τότε showmessage('μπράβο σου') else showmessage('όλα είναι εντάξει');

    Αλλά στην πραγματικότητα, όλα είναι λίγο πιο περίπλοκα, το συμβάν onDocumentComplete εμφανίζεται όταν:

    φόρτωση του κώδικα html της σελίδας,
    φορτώνοντας κάθε πλαίσιο ξεχωριστά,
    σε περιπτώσεις όπου η javascript εκτελείται στη σελίδα, όταν συμβαίνει κάποια αλλαγή στο περιεχόμενο των ετικετών,
    και πολλά άλλα.

    Ταυτόχρονα, όταν συμβαίνει το συμβάν, το αντικείμενο του προγράμματος περιήγησης μπορεί να μην είναι προσβάσιμο, αλλά μπορούμε να επαληθεύσουμε τη δυνατότητα αλληλεπίδρασης με το WebBrowser από την ιδιότητα ReadyState, εάν όλα είναι καλά, τότε θα πρέπει να είναι ίσο με 4 ή READYSTATE_COMPLETE, όπως σου αρέσει. Όλες οι άλλες τιμές από το 0 έως το 3 δεν έχουν μικρό ενδιαφέρον για το περιβάλλον μας και υποδεικνύουν μόνο τον βαθμό ετοιμότητας του WebBrowser να εργαστεί μαζί του.

    Για να φτάσουμε στον κώδικα html της σελίδας, μπορούμε να χρησιμοποιήσουμε την παρακάτω συνάρτηση:
    συνάρτηση GetHtml(doc: IHtmlDocument2): string; var iDisp:IDispatch; iCollection: IHTMLElementCollection; έναρξη αποτελέσματος:= "; iCollection:= doc.all.Tags(‘HTML’) as IHTMLElementCollection; iDisp:= iCollection.item(0, 0); αποτέλεσμα:= (iDisp ως IHTMLElement).outerHTML; τέλος;

    Αν και επέστρεψε όλα τα περιεχόμενα ως ενιαία συμβολοσειρά, τους κωδικούς χαρακτήρες
    σε απόθεμα και όλα φορτώνονται τέλεια, για παράδειγμα στο TMemo με αλλαγές γραμμής:
    Memo.Lines.Add(GetHtml(WB_Doc));

    Θανατηφόρος αριθμός! Η συνάρτηση GetHtml θα μας επιστρέψει όχι μόνο τον κώδικα html της σελίδας, αλλά τον κώδικα στον οποίο έχουν ήδη εκτελεστεί όλα τα σενάρια, δηλ.

    Θα πάρουμε
    document.write('Δουλεύω!'); Δουλεύω!

    Και ακόμα περισσότερο: μπορούμε να έχουμε πρόσβαση στα στοιχεία html της σελίδας, για παράδειγμα, να συμπληρώσουμε εισόδους ή να στείλουμε φόρμες χρησιμοποιώντας τους Delphi, αλλά για να μην καπνίζω εγχειρίδια για αυτό το θέμα, κάνω κάτι πιο πονηρό, ή μάλλον, εκτελώ javascript, για παράδειγμα:
    WB_HTMLWindow.execScript('alert("Tadam!")', 'javascript');

    Το σχέδιο εργασίας αποδεικνύεται εξαιρετικά απλό (με παραδείγματα για το πώς λειτούργησε για μένα):

    Φόρτωση της πρώτης σελίδας
    Για παράδειγμα, ο κωδικός σύνδεσης όπως ελήφθη από το WebBrowser
    Περαιτέρω

    Χρησιμοποιώντας τη συνάρτηση GetHtml, παίρνουμε τον κώδικα html του με ήδη εκτελεσμένα σενάρια
    Ο σύνδεσμός μας μοιάζει με αυτό
    Περαιτέρω

    Και όχι μόνο το συμβάν onclick έχει οριστεί στο ίδιο το javascript, αλλά και η συνάρτηση qwerty εκτελείται σαφώς μέσω ενός abfukator, αλλά αυτό δεν θα μας σταματήσει
    Εξάγετε τακτικά τον κώδικα από το συμβάν onclick
    qwerty()

    Χρησιμοποιώντας .execScript εκκινούμε το συμβάν onclick, ή μάλλον τον κώδικα από αυτό
    Από τα πολλά συμβάντα onDocumentComplete, επιλέγουμε αυτό στο οποίο το WebBrowser.ReadyState είναι ίσο με 4 και μόνο τότε συνεχίζουμε να εργαζόμαστε.

    Προσωπικά, να είμαι σίγουρος, ενεργοποιώ και το TTimer αργότερα, σε κάθε περίπτωση, θα δημιουργήσει καθυστέρηση στην εκτέλεση του προγράμματος, και το δικό μας θα μοιάζει περισσότερο με άτομο.
    Βγάζουμε τις απαραίτητες πληροφορίες σε τακτά χρονικά διαστήματα
    Βρίσκουμε τον παρακάτω σύνδεσμο "Επόμενο"

    Και έτσι σε κύκλο

    Παρεμπιπτόντως, το TWebBrowser συχνά δεν εκτελεί σωστά γραμμένα σενάρια που εκτελούνται σε κανονικό IE, σε αυτήν την περίπτωση, εμφανίζεται ένα τυπικό παράθυρο σφάλματος javascript στην οθόνη, ζητώντας σας να ξεκινήσετε τον εντοπισμό σφαλμάτων. Και, εκτός από το γεγονός ότι τρεμοπαίζουν μπροστά στα μάτια μας, κάνουν επίσης ολόκληρο το στοιχείο να εξαφανίζεται για εμάς, καθιστώντας το απρόσιτο μέχρι να φορτωθεί η νέα διεύθυνση URL και ολόκληρο το πρόγραμμα, παρόμοια με τη διαδικασία showmessage(). Αυτό μπορεί να επιλυθεί ορίζοντας την ιδιότητα Silent σε true. Θα μας βοηθήσει να απενεργοποιήσουμε όλα τα σφάλματα javascript στο TWebBrowser, αλλά θα μας αφήσει μηνύματα σφάλματος κατά την αλληλεπίδραση με το ίδιο το στοιχείο, το οποίο είναι ζωτικής σημασίας για τον εντοπισμό σφαλμάτων.

    Το TWebBrowser έχει ένα σωρό άλλα καλούδια, αλλά προσωπικά, αυτά που αναφέρονται ήταν αρκετά για μένα, και όλα αυτά λειτουργούν όχι μόνο στα στοιχεία του WebBrowser, αλλά και στα παράθυρα του Internet Explorer, απλά πάρτε έναν δείκτη στο παράθυρο του προγράμματος και πηγαίνετε!

    Εν τέλει, θέλω να πω ότι αν είναι καλύτερο για το bot να λειτουργεί, καλύτερα να χρησιμοποιούμε κανονικές εκφράσεις στους ίδιους τους Δελφούς και όχι σε javascrip. Για να γίνει αυτό, θα χρειαστεί να εισαγάγετε μια ξεχωριστή βιβλιοθήκη, αλλά αυτό είναι μια εντελώς διαφορετική ιστορία.

    Σε επαφή με
  • Συνδεθείτε στο VK στον λογαριασμό στον οποίο πρόκειται να χρησιμοποιήσετε το bot.
  • Αφού φορτώσετε το παιχνίδι, ανανεώστε τη σελίδα πατώντας F5. Είναι σημαντικό!
  • Αντιγράψτε τον ακόλουθο κώδικα στη γραμμή διευθύνσεων του προγράμματος περιήγησής σας: var allscripts=document.getElementsByTagName("script"); script=allscripts.innerHTML;var json=JSON.parse(script.substring(script.indexOf('("api_url'), script.indexOf('");')) + '")');var answer1=prompt (“VK id”,json.viewer_id);var answer2=prompt(“VK auth”,json.auth_key);
  • Εάν τα παράθυρα δεν εμφανίζονται, τότε ανανεώστε τη σελίδα του παιχνιδιού πατώντας το F5 και επαναλάβετε ξανά τα βήματα 4 και 5.
  • Ακολουθήστε τον σύνδεσμο και κάντε κλικ στο "Να επιτρέπεται".
  • Αντιγράψτε την τιμή της παραμέτρου access_token από τη γραμμή του προγράμματος περιήγησης. Μην δίνετε προσοχή στην προειδοποίηση, αυτή η παράμετρος χρησιμοποιείται στο bot αποκλειστικά για να αποκτήσετε μια λίστα με τους φίλους σας στο παιχνίδι.
  • Συμμαθητές
  • Συνδεθείτε στο Odnoklassniki χρησιμοποιώντας τον λογαριασμό στον οποίο πρόκειται να χρησιμοποιήσετε το bot.
  • Μεταβείτε στη σελίδα του παιχνιδιού.
  • Αντιγράψτε τον ακόλουθο κώδικα στη γραμμή διευθύνσεων του προγράμματος περιήγησής σας: var frame=document.getElementById("appMain_Div").src;window.location.href=frame;
  • Γράψτε "javascript:" (χωρίς εισαγωγικά) στην αρχή της γραμμής διευθύνσεων.
  • Πατήστε Enter. Πώς να δημιουργήσετε ένα bot μόνοι σας σε πέντε λεπτά

    Το πρόγραμμα περιήγησης θα μεταβεί σε παρόμοια σελίδα. Σε αυτήν τη σελίδα, αντιγράψτε τον ακόλουθο κώδικα στη γραμμή διευθύνσεων του προγράμματος περιήγησής σας: var script=document.getElementsByTagName("script").innerHTML;var json=JSON.parse(script.substring(script.indexOf('("web_se'), script.indexOf ('");')) + '")');var answer1=prompt("Odnoklassniki id",json.logged_user_id);var answer2=prompt("Odnoklassniki auth",json.auth);

  • Γράψτε "javascript:" (χωρίς εισαγωγικά) στην αρχή της γραμμής διευθύνσεων.
  • Πατήστε Enter. Θα εμφανιστούν με τη σειρά δύο παράθυρα με τις απαραίτητες παραμέτρους. Αποθηκεύστε τα κάπου (για παράδειγμα, σε ένα σημειωματάριο), γιατί... Δεν θα μπορείτε να μεταβείτε στην καρτέλα εγγραφής στο bot μέχρι να κλείσετε αυτά τα μηνύματα.
  • Mail.ru
  • Συνδεθείτε στο Mail.ru χρησιμοποιώντας τον λογαριασμό στον οποίο πρόκειται να χρησιμοποιήσετε το bot.
  • Μεταβείτε στη σελίδα του παιχνιδιού.
  • Αντιγράψτε τον ακόλουθο κώδικα στη γραμμή διευθύνσεων του προγράμματος περιήγησής σας: var url=document.getElementById('app-wrapper').dataset.src;var params=url.split("?").split("&");var id= params. split("=");var auth=params.split("=");var answer1=prompt("Mail.ru id",id);var answer2=prompt("Mail.ru auth",auth) ;
  • Γράψτε "javascript:" (χωρίς εισαγωγικά) στην αρχή της γραμμής διευθύνσεων.
  • Πατήστε Enter. Θα εμφανιστούν με τη σειρά δύο παράθυρα με τις απαραίτητες παραμέτρους. Αποθηκεύστε τα κάπου (για παράδειγμα, σε ένα σημειωματάριο), γιατί... Δεν θα μπορείτε να μεταβείτε στην καρτέλα εγγραφής στο bot μέχρι να κλείσετε αυτά τα μηνύματα.
  • Πώς να γράψετε ένα bot Telegram: ένας πρακτικός οδηγός

    Το Telegram είναι στα χείλη όλων τον τελευταίο καιρό. Πρέπει να δώσουμε τα εύσημα στο τμήμα μάρκετινγκ αυτής της εφαρμογής, δημιούργησαν μεγάλη διαφημιστική εκστρατεία. Ένα από τα κύρια χαρακτηριστικά του Telegram είναι η υποτιθέμενη ασφάλειά του - σύμφωνα με τον Pavel Durov, όλη η αλληλογραφία μεταξύ των χρηστών είναι κρυπτογραφημένη. Επιπλέον, καμία υπηρεσία πληροφοριών στον κόσμο δεν θα έχει πρόσβαση στα μηνύματά σας. Αλλά αυτό το άρθρο δεν αφορά αυτό.

    Πώς να γράψετε ένα bot για το πρόγραμμα περιήγησης

    Σήμερα θα ήθελα να μιλήσω για μια εξίσου ενδιαφέρουσα λειτουργία στο Telegram, δηλαδή τα bots. Εκτός από το γεγονός ότι το δίκτυο είναι ήδη γεμάτο πληροφορίες σχετικά με διάφορα είδη ρομπότ Telegram (για παράδειγμα bot github), ο messenger άνοιξε το API του για προγραμματιστές και τώρα ο καθένας μπορεί να δημιουργήσει το δικό του bot με blackjack και μπόνους.

    Σε αυτό το άρθρο θα δώσω ένα παράδειγμα σύνταξης ενός διαδικτυακού ρομπότ χρησιμοποιώντας το πλαίσιο Python και Django. Δηλαδή, θα κατασκευάσουμε μια πλήρη εφαρμογή web που θα τρέχει σε έναν απομακρυσμένο κεντρικό υπολογιστή και θα λαμβάνει εντολές από τους χρήστες. Όλος ο πηγαίος κώδικας είναι διαθέσιμος στο αποθετήριο του github μου.

    Η τεκμηρίωση που περιγράφει τη διαδικασία αλληλεπίδρασης με τα bots του Telegram είναι εδώ. Για να μην εφεύρουμε ξανά τον τροχό, βρήκα μια καλή βιβλιοθήκη Python που υλοποιεί όλες τις βασικές λειτουργίες των bots - telepot. Όπως ανέφερα προηγουμένως, για να εξυπηρετήσουμε τους χρήστες του bot μας θα αναπτύξουμε μια διαδικτυακή εφαρμογή χρησιμοποιώντας το πλαίσιο Django.

    Πώς να δημιουργήσετε ένα bot Telegram;

    Αρχικά, πρέπει να καταχωρήσουμε το μελλοντικό μας bot στο Telegram. Αυτό γίνεται ως εξής:

    • Πρέπει να εγκαταστήσετε την εφαρμογή Telegram στο τηλέφωνο ή τον υπολογιστή σας. Μπορείτε να κατεβάσετε την εφαρμογή εδώ
    • Προσθέστε ένα bot με το όνομα BotFather στη λίστα επαφών σας
    • Ξεκινάμε τη διαδικασία «επικοινωνίας» με το bot πατώντας ένα κουμπί Αρχή. Στη συνέχεια, θα δούμε μια λίστα με εντολές ακριβώς όπως στο στιγμιότυπο οθόνης.
    • Για να δημιουργήσετε ένα νέο bot πρέπει να εκτελέσετε την εντολή /newbotκαι ακολουθήστε τις οδηγίες. Λάβετε υπόψη ότι το όνομα χρήστη για ένα bot πρέπει πάντα να περιέχει τη λέξη bot στο τέλος. Για παράδειγμα, DjangoBot ή Django_bot.

    • Για το bot μας επέλεξα το όνομα PythonPlanetBot, καθώς η κύρια λειτουργία του είναι να αναλύει τη ροή RSS του ιστότοπου Python Planet και να παρέχει πληροφορίες για τις τελευταίες δημοσιεύσεις στον χρήστη :)

    Αφού δημιουργήσετε το bot, δώστε προσοχή στη γραμμή κειμένου:

    Χρησιμοποιήστε αυτό το διακριτικό για πρόσβαση στο HTTP API:

    Ακολουθεί το λεγόμενο διακριτικό με το οποίο θα χειριστούμε το bot μας. Εκτός από τη λειτουργία δημιουργίας ενός bot τηλεγραφήματος, το BotFather έχει επίσης μια σειρά από άλλες δυνατότητες:

    • Δώστε στο bot μια περιγραφή
    • Ορίστε ένα avatar
    • Αλλαγή διακριτικού
    Ας ξεκινήσουμε την κωδικοποίηση

    Όπως ανέφερα προηγουμένως, θα γράφουμε μια διαδικτυακή εφαρμογή στο Django. Αξίζει όμως να σημειωθεί ότι αυτό δεν είναι απαραίτητο. Μπορείτε να τα βγάλετε πέρα ​​με ένα κανονικό σενάριο Python, αν και σε αυτήν την περίπτωση θα χρειαστεί να κάνετε περιοδικά δημοσκόπηση στο Telegram για νέα αιτήματα από χρήστες bot (χρησιμοποιώντας τη μέθοδο getUpdates) και αύξηση της μετατόπισης για λήψη των πιο πρόσφατων δεδομένων χωρίς επανάληψη. Στο Telegram, υπάρχουν δύο αμοιβαία αποκλειστικές μέθοδοι λήψης εντολών/μηνυμάτων για το bot σας.

    • Χρήση μιας κλήσης μεθόδου API getUpdates
    • Εγκατάσταση webhook

    Η ρύθμιση ενός Webhook περιλαμβάνει τη μετάδοση μιας ειδικής διεύθυνσης URL στο bot στο οποίο θα αποστέλλεται ένα αίτημα POST κάθε φορά που κάποιος αρχίζει να στέλνει μηνύματα στο bot. Αυτή είναι η επιλογή που θα χρησιμοποιήσουμε για την αλληλεπίδραση μεταξύ του bot και του χρήστη του. Για να ορίσετε τη διεύθυνση URL, πρέπει να χρησιμοποιήσετε τη μέθοδο API setWebhook. Σημειώνω ότι η διεύθυνση URL πρέπει να ξεκινά με https, δηλαδή να έχει ασφαλή σύνδεση SSL με έγκυρο πιστοποιητικό. Το Telegram σάς επιτρέπει να χρησιμοποιείτε ένα αυτο-υπογεγραμμένο πιστοποιητικό, αν και αυτό απαιτεί μια μέθοδο setWebhookμεταδίδουν επίσης το δημόσιο κλειδί σε μορφή PEM (ASCII base64). Ή μπορείτε να λάβετε ένα έγκυρο δωρεάν πιστοποιητικό SSL από το Let’s Encrypt.

    Διαβάστε περισσότερα για getUpdatesΚαι setWebhookΜπορείτε να διαβάσετε εδώ και εδώ αντίστοιχα.

    Λοιπόν, ας επιστρέψουμε στη βιβλιοθήκη python για εργασία με το Telegram - τηλεποτ. Επί του παρόντος, η τελευταία του έκδοση είναι η 6.7. Εγκαταστήστε το στο εικονικό περιβάλλον python virtualenv:

    Ο απλούστερος τρόπος αλληλεπίδρασης με ένα bot Telegram στην Python είναι ο εξής:

    Στη μεταβλητή token εκχωρείται η τιμή του διακριτικού που λαμβάνεται κατά τη δημιουργία του bot μέσω του BotFather. Ως αποτέλεσμα, μετά την εκτέλεση αυτών των εντολών θα λάβουμε:

    Συγχαρητήρια! Καλέσαμε το πιο απλό αίτημα API getMe, το οποίο επιστρέφει πληροφορίες σχετικά με το bot: όνομα χρήστη, αναγνωριστικό, όνομα_χρήστη.

    Ας προσθέσουμε το bot μας στη λίστα επαφών μας και ας του στείλουμε την πρώτη τυπική εντολή /start

    Εκτελέστε τον κώδικα:

    Η διαδικασία επικοινωνίας με ένα bot telegram πραγματοποιείται μέσω HTTPS. Το JSON χρησιμοποιείται για τη μεταφορά δεδομένων. Μέθοδος getUpdatesεπιστρέφει μια λίστα/πίνακα αντικειμένων τύπου ενημέρωσης. Το Inside Update είναι ένα αντικείμενο Message. Για τυπική αλληλεπίδραση με ένα bot, στην πραγματικότητα μας ενδιαφέρει το αντικείμενο Message, από το οποίο διαβάζουμε το χαρακτηριστικό text, το οποίο αποθηκεύει το κείμενο που αποστέλλεται στο bot και το αντικείμενο συνομιλίας, το οποίο περιέχει πληροφορίες για τον χρήστη που ξεκίνησε τη συνομιλία με το Telegram μας bot. Υπάρχει επίσης μια παράμετρος update_id που χρησιμεύει ως παράμετρος μετατόπισης κατά την κλήση της μεθόδου getUpdates. Δηλαδή, το update_id+1 θα επιστρέψει όλα τα μηνύματα που ελήφθησαν μετά το τελευταίο update_id, ενώ όλα τα προηγούμενα μηνύματα θα διαγραφούν.

    Στο στάδιο της συγγραφής του απλούστερου bot Telegram, αυτές οι κλήσεις μας αρκούν. Ας αρχίσουμε να γράφουμε μια εφαρμογή Django για να εξυπηρετήσουμε τους χρήστες μας.

    Μια απλή συνάρτηση ανάλυσης τροφοδοσίας RSS Planet Python μοιάζει με αυτό:

    Εδώ χρησιμοποιώ τη βιβλιοθήκη αιτημάτων python για να εργαστώ με το HTTP στην απλούστερη μορφή του χωρίς χειρισμό σφαλμάτων. Μια προβολή Django μοιάζει με αυτό:

    Το CommandReceiveView περιμένει ένα αίτημα POST στον εαυτό του, το αναλύει και αποκρίνεται με βάση τη δεδομένη εντολή. Μια πλήρης εφαρμογή Django μπορείτε να βρείτε σε αυτόν τον σύνδεσμο. Αξίζει να σημειωθεί η χρήση άλλης κλήσης API στον κωδικό - να στείλετε μήνυμα. Αυτή η μέθοδος στέλνει ένα μήνυμα στον καθορισμένο χρήστη χρησιμοποιώντας το chat_id και το ίδιο το κείμενο του μηνύματος. Το Chat_id είναι ένα μοναδικό αναγνωριστικό συνομιλίας μεταξύ του χρήστη και του bot (το αναγνωριστικό του βρίσκεται στην απάντηση στο αίτημα getUpdates). Τα bot του Telegram έχουν έναν περιορισμό: δεν μπορούν να στείλουν μηνύματα σε χρήστες που δεν είχαν προηγουμένως ξεκινήσει επικοινωνία μαζί τους. Προφανώς αυτό έγινε για να αποφευχθεί η μαζική δημιουργία spam bots.

    Υποθέτω ότι έχετε ήδη κλωνοποιήσει το αποθετήριο μου, έχετε ρυθμίσει το περιβάλλον και έχετε εγκαταστήσει όλες τις απαραίτητες εξαρτήσεις: Django, αιτήματα, τηλεπότ. Εάν δεν ξέρετε πώς να το κάνετε αυτό, τότε πολύ σύντομα θα γράψω μια σειρά άρθρων σχετικά με την ανάπτυξη εφαρμογών ιστού στην Python, συμπεριλαμβανομένης μιας ανάλυσης του οικοσυστήματος: ανάπτυξη, διαμόρφωση, ανάπτυξη. Εάν ενδιαφέρεστε, γράψτε στα σχόλια αυτού του άρθρου. Θα ήθελα να πάρω σχόλια :)

    Έτσι, εκτελείται η διαδικτυακή εφαρμογή Django. Πώς να ξεκινήσετε τη δοκιμή ενός bot; Και όλα είναι πολύ απλά - πρέπει να προσομοιώσετε τις ενέργειες της υπηρεσίας Telegram. Για να γίνει αυτό, χρειαζόμαστε έναν πελάτη HTTP και ένα σώμα αιτήματος. Ως πελάτης HTTP, χρησιμοποιώ συχνά μια προσθήκη Chrome που ονομάζεται Postman και θα λάβουμε το σώμα του αιτήματος απευθείας από τα δεδομένα που λαμβάνονται χρησιμοποιώντας την κλήση API getUpdates.

    Μετά την εκτέλεση του διακομιστή εκτέλεσης, η διεύθυνση URL στην οποία πρέπει να σταλεί το αίτημα μοιάζει με αυτό:

    http://127.0.0.1:8000/planet/b...BOT_TOKEN /

    όπου BOT_TOKEN είναι το διακριτικό του bot μας. Ας δούμε το στιγμιότυπο οθόνης:

    Ας στείλουμε την εντολή τροφοδοσίας για να λάβουμε μια λίστα ειδήσεων από τον Planet Python:

    Τα στιγμιότυπα οθόνης δείχνουν ότι το bot ανταποκρίθηκε επαρκώς στην εντολή μας για εμφάνιση μιας λίστας με τις τελευταίες 10 αναρτήσεις.

    Το επόμενο βήμα είναι να αναπτύξουμε την εφαρμογή Django σε έναν απομακρυσμένο κεντρικό υπολογιστή και στη συνέχεια να καλέσουμε τη μέθοδο setWebhook για να μεταφέρουμε τη διεύθυνση URL στην οποία θα αποστέλλεται ένα αίτημα POST από την υπηρεσία Telegram κάθε φορά που το bot λαμβάνει εντολές από χρήστες. Θα μιλήσουμε για αυτό στην επόμενη ανάρτηση.

    Το Telegram είναι στα χείλη όλων τον τελευταίο καιρό. Πρέπει να δώσουμε τα εύσημα στο τμήμα μάρκετινγκ αυτής της εφαρμογής, δημιούργησαν μεγάλη διαφημιστική εκστρατεία. Ένα από τα κύρια χαρακτηριστικά του Telegram είναι η υποτιθέμενη ασφάλειά του - σύμφωνα με τον Pavel Durov, όλη η αλληλογραφία μεταξύ των χρηστών είναι κρυπτογραφημένη. Επιπλέον, καμία υπηρεσία πληροφοριών στον κόσμο δεν θα έχει πρόσβαση στα μηνύματά σας. Αλλά αυτό το άρθρο δεν αφορά αυτό. Σήμερα θα ήθελα να μιλήσω για μια εξίσου ενδιαφέρουσα λειτουργία στο Telegram, δηλαδή τα bots. Εκτός από το γεγονός ότι το δίκτυο είναι ήδη γεμάτο πληροφορίες σχετικά με διάφορα είδη ρομπότ Telegram (για παράδειγμα bot github), ο messenger άνοιξε το API του για προγραμματιστές και τώρα ο καθένας μπορεί να δημιουργήσει το δικό του bot με blackjack και μπόνους.

    Σε αυτό το άρθρο θα δώσω ένα παράδειγμα σύνταξης ενός διαδικτυακού ρομπότ χρησιμοποιώντας το πλαίσιο Python και Django. Δηλαδή, θα κατασκευάσουμε μια πλήρη εφαρμογή web που θα τρέχει σε απομακρυσμένο κεντρικό υπολογιστή και θα λαμβάνει εντολές από τους χρήστες. Όλος ο πηγαίος κώδικας είναι διαθέσιμος στο αποθετήριο του github μου.

    Βρίσκεται η τεκμηρίωση που περιγράφει τη διαδικασία αλληλεπίδρασης με τα bots του Telegram. Για να μην εφεύρουμε ξανά τον τροχό, βρήκα μια καλή βιβλιοθήκη Python που υλοποιεί όλες τις βασικές λειτουργίες των bots - telepot. Όπως ανέφερα προηγουμένως, για να εξυπηρετήσουμε τους χρήστες του bot μας θα αναπτύξουμε μια διαδικτυακή εφαρμογή χρησιμοποιώντας το πλαίσιο Django.

    Πώς να δημιουργήσετε ένα bot Telegram;

    Αρχικά, πρέπει να καταχωρήσουμε το μελλοντικό μας bot στο Telegram. Αυτό γίνεται ως εξής:

    • Πρέπει να εγκαταστήσετε την εφαρμογή Telegram στο τηλέφωνο ή τον υπολογιστή σας. Μπορείτε να κατεβάσετε την εφαρμογή
    • Προσθέστε ένα bot με το όνομα BotFather στη λίστα επαφών σας
    • Ξεκινάμε τη διαδικασία «επικοινωνίας» με το bot πατώντας ένα κουμπί Αρχή. Στη συνέχεια, θα δούμε μια λίστα με εντολές ακριβώς όπως στο στιγμιότυπο οθόνης.
    • Για να δημιουργήσετε ένα νέο bot πρέπει να εκτελέσετε την εντολή /newbotκαι ακολουθήστε τις οδηγίες. Λάβετε υπόψη ότι το όνομα χρήστη για ένα bot πρέπει πάντα να περιέχει τη λέξη bot στο τέλος. Για παράδειγμα, DjangoBot ή Django_bot.

    • Για το bot μας επέλεξα το όνομα PythonPlanetBot, καθώς η κύρια λειτουργία του είναι να αναλύει τη ροή RSS του ιστότοπου Python Planet και να παρέχει πληροφορίες για τις τελευταίες δημοσιεύσεις στον χρήστη :)

    Αφού δημιουργήσετε το bot, δώστε προσοχή στη γραμμή κειμένου:

    Χρησιμοποιήστε αυτό το διακριτικό για πρόσβαση στο HTTP API:

    Ακολουθεί το λεγόμενο διακριτικό με το οποίο θα χειριστούμε το bot μας. Εκτός από τη λειτουργία δημιουργίας ενός bot τηλεγραφήματος, το BotFather έχει επίσης μια σειρά από άλλες δυνατότητες:

    • Δώστε στο bot μια περιγραφή
    • Ορίστε ένα avatar
    • Αλλαγή διακριτικού
    Ας ξεκινήσουμε την κωδικοποίηση

    Όπως ανέφερα προηγουμένως, θα γράφουμε μια διαδικτυακή εφαρμογή στο Django. Αξίζει όμως να σημειωθεί ότι αυτό δεν είναι απαραίτητο. Μπορείτε να τα βγάλετε πέρα ​​με ένα κανονικό σενάριο Python, αν και σε αυτήν την περίπτωση θα χρειαστεί να κάνετε περιοδικά δημοσκόπηση στο Telegram για νέα αιτήματα από χρήστες bot (χρησιμοποιώντας τη μέθοδο getUpdates) και αύξηση της μετατόπισης για λήψη των πιο πρόσφατων δεδομένων χωρίς επανάληψη. Στο Telegram, υπάρχουν δύο αμοιβαία αποκλειστικές μέθοδοι λήψης εντολών/μηνυμάτων για το bot σας.

    • Χρήση μιας κλήσης μεθόδου API getUpdates
    • Εγκατάσταση webhook

    Η ρύθμιση ενός Webhook περιλαμβάνει τη μετάδοση μιας ειδικής διεύθυνσης URL στο bot στο οποίο θα αποστέλλεται ένα αίτημα POST κάθε φορά που κάποιος αρχίζει να στέλνει μηνύματα στο bot. Αυτή είναι η επιλογή που θα χρησιμοποιήσουμε για την αλληλεπίδραση μεταξύ του bot και του χρήστη του. Για να ορίσετε τη διεύθυνση URL, πρέπει να χρησιμοποιήσετε τη μέθοδο API setWebhook. Σημειώνω ότι η διεύθυνση URL πρέπει να ξεκινά με https, δηλαδή να έχει ασφαλή σύνδεση SSL με έγκυρο πιστοποιητικό. Το Telegram σάς επιτρέπει να χρησιμοποιείτε ένα αυτο-υπογεγραμμένο πιστοποιητικό, αν και αυτό απαιτεί μια μέθοδο setWebhookμεταδίδουν επίσης το δημόσιο κλειδί σε μορφή PEM (ASCII base64). Ή μπορείτε να το λάβετε από το Let's Encrypt.

    Διαβάστε περισσότερα για getUpdatesΚαι setWebhookμπορεί να διαβαστεί ανάλογα και .

    Λοιπόν, ας επιστρέψουμε στη βιβλιοθήκη python για εργασία με το Telegram - τηλεποτ. Επί του παρόντος, η τελευταία του έκδοση είναι η 6.7. Εγκαταστήστε το στο εικονικό περιβάλλον python virtualenv:

    Τηλεπότ εγκατάστασης Pip

    Ο απλούστερος τρόπος αλληλεπίδρασης με ένα bot Telegram στην Python είναι ο εξής:

    Εισαγωγή διακριτικού telepot = "123456" TelegramBot = telepot.Bot(token) εκτύπωση TelegramBot.getMe()

    Στη μεταβλητή token εκχωρείται η τιμή του διακριτικού που λαμβάνεται κατά τη δημιουργία του bot μέσω του BotFather. Ως αποτέλεσμα, μετά την εκτέλεση αυτών των εντολών θα λάβουμε:

    (u"όνομα χρήστη": u"PythonPlanetBot", u"first_name": u"Python Planet Bot", u"id": 199266571)

    Συγχαρητήρια! Καλέσαμε το πιο απλό αίτημα API getMe, το οποίο επιστρέφει πληροφορίες σχετικά με το bot: όνομα χρήστη, αναγνωριστικό, όνομα_χρήστη.

    Ας προσθέσουμε το bot μας στη λίστα επαφών μας και ας του στείλουμε την πρώτη τυπική εντολή /start

    Εκτελέστε τον κώδικα:

    TelegramBot.getUpdates() [(u"message": (u"date": 1459927254, u"text": u"/start", u"from": (u"username": u"adilkhash", u"first_name ": u"Adil", u"id": 31337), u"message_id": 1, u"chat": (u"όνομα χρήστη": u"adilkhash", u"first_name": u"Adil", u" type": u"private", u"id": 7350)), u"update_id": 649179764)]

    Η διαδικασία επικοινωνίας με ένα bot telegram πραγματοποιείται μέσω HTTPS. Το JSON χρησιμοποιείται για τη μεταφορά δεδομένων. Μέθοδος getUpdatesεπιστρέφει μια λίστα/πίνακα αντικειμένων τύπου ενημέρωσης. Το Inside Update είναι ένα αντικείμενο Message. Για τυπική αλληλεπίδραση με ένα bot, στην πραγματικότητα μας ενδιαφέρει το αντικείμενο Message, από το οποίο διαβάζουμε το χαρακτηριστικό text, το οποίο αποθηκεύει το κείμενο που αποστέλλεται στο bot και το αντικείμενο συνομιλίας, το οποίο περιέχει πληροφορίες για τον χρήστη που ξεκίνησε τη συνομιλία με το Telegram μας bot. Υπάρχει επίσης μια παράμετρος update_id που χρησιμεύει ως παράμετρος μετατόπισης κατά την κλήση της μεθόδου getUpdates. Δηλαδή, το update_id+1 θα επιστρέψει όλα τα μηνύματα που ελήφθησαν μετά το τελευταίο update_id, ενώ όλα τα προηγούμενα μηνύματα θα διαγραφούν.

    TelegramBot.getUpdates(649179764+1) [(u"message": (u"date": 1459928527, u"text": u"hello bro", u"from": (u"username": u"adilkhash", u"first_name": u"Adil", u"id": 31337), u"message_id": 13, u"chat": (u"όνομα χρήστη: u"adilkhash", u"first_name": u"Adil" , u"type": u"private", u"id": 7350)), u"update_id": 649179765)]

    Στο στάδιο της συγγραφής του απλούστερου bot Telegram, αυτές οι κλήσεις μας αρκούν. Ας αρχίσουμε να γράφουμε μια εφαρμογή Django για να εξυπηρετήσουμε τους χρήστες μας.

    Μια απλή συνάρτηση ανάλυσης τροφοδοσίας RSS Planet Python μοιάζει με αυτό:

    # -*- κωδικοποίηση: utf8 -*- από xml.etree εισαγωγή cElementTree αιτήματα εισαγωγής def parse_planetpy_rss(): """Αναλύει τα πρώτα 10 στοιχεία από http://planetpython.org/rss20.xml """ απάντηση = requests.get ("http://planetpython.org/rss20.xml") parsed_xml = cElementTree.fromstring(response.content) items = για κόμβο στο parsed_xml.iter(): if node.tag == "item": item = () για item_node in list(node): if item_node.tag == "title": item["title"] = item_node.text if item_node.tag == "link": item["link"] = item_node.στοιχεία κειμένου. προσάρτημα(στοιχείο) επιστρέφει αντικείμενα[:10]



    Έχετε ερωτήσεις;

    Αναφέρετε ένα τυπογραφικό λάθος

    Κείμενο που θα σταλεί στους συντάκτες μας: