Πώς να χτίσετε Twitter, Instagram και Reddit Bots χρησιμοποιώντας Python
Διαφήμιση
Είναι το 2019. Έχετε ακούσει για bots. Υπάρχουν ρομπότ για κουβέντα, ρομπότ ηλεκτρονικού ταχυδρομείου, ρομπότ διαδικτυακής απόσπασης και ρομπότ κοινωνικής δικτύωσης. Έχετε δημιουργήσει ακόμα ένα bot; Είναι εκπληκτικά εύκολο. Πιθανώς γιατί είναι παντού. Αγκαλιάστε τους ανδρείκελους μας με τη συμμετοχή τους.
Σε αυτό το άρθρο, θα σας δείξω πώς μπορείτε να χρησιμοποιήσετε την Python για να αλληλεπιδράσετε αυτόματα με τους λογαριασμούς Twitter, Reddit και Instagram.
Εργασία με την Python
Αυτό το walk-through χρησιμοποιεί τη Python ως τη γλώσσα επιλογής 6 Λόγοι για τους οποίους η Python είναι η γλώσσα προγραμματισμού του μέλλοντος 6 λόγοι για τους οποίους η Python είναι η γλώσσα προγραμματισμού του μέλλοντος Θέλετε να μάθετε ή να επεκτείνετε τις δεξιότητές σας στον προγραμματισμό; Εδώ είναι γιατί η Python είναι η καλύτερη γλώσσα προγραμματισμού για να μάθετε φέτος. Διαβάστε περισσότερα . Τα πλεονεκτήματα της ευκολίας χρήσης της Python ξεπερνούν τις ελλείψεις ταχύτητας που έχει σε σύγκριση με άλλες γλώσσες. Μπορείτε να κατεβάσετε Python για σχεδόν οποιοδήποτε λειτουργικό σύστημα. Χρησιμοποιήστε τον επεξεργαστή της επιλογής σας.
Οι κατανομές Python συνδέονται με το βοηθητικό πρόγραμμα που ονομάζεται pip
. Κατά το χρόνο της γραφής, υπάρχουν περισσότερες από 168.000 βιβλιοθήκες διαθέσιμες για λήψη χρησιμοποιώντας το pip
. Για τα bots που θα δημιουργήσετε σήμερα, χρειάζονται μόνο τρία.
Από τη γραμμή εντολών, μπορείτε να εγκαταστήσετε τις βιβλιοθήκες που χρειάζονται χρησιμοποιώντας αυτές τις τρεις γραμμές.
pip install --upgrade InstagramAPI pip install --upgrade tweepy pip install --upgrade praw
Τώρα θα μπορείτε να εισαγάγετε αυτές τις βιβλιοθήκες όπου χρειάζεται.
Λήψη κλειδιών εφαρμογής και μυστικών
Ένας σοφός φιλόσοφος είπε κάποτε: "Τα μυστικά, τα μυστικά δεν είναι διασκεδαστικά. Τα μυστικά, τα μυστικά βλάπτουν κάποιον. "Με σεβασμό, οι bots χρειάζονται μυστικά. Το επόμενο βήμα για τη ρύθμιση των ρομπότ σας είναι να τους επιτραπεί η πρόσβαση στο API κάθε ιστότοπου. Για να το κάνετε αυτό, θα χρειαστείτε ένα κλειδί εφαρμογής ή μυστικό.
Καθώς συλλέγετε κλειδιά, μυστικά, μάρκες και άλλα (ακούγεται σαν ένα διασκεδαστικό παιχνίδι!), Τα βάζετε όλα σε ένα μόνο αρχείο που ονομάζεται "credentials.py". Αυτό το αρχείο θα φαινόταν έτσι:
# keys twitter_consumer_key = '' twitter_consumer_secret = '' twitter_access_token = '' twitter_access_token_secret = '' reddit_client_id = '' reddit_client_secret = '' reddit_user_agent = '' instagram_client_id = '' instagram_client_secret = ''
Πολύ σημαντική πρόταση απορρήτου: Μη δεσμεύετε αυτό το αρχείο με οποιοδήποτε έλεγχο πηγής (π.χ. Git). Δεν θέλετε κάποιος άλλος να έχει αυτά τα κλειδιά και μυστικά. Ονομάζονται μυστικά για έναν λόγο.
Ρύθμιση πρόσβασης στο Twitter
Ελέγξτε τον οδηγό μας για τη δημιουργία ενός bot bot με το Node.js θα σας δείξει πώς να δημιουργήσετε την εφαρμογή σας Twitter Πώς να φτιάξετε ένα Twitter Tweeting Twitter Bot με το Raspberry Pi και Node.js Πώς να χτίσετε ένα Twitter Tweeting Twitter Bot με το Raspberry Pi και Node.js Ξεκινήστε με το Node.js και δημιουργήστε ένα bot bot που tweets φωτογραφίες και πληροφορίες χρησιμοποιώντας μόνο Raspberry Pi! Διαβάστε περισσότερα . Λάβετε υπόψη ότι το Twitter θα διαρκέσει λίγο για να επαληθεύσει τον λογαριασμό σας και θα διασφαλίσει ότι δεν δημιουργείτε λογαριασμό ανεπιθύμητης αλληλογραφίας.
Αφού ακολουθήσετε αυτά τα βήματα, αντιγράψτε το κλειδί του καταναλωτή, το μυστικό του καταναλωτή, το διακριτικό πρόσβασης και το μυστικό πρόσβασης του διακριτικού στο αρχείο credentials.py.
Ρύθμιση πρόσβασης Reddit
Η απόκτηση του αναγνωριστικού πελάτη Reddit και του μυστικού σας είναι πολύ παρόμοια με το Twitter. Θα χρειαστεί να καταχωρίσετε μια εφαρμογή ως πράκτορα χρήστη Reddit. Μετά από αυτό, θα πρέπει να τεθεί απολύτως "Reddit User Agent" στο βιογραφικό σας.
Συνδεθείτε στο λογαριασμό Reddit της επιλογής σας. Μεταβείτε στη σελίδα προτιμήσεων εφαρμογών και κάντε κλικ στην επιλογή Δημιουργία άλλης εφαρμογής . Ονομάστε τον παράγοντα χρήστη σας κάτι χρήσιμο. Επιλέξτε δέσμη ενεργειών για τους σκοπούς της εφαρμογής σας. Η διεύθυνση URL μπορεί να παραμείνει κενή. Συμπληρώστε οποιαδήποτε διεύθυνση για το πλαίσιο ανακατεύθυνσης.
Αφού πατήσετε τη δημιουργία της εφαρμογής, θα εμφανιστεί η παρακάτω οθόνη με μια λίστα με τις εφαρμογές σας. Τα ψηφία κάτω από το όνομα της εφαρμογής σας αντιπροσωπεύουν το αναγνωριστικό πελάτη και το μυστικό πελάτη βρίσκεται κάτω από αυτό. Αντιγράψτε αυτές τις τιμές στο αρχείο credentials.py.
Ρύθμιση πρόσβασης Instagram
Η πρόσβαση του Instagram διαφέρει από το Twitter και το Reddit. Αντί να καταχωρίσετε μια εφαρμογή, χρησιμοποιείτε το όνομα χρήστη και τον κωδικό πρόσβασής σας. Προτείνω να δημιουργήσετε έναν ξεχωριστό δημόσιο λογαριασμό και να χρησιμοποιήσετε αυτές τις λεπτομέρειες για το bot σας.
Πρόσβαση στο Reddit With Praw
Η χρήση του Praw είναι μια διαδικασία δύο σταδίων. Κατ 'αρχάς, η ρύθμιση της πρόσβασης είναι μια κλήση μιας λειτουργίας στη μέθοδο Reddit Praw. Στη συνέχεια, χρησιμοποιώντας το αρχικοποιημένο αντικείμενο, η αναζήτηση ενός δευτερεύοντος αρχείου γίνεται με τη μέθοδο της νέας ().
import praw from credentials import * my_reddit = praw.Reddit(client_id=reddit_client_id, client_secret=reddit_client_secret, user_agent=reddit_user_agent) sub_name = 'technology' max_posts = 10 for submission in my_reddit.subreddit(sub_name).new(limit=max_posts): print(submission.title)
Αλλάξτε τη μεταβλητή sub_name
για να λάβετε αναρτήσεις από διαφορετικά δευτερεύοντα αρχεία. Αντί για new()
, άλλες μέθοδοι όπως το hot()
είναι διαθέσιμες για να λάβουν αναρτήσεις.
Αναζήτηση στα Hashtags του Instagram μέσω του InstagramAPI
Το πρώτο βήμα στη χρήση του Instagram API είναι η δημιουργία ενός αντικειμένου με αναγνωριστικό πελάτη και μυστικό. Αμέσως μετά, καλέστε τη μέθοδο login () για να ολοκληρώσετε τη ρύθμιση.
from InstagramAPI import InstagramAPI from credentials import instagram_client_id, instagram_client_secret my_insta_api = InstagramAPI(instagram_client_id, instagram_client_secret) my_insta_api.login()
Η χρήση του API είναι λίγο πιο περίπλοκη από την αντίστοιχη του Reddit. Σε αυτό το παράδειγμα, το σενάριο χρησιμοποιεί getHashtagFeed για να αποκτήσει ένα πολύ μεγάλο αντικείμενο απόκρισης JSON από το Instagram.
Αναζητώντας την απόκριση, το σενάριο αναζητά κείμενο λεζάντας και στη συνέχεια εκτυπώνεται στην οθόνη για να το δει.
get_hashtag = my_insta_api.getHashtagFeed(hashtag) if get_hashtag != False: for item in my_insta_api.LastJson['items']: if 'caption' in item.keys() and 'text' in item['caption'].keys(): caption = item['caption']['text'] print(caption)
Προσθήκη εικόνων στα κοινωνικά μέσα
Προχωρώντας προς τα εμπρός, ίσως θέλετε το σενάριό σας να αποκτήσει τις εικόνες σε αυτήν τη ροή του hashtag. Για να το κάνετε αυτό, βγείτε μέσω της απάντησης JSON και βρείτε τα μέσα που συσχετίζονται με κάθε θέση. Εδώ είναι μια εφαρμογή για την εξαγωγή των πληροφοριών από την απάντηση JSON:
def get_images_from_hashtag(hashtag, num_images): images = [] get_hashtag = my_insta_api.getHashtagFeed(hashtag) if get_hashtag == False: return images for item in my_insta_api.LastJson['items']: if item['media_type'] == 1 and 'image_versions2' in item.keys(): candidate = get_largest_image(item['image_versions2']['candidates']) # get image filename = self.save_image_from_candidate(candidate['url']) if filename != '': # get status, save as tuple caption = get_caption(item) images.append((filename, caption)) if len(images) >= num_images: break return images
Υπάρχουν δύο βοηθητικές λειτουργίες που χρησιμοποιούνται σε αυτή τη λειτουργία. Το Instagram στέλνει μια λίστα με "υποψήφιους" για την εικόνα στην απόκριση JSON. Επιλέξτε τη μεγαλύτερη από αυτές τις εικόνες, ώστε τα μέσα να εμφανίζονται στην υψηλότερη ανάλυση.
def get_largest_image(candidates): candidate = {} pixels = 0 for cand in candidates: # pick the highest resolution one res = cand['height']*cand['width'] if res > pixels: pixels = res candidate = cand return candidate
Δεύτερον, αφού βρεθεί ο σύνδεσμος προς την εικόνα, μπορείτε να αποθηκεύσετε την εικόνα τοπικά γράφοντας το περιεχόμενο σε ένα αρχείο. Χρησιμοποιώντας τη βιβλιοθήκη requests
γίνεται αυτό το απλό.
def save_image_from_candidate(url): filename = '' response = requests.get(url) # check the response status code, 200 means good if response.status_code == 200: filename = url.split("/")[-1].split('?')[0] with open(filename, 'wb') as f: f.write(response.content) return filename
Tweeting Out Media με Tweepy
Κατ 'αρχάς, θα πρέπει να ρυθμίσετε την πρόσβαση στο Twitter χρησιμοποιώντας τα μυστικά και τα κλειδιά σας.
import tweepy from credentials import * tw_auth = tweepy.OAuthHandler(twitter_consumer_key, twitter_consumer_secret) tw_auth.set_access_token(twitter_access_token, twitter_access_token_secret) tw_api = tweepy.API(tw_auth)
Δημιουργώντας ένα γενικό bot bot retweet γίνεται σε λίγες μόνο γραμμές.
for tweet in tweepy.Cursor(tw_api.search, q='MakeUseOf').items(10): try: tweet.favorite() tweet.retweet() time.sleep(2) except tweepy.TweepError as e: print(e.reason) except StopIteration: break
Πολλά άλλα πράγματα μπορούν να γίνουν με αυτή τη βιβλιοθήκη. Για να ολοκληρώσετε αυτή τη get_images_from_hashtag
, μπορείτε να χρησιμοποιήσετε τη λειτουργία get_images_from_hashtag
από το bot Instagram που έγινε νωρίτερα για να τιτλοφορήσετε εικόνες και λεζάντες.
Επιπλέον, το bot σας στο Twitter μπορεί να ψάξει το Reddit για νέες αναρτήσεις και να τιτίβει εκεί έξω επίσης. Για να βάλουμε μαζί και τις δύο λειτουργίες, μοιάζει με αυτό:
# use r/ for reddit search # and # for instagram search hashtag = 'technology' num_posts = 5 # tweet reddit info reddit_posts = my_reddit.subreddit(hashtag).new(limit=num_posts) for submission in reddit_posts: title = submission.title url = 'www.reddit.com{}'.format(submission.permalink) tweet_str = f'Reddit r/{sub} update:\n\n{title} #{sub} {url}' tweet_str = trim_to_280(tweet_str) tw_api.update(tweet_str) # tweet instagram media media_info = get_images_from_hashtag(hashtag, num_posts) for (filename, message) in media_info: try: tweet_str = trim_to_280(message) tw_api.update_with_media(filename, status=tweet_str) except tweepy.TweepError as e: print(e.reason) except StopIteration: break
Το γυμνό κοινωνικό μίνι σας με το Python είναι έτοιμο!
Έτσι, τώρα έχετε μια δέσμη κώδικα που τραβά τα μέσα μαζικής ενημέρωσης από έναν ιστότοπο και δημοσιεύει σε άλλο. Μπορείτε να αναμίξετε και να ταιριάξετε. Τραβήξτε τα tweets και μετά στο Reddit. Συλλέξτε εικόνες Instagram για την ανάρτηση σε δευτερεύοντα αρχεία. Κάνετε ένα bot και είστε μέρος του πραγματικού διαδικτύου.
Τέλος, για να αυτοματοποιήσετε πλήρως αυτή τη διαδικασία, θα θέλετε τα ρομπότ σας να τρέχουν σε ένα βρόχο σε ένα διακομιστή. Αυτό θα μπορούσε να είναι στον δικό σας υπολογιστή με χρονοπρογραμματιστή. Ή, σκόνη από το παλιό Raspberry Pi που έχει στην ντουλάπα σας, και ελέγξτε έξω αυτά τα γλυκά προγράμματα Twitter bot για το Pi 10 Best Twitter Bot Έργα για Raspberry Pi 10 Best Twitter Bot Έργα για Raspberry Pi Διαβάστε περισσότερα.
Εξερευνήστε περισσότερα σχετικά με: Κωδικοποίηση Tutorials, Python, Social Bots.