Το προφίλ μας στο Google Plus
1

Φτιάξτε το δικό σας TweetBot

Τα bots θα μπορούσαν να χαρακτηριστούν ως οι δεύτεροι σε δραστηριότητα χρήστες του Διαδικτύου — μετά τους ανθρώπους. Η συνεισφορά τους σε όλο αυτό το κατασκεύασμα που αποκαλούμε web, δεν είναι διόλου ευκαταφρόνητη. Μολαταύτα, λόγω της κακόβουλης χρήσης τους από επιτήδειους, η έννοια του bot έχει από καιρό στιγματιστεί. Κόντρα σ’ αυτή την αντίληψη, στο παρόν άρθρο φτιάχνουμε ένα bot το οποίο με τίποτε δεν θα μπορεί να χρησιμοποιηθεί κακόβουλα.

Για τους πέντε ή έξι αναγνώστες του περιοδικού που δεν γνωρίζουν τι είναι τα bots, να πούμε ότι πρόκειται για προγράμματα που υφίστανται σε συστήματα συνδεδεμένα στο Διαδίκτυο και που εκτελούν διάφορες λειτουργίες, μερικές φορές μιμούμενα τον τρόπο χρήσης του ιστού από τους ανθρώπους. Τα πιο γνωστά και χρήσιμα bots είναι τα λεγόμενα spiders, δηλαδή τα προγράμματα των μηχανών αναζήτησης (κι όχι μόνο) που διατρέχουν τον ιστό μεταβαίνοντας από link σε link, φτιάχνοντας έτσι ένα ευρετήριο των σελίδων που συναντούν στην πορεία τους.

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

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

Το πουλάκι τσίου
Τα bots δραστηριοποιούνται είτε γενικότερα στον ιστό, είτε ειδικότερα σε μια κατηγορία σελίδων (π.χ. fora), είτε ακόμα πιο ειδικά, σε ένα συγκεκριμένο δικτυακό τόπο. Το Twitter είναι ένας από αυτούς τους τόπους, στον οποίο δραστηριοποιούνται και bots. Βλέπετε, η δημοφιλής πλατφόρμα κοινωνικής δικτύωσης δεν διαθέτει μόνο ανθρώπους ως χρήστες, αλλά και μηχανές. Οι μηχανές (bots) που το χρησιμοποιούν, όπως ακριβώς και οι άνθρωποι, είτε διαβάζουν tweets είτε δημοσιεύουν νέα tweets. Όμως για ποιους λόγους να δημιουργήσει κάποιος ένα bot για το Twitter; Ο πιο απλός που μας έρχεται στο νου, είναι για να εκτελεί αυτοματοποιημένες δημοσιεύσεις. Αυτές τις δημοσιεύσεις είτε θα τις έχει προετοιμάσει ο χρήστης του bot είτε θα δημιουργούνται αυτόματα, μετά από έλεγχο συνθηκών στο Internet ή/και στον πραγματικό κόσμο (ακούστηκε κάποιος να ψιθυρίζει “Internet of things” ή μου φάνηκε;)

Ένας τρόπος προκειμένου να φτιάξουμε το bot μας για το Twitter, είναι με την αξιοποίηση του Twitter API. Πρόσβαση στο API αποκτάμε αφού συνδεθούμε στο λογαριασμό μας στο Twitter και μεταβούμε στη διεύθυνση https://apps.twitter.com. Εκεί, δημιουργούμε μια νέα εφαρμογή πατώντας στο κουμπί Create New App. Αμέσως παρουσιάζεται μια νέα σελίδα και μας ζητείται να δώσουμε πληροφορίες σχετικές με την εφαρμογή: το όνομά της, μια μικρή περιγραφή της λειτουργίας της, το URL του website απ’ όπου οι ενδιαφερόμενοι θα μπορούν να την κατεβάζουν κ.ά.

Η εφαρμογή που τώρα φτιάχνουμε δεν προορίζεται για το ευρύ κοινό αλλά μόνον για εμάς. Έτσι, ως website μπορούμε να δώσουμε ό,τι θέλουμε. Εμείς, εντελώς τυχαία, ως site ορίσαμε το https://www.deltahacker.gr, ως τίτλο το “delta agent” κι ως περιγραφή δώσαμε το “Our post machine”. Όπως καταλαβαίνετε, λίγη σημασία έχουν όλα αυτά. Η ουσία της υπόθεσης βρίσκεται στη σελίδα της εφαρμογής, η οποία είναι διαθέσιμη αφού τελειώσουμε με την καταχώρηση των προαναφερθέντων πληροφοριών.

Συγκεκριμένα, πηγαίνουμε στην τελευταία καρτέλα, με τίτλο Permissions, και σιγουρευόμαστε ότι είναι επιλεγμένο το Read and Write. Κάθε φορά που κάνουμε κάποια αλλαγή σ’ αυτήν την καρτέλα, την επικυρώνουμε με κλικ στο κουμπί Update Settings. Αμέσως μετά μεταβαίνουμε στην καρτέλα Keys and Access Tokens. Σημειώνουμε τα αλφαριθμητικά που αντιστοιχούν στα Consumer Key και Consumer Secret. Πηγαίνουμε λίγο πιο κάτω κι επιλέγουμε τη δημιουργία Access Tokens πατώντας στο κουμπί Generate My Access Token and Token Secret. Σημειώνουμε τα νέα αλφαριθμητικά που δημιουργούνται. Τώρα, όσον αφορά στο κομμάτι της προετοιμασίας του Twitter, έχουμε τελειώσει. Σειρά έχουν πιο ευχάριστα και διασκεδαστικά πράγματα. Ναι, καλά το καταλάβατε, είναι ώρα να περάσουμε στο κομμάτι του προγραμματισμού.

Η δημιουργία της εφαρμογής μας μέσα από το λιτό περιβάλλον του Twitter, αποτελεί απλή διαδικασία. Την προσοχή μας αξίζουν οι πληροφορίες που βρίσκονται στην καρτέλα Keys and Access Tokens, καθώς είναι μέγιστης σημασίας για τη λειτουργία του bot.

Η δημιουργία της εφαρμογής μας μέσα από το λιτό περιβάλλον του Twitter, αποτελεί απλή διαδικασία. Την προσοχή μας αξίζουν οι πληροφορίες που βρίσκονται στην καρτέλα Keys and Access Tokens, καθώς είναι μέγιστης σημασίας για τη λειτουργία του bot.

Εν αρχή ην ο λόγος
Προκειμένου να συνδιαλεχθούμε προγραμματιστικά με το Twitter, αποφασίζουμε να χρησιμοποιήσουμε την αγαπημένη μας Python. Για καλή μας τύχη, για τη συγκεκριμένη γλώσσα υπάρχει μια βιβλιοθήκη, η tweepy, η οποία αναλαμβάνει όλη τη βρώμικη δουλειά της επικοινωνίας με το Twitter API, μέσα από ορισμένες βολικές συναρτήσεις. Στο δικτυακό τόπο της tweepy, στο http://www.tweepy.org, βρίσκουμε και την πλήρη τεκμηρίωση της πλούσιας αυτής βιβλιοθήκης.

Για την εγκατάστασή της υπάρχουν διάφορες εναλλακτικές. Η ευκολότερη είναι μέσω του συστήματος pip, η χρήση του οποίου περιγράφεται στο άρθρο του γράφοντα “Βγάλτε βόλτα την Python”, στο τεύχος 034 του περιοδικού. Αν τώρα συγκαταλέγεστε στους 2-3 αναγνώστες από το Ανατολικό Τιμόρ, οι οποίοι δεν διάβασαν το εν λόγω τεύχος κι έτσι δεν έχουν το pip εγκατεστημένο, είναι ώρα να κάνετε κάτι επ’ αυτού. Συγκεκριμένα, κατεβάστε το get-pip.py από το https://bootstrap.pypa.io/get-pip.py κι εκτελέστε το με τον διερμηνέα της Python. Στο σύστημά μας, ένα ηρωικό και καταταλαιπωρημένο Raspberry Pi, όλα αυτά τα πετύχαμε δίνοντας, διαδοχικά:

wget --no-check-certificate https://bootstrap.pypa.io/get-pip.py
python get-pip.py

Στη συνέχεια προχωρήσαμε στην εγκατάσταση της tweepy, εννοείται μέσω του pip:

pip install tweepy

Και ναι, καλά το καταλάβατε, το bot μας θα ζει και θ’ αναπνέει μέσα σ’ ένα Raspberry Pi. Ο λόγος είναι προφανής, καθώς επιθυμούμε να εκτελείται αδιάλειπτα, δίχως τη δική μας παρουσία, με τη μικρότερη δυνατή κατανάλωση ενέργειας. Οπότε τι καλύτερο από την τοποθέτησή του στο πάντοτε ανοικτό και σκληρά εργαζόμενο Pi μας, το οποίο μάλιστα μετράει αρκετούς μήνες uptime;

Στη σειρά σας, παρακαλώ!
Αφού καταλήξαμε στο περιβάλλον και στον τρόπο εργασίας, ας δούμε και τι ακριβώς θέλουμε να κάνει το bot. Για αρχή θα ασχοληθούμε με κάτι πιο απλοϊκό, όπως η αυτοματοποιημένη δημιουργία αναρτήσεων. Τα tweets, το bot θα τα διαβάζει από ένα αρχείο και θα τα αναρτά την ώρα που είναι ρυθμισμένο το κάθε ένα. Για να το πετύχουμε αυτό, στο αρχείο θα βρίσκονται τα tweets ένα ένα σε κάθε γραμμή, ενώ οι γραμμές θα είναι χωρισμένες σε δύο μέρη, μεταξύ των οποίων θα υπάρχει ένας χαρακτήρας tab. Στο πρώτο μέρος κάθε γραμμής θα βρίσκεται η ημερομηνία και ώρα που επιθυμούμε να γίνει το post, στη μορφή “εεεε,μμ,ηη,ωω,λλ” (“εεεε” είναι το έτος, “μμ” ο μήνας, “ηη” η μέρα, “ωω” η ώρα και “λλ” τα λεπτά). Στο δεύτερο τμήμα θα βρίσκεται το κείμενο του tweet. Το bot μας θα εκτελείται ανά τακτά χρονικά διαστήματα με έναν κανόνα που θα ορίσουμε ως cron job του συστήματος. Το μέγεθος του διαστήματος εξαρτάται από τις ανάγκες μας, δηλαδή από το πόσο συχνά και με πόση χρονική ακρίβεια θέλουμε να ενεργοποιείται η διαδικασία της ανάρτησης των δημοσιεύσεών μας. Για μεγαλύτερη ακρίβεια μπορούμε να ζητάμε την εκτέλεση του script κάθε λεπτό, ενώ μια πιο φυσιολογική τιμή (για τις δικές μας ανάγκες, τέλος πάντων) πιστεύουμε ότι είναι η μία ώρα. Το bot μας θα εξετάζει τις γραμμές του αρχείου και θα συγκρίνει την τρέχουσα ώρα με την εκάστοτε προγραμματισμένη. Αν αυτή είναι ίδια ή έχει ξεπεραστεί, θα προβαίνει στην ανάρτηση του αντίστοιχου tweet. Στη συνέχεια θα αφαιρεί τις συγκεκριμένες γραμμές από το αρχείο και θα τερματίζει τη λειτουργία του μέχρι την επόμενη εκτέλεσή του. Ας τα δούμε όμως όλα αυτά στην πράξη, εξετάζοντας τον κώδικα που γράψαμε (οι αριθμοί γραμμών δεν υπάρχουν στον κώδικα αλλά έχουν προστεθεί εδώ για ευκολία στην αναφορά).

#!/usr/bin/python
from datetime import datetime
import tweepy
import time

consumer_key = "fgsbf53dafbafd35saf" 
consumer_secret = "ghd43tftjuu9yygf6"
access_token = "26488189-5464yty554fdth554ser" 
access_token_secret = "r534dsrgds4yhr5yds"

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

api = tweepy.API(auth)

tweets_file_path = "/home/pi/tweets.txt"
tweets_file = open(tweets_file_path, "r")
tweets_list = tweets_file.readlines()
tweets_file.close()

tweets_new_list = ""

for tweet_line in tweets_list:
    tweet = tweet_line.split("\t", 1)
    tweet_time_list = tweet[0].split(",", 5)
    tweet_time = datetime(int(tweet_time_list[0]),
                             int(tweet_time_list[1]),
                             int(tweet_time_list[2]),
                             int(tweet_time_list[3]),
                             int(tweet_time_list[4]))
    tweet_text = tweet[1]
    now_time = datetime.now()
    print (tweet_time - now_time).total_seconds() 
    if((tweet_time - now_time).total_seconds() <= 0):
        time.sleep(10)
        api.update_status(tweet_text)
    else:
        tweets_new_list = tweets_new_list + tweet_line

tweets_file = open(tweets_file_path, "w")
tweets_file.write(tweets_new_list)
tweets_file.close()

Τον κώδικα μπορείτε να κατεβάσετε από το http://bit.ly/dh052tbot1. Στη δεύτερη γραμμή εισάγουμε το αντικείμενο datetime από την ομώνυμη βιβλιοθήκη, το οποίο και θα μας χρειαστεί στη συνέχεια για τη σύγκριση της τρέχουσας ημερομηνίας με την επιθυμητή ημερομηνία ανάρτησης κάθε tweet. Στη συνέχεια εισάγουμε τη βιβλιοθήκη tweepy και, κλείνοντας με τις εισαγωγές, την time, η οποία με τη συνάρτηση sleep(s) θα μας βοηθήσει να ορίζουμε μια μικρή παύση ύστερα από κάθε ανάρτηση, ώστε αν ακολουθεί κι άλλη να υπάρχει ένα μικρό περιθώριο για τη διαχείρισή τους από πλευράς Twitter. Φυσικά, μπορούμε αν θέλουμε να ορίσουμε ακόμα μεγαλύτερο διάστημα — πάντα με βάση τις ανάγκες μας και τον σκοπό που θέλουμε να επιτύχουμε.

Στις γραμμές 06 έως και 09 έχουμε μια σειρά δηλώσεων μεταβλητών string, οι οποίες συγκρατούν τα νευραλγικά security keys και tokens της εφαρμογής αλλά και του λογαριασμού μας, μέσω των οποίων θα μας επιτραπούν η επικοινωνία με το timeline καθώς και η διαχείρισή του. Στη γραμμή 11 που ακολουθεί δημιουργούμε ένα αντικείμενο διαχείρισης της εφαρμογής, ορίζοντας τα consumer κλειδιά που έχουμε λάβει. Αμέσως μετά, στη γραμμή 12, ορίζουμε την πρόσβαση της εφαρμογής στο λογαριασμό μας, με τη βοήθεια των αντίστοιχων tokens. Χάρη σ’ αυτό το αντικείμενο έχουμε πρόσβαση στο Twitter API, μέσω των πολύ φιλικών συναρτήσεων που παρέχει το tweepy.

Έχοντας τελειώσει με τη διασύνδεση του Twitter προχωράμε στην ανάγνωση των περιεχομένων του αρχείου στο οποίο έχουμε αποθηκεύσει τα tweets μας (βλ. γραμμές 16 έως και 19). Τις γραμμές του αρχείου τις αποθηκεύουμε σε μορφή λίστας, στη μεταβλητή tweets_list. Επίσης, στη γραμμή 21 ορίζουμε τη μεταβλητή tweets_new_list. Προσέξτε ότι, παρά το όνομά της, είναι μορφής string κι αποθηκεύει τις γραμμές που δεν αφορούν στα tweets που θ’ αναρτηθούν κατ’ αυτή την εκτέλεση. Τις γραμμές αυτές θα τις αποθηκεύσουμε λίγο πριν την έξοδο του προγράμματος, στις γραμμές 36 έως και 38, επικαλύπτοντας τα περιεχόμενα του αρχείου με τα tweets. Έτσι, κατά την επόμενη εκτέλεση του προγράμματος, οι γραμμές των tweets που έχουν αναρτηθεί θα έχουν αφαιρεθεί.

Συνεχίζοντας τώρα από τη γραμμή που είχαμε μείνει, την 23, ξεκινάμε ένα βρόγχο με τον οποίο εξετάζουμε γραμμή προς γραμμή τα προγραμματισμένα tweets. Την κάθε γραμμή τη σπάμε στα δύο, στο σημείο που υπάρχει ο χαρακτήρας tab. Το πρώτο κομμάτι που αφορά στην ημερομηνία και στην ώρα της ανάρτησης το σπάμε σε πέντε κομμάτια, τα οποία οριοθετούνται από το κόμμα. Με τη βοήθεια των πέντε αυτών στοιχείων της λίστας αρχικοποιούμε ένα αντικείμενο datetime. Όπως θα διαπιστώσετε, ο τρόπος που επιλέξαμε να αναπαραστήσουμε την επιθυμητή ημερομηνία ανάρτησης κάθε άλλο παρά τυχαίος είναι, αφού έτσι έχουμε πολύ εύκολα και με τη σειρά τις μεταβλητές που απαιτούνται για να δημιουργηθεί το αντικείμενο datetime, στο οποίο δείχνει η μεταβλητή tweet_time. Κατόπιν τούτου, αποθηκεύουμε το κείμενο του tweet, δηλαδή το δεύτερο τμήμα της αρχικής γραμμής, στη μεταβλητή tweet_text.

Στη γραμμή 32 σειρά έχει η δημιουργία ενός αντικειμένου datetime με την τρέχουσα ημερομηνία, στο οποίο δείχνει η μεταβλητή now_time. Συγκρίνοντας τη διαφορά τον δευτερολέπτων του tweet_time με του now_time (αξιοποώντας τη μέθοδο total_seconds()) μπορούμε να αντιληφθούμε αν η επιθυμητή ώρα εκτέλεσης του συγκεκριμένου post είναι τώρα (μηδενική ή αρνητική διαφορά) ή στο μέλλον. Αν ήλθε ή έχει έλθει η ώρα για ανάρτηση, τότε, αφού αφήσουμε ένα μικρό χρονικό διάστημα όπως ήδη περιγράψαμε, την εκτελούμε με τη βοήθεια της συνάρτησης update_status του αντικειμένου API. Αν πάλι η συγκεκριμένη γραμμή αφορά σε κάποια μελλοντική ανάρτηση, τότε, όπως βλέπετε στη γραμμή 34, την προσθέτουμε στο τέλος του κειμένου, το οποίο θα αποτελέσει το νέο περιεχόμενο του αρχείου των tweets, μετά το τέλος της εξέτασης όλων των γραμμών.

Αυτό λοιπόν ήταν όλο! Ούτε καν 40 γραμμές κώδικα και το bot μας είναι πανέτοιμο ν’ αναλάβει δράση. Το μόνο που του λείπει είναι το έναυσμα, για το οποίο θα φροντίζει ευλαβικά ο δαίμονας του cron, σύμφωνα με τις οδηγίες που θα ορίσουμε στο crontab. Για να κάνουμε κάτι τέτοιο στο σύστημά μας, δίνουμε:

sudo crontab -e -u root

Στον editor που ανοίγει, προσθέτουμε τη γραμμή:

0,30 * * * * sudo python /project_dir/tweet_bot_scheduled.py

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

Το προγραμματισμένο tweet εμφανίστηκε στην ώρα του. Τίποτα δεν προδίδει ότι υπεύθυνος για την ανάρτησή του *δεν* ήταν ο γράφοντας.

Το προγραμματισμένο tweet εμφανίστηκε στην ώρα του. Τίποτα δεν προδίδει ότι υπεύθυνος για την ανάρτησή του δεν ήταν ο γράφοντας.

Ένα Twitter bot με απ’ όλα, παρακαλώ!
Το bot μας, αν και απλοϊκό δείχνει το δρόμο για πολλές κι ενδιαφέρουσες βελτιώσεις ή τροποποιήσεις. Αναλυτικότερα, έχουμε τη δυνατότητα είτε να επαυξήσουμε τις δυνατότητες του bot που ήδη διαθέτουμε, είτε να δημιουργήσουμε ένα νέο με εντελώς διαφορετική λογική. Για παράδειγμα, το νέο bot θα μπορούσε να συλλέγει στοιχεία από το web αλλά κι από το περιβάλλον του, να τα συνδυάζει και να παράγει το κατάλληλο αποτέλεσμα — πάντα στο timeline μας.

Αποφασίσαμε να υλοποιήσουμε μια εντελώς διαφορετική έκδοση του bot. Στη νέα του έκδοση, θα εκτελείται σε συγκεκριμένες ώρες και σε κάθε φορά θα υπάρχει ένας διαφορετικός (προκαθορισμένος) χαιρετισμός. Ταυτόχρονα, θα συλλέγει τη θερμοκρασία του SoC του Raspberry Pi, θα τραβάει ένα snapshot από μια web cam που έχουμε εγκαταστήσει (μπορεί η πρόσβαση να είναι ελεύθερη ή να χρειάζεται πιστοποίηση με όνομα χρήστη και κωδικό), και συνδυάζοντας όλα αυτά τα στοιχεία να δημιουργεί ένα όμορφο tweet.

#! /usr/bin/env python
# -*- coding: utf-8 -*-
from datetime import datetime
import tweepy
import os
#download image without auth
import urllib
#download image with auth
import urllib2
import base64

consumer_key = "fgsbf53dafbafd35saf" 
consumer_secret = "ghd43tftjuu9yygf6"
access_token = "26488189-5464yty554fdth554ser" 
access_token_secret = "r534dsrgds4yhr5yds"

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

api = tweepy.API(auth)

cpu_temp = os.popen('vcgencmd measure_temp').readline()
cpu_temp = cpu_temp.replace('temp=','').replace('\n','')
img_path = "/home/pi/live-cam.jpg"

now_hour = datetime.now().hour
greetings = {7 : "Good morning", 
: "Good afternoon", 
: "Good evening", 
: "Good night"}
if now_hour in greetings.keys():
    tweet_text = greetings[now_hour]
    tweet_text = tweet_text + " with a picture from beautiful Chios. My RPi's CPU temp right now is about " + cpu_temp
    download_img() #if no need auth
    #download_img_auth() #if need auth
    api.update_with_media(img_path, tweet_text)

def download_img():
    urllib.urlretrieve("http://10.20.30.81/cgi-bin/snapshot.cgi?channel=1", img_path)

def download_img_auth():
   request = urllib2.Request("http://10.20.30.81/cgi-bin/snapshot.cgi?channel=1")
   base64string = base64.encodestring('%s:%s' % ("myusername", "mypass")).replace('\n', '')
   request.add_header("Authorization", "Basic %s" % base64string)
   result = urllib2.urlopen(request)
   if result.headers.maintype == "image":
        open(img_path, "wb").write(result.read())

Τον ανωτέρω κώδικα θα τον βρείτε στο http://bit.ly/dh052tbot2. Σε αυτή την εκδοχή του bot έχουμε αξιοποιήσει τη βιβλιοθήκη os, μέσω της οποίας εκτελούμε, στη γραμμή 22, την εντολή vcgencmd measure_temp, που μας επιστρέφει τη συμβολοσειρά με τη θερμοκρασία του SoC. Την εν λόγω συμβολοσειρά καθαρίζουμε από τους περιττούς χαρακτήρες στην αμέσως επόμενη γραμμή.

Εκτός της os, εισάγουμε και τις βιβλιοθήκες urllib, urllib2 και base64. Η συνάρτηση urlretrieve της πρώτης θα μας επιτρέψει να κατεβάσουμε την εικόνα στο Raspberry Pi μας από το URL της web κάμερας, στην περίπτωση που δεν απαιτείται ταυτοποίηση. Οι άλλες δύο θα μας επιτρέψουν να εκτελέσουμε ένα request προς τον server της web κάμερας, στον οποίο θα περάσουμε τα απαιτούμενα credentials κωδικοποιημένα κατά base64. Και για τους δύο αυτούς τρόπους έχουμε δημιουργήσει κατάλληλες συναρτήσεις, τις download_img και download_img_auth, που θα βρείτε στις γραμμές 35 έως 44.

Πίσω τώρα, στη γραμμή 26, λαμβάνουμε με άμεσο τρόπο την τρέχουσα ώρα με τη βοήθεια της μεθόδου hour, του αντικειμένου datetime. Αμέσως μετά, στη γραμμή 27, ορίζουμε ένα λεξικό, όπου τα κλειδιά του αντιστοιχούν στις επιθυμητές ώρες εμφάνισης του μηνύματος. Η συνέχεια έρχεται με έναν έλεγχο για να διαπιστώσουμε αν η τρέχουσα ώρα συνάδει με κάποια από αυτές για τις οποίες έχει οριστεί κάποιο μήνυμα στο λεξικό greetings. Αν όντως βρισκόμαστε σε κάποια απ’ αυτές τις ώρες, συνδέουμε όλες τις συμβολοσειρές που αποτελούν το tweet μας και συλλαμβάνουμε μια εικόνα από τη web κάμερα (με τη βοήθεια της συνάρτησης που ταιριάζει στη μέθοδο πρόσβασης που υποστηρίζει). Στέλνουμε τέλος το tweet –με τη βοήθεια της μεθόδου update_with_media αυτή τη φορά–, περνώντας στο πρώτο όρισμα τη διαδρομή του αρχείου της εικόνας και στο δεύτερο το κείμενο που θα έχει το tweet.

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

Ο συνδυασμός πληροφοριών από πλευράς Twitter bot, νομίζουμε πως έχει ιδιαίτερα εντυπωσιακά αποτελέσματα. Τι λέτε κι εσείς;

Ο συνδυασμός πληροφοριών από πλευράς Twitter bot, νομίζουμε πως έχει ιδιαίτερα εντυπωσιακά αποτελέσματα. Τι λέτε κι εσείς;

One Response to “Φτιάξτε το δικό σας TweetBot”

  1. spiros_gr | 06/05/2016 at 16:58

    Πολύ ενδιαφέρον το άρθρο! Έφτιαξα και ένα δικό μου bot (https://twitter.com/XWReport) για να περάσει ευχάριστα η ώρα :) εμπνευσμένος από ένα παλιότερο άρθρο για την εκτύπωση ακραίων καιρικών φαινομένων. Ανά τακτά χρονικά διαστήματα λαμβάνει δεδομένα από το http://openweathermap.org και τα τουιτάρει. Και εδώ ο κώδικας: http://pastebin.com/AzsA5snj

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων