Come creare bot di Twitter, Instagram e Reddit usando Python
È il 2019. Hai sentito parlare di robot. Ci sono bot di chat, bot di posta elettronica, bot di scraping del web e bot dei social media. Hai già creato un bot? È sorprendentemente facile. Probabilmente perché sono dappertutto. Abbraccia i nostri padroni dei bot unendoti al loro grado.
In questo articolo, ti mostrerò come puoi sfruttare Python per interagire automaticamente con i tuoi account Twitter, Reddit e Instagram.
Lavorare con Python
Questo walk-through usa Python come lingua di scelta . I vantaggi di facilità d'uso di Python superano le eventuali carenze di velocità rispetto ad altre lingue. Puoi scaricare Python per quasi tutti i sistemi operativi. Usa l'editor di tua scelta.
Le distribuzioni Python vengono associate all'utility chiamata pip
. Al momento della scrittura, ci sono oltre 168.000 librerie disponibili per il download tramite pip
. Per i robot che creerai oggi, ne servono solo tre.
Dalla riga di comando, è possibile installare le librerie necessarie utilizzando queste tre linee.
pip install --upgrade InstagramAPI pip install --upgrade tweepy pip install --upgrade praw
Ora sarai in grado di importare queste librerie dove necessario.
Ottenere chiavi e segreti dell'applicazione
Un saggio filosofo disse una volta "Segreti, i segreti non sono divertenti. Segreti, segreti feriscono qualcuno. "Rispettosamente, i robot hanno bisogno di segreti. Il prossimo passo nella configurazione dei bot è consentire loro l'accesso all'API di ciascun sito. Per fare ciò, avrai bisogno di una chiave di applicazione o di un segreto.
Mentre raccogli chiavi, segreti, token e altro (sembra un gioco divertente!), Mettili tutti in un unico file chiamato "credentials.py". Questo file sarebbe simile a questo:
# 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 = ''
Suggerimento per la privacy molto importante: non impegnare questo file in alcun controllo sorgente (es. Git). Tu non vuoi che qualcun altro abbia queste chiavi e questi segreti. Sono chiamati segreti per una ragione.
Impostazione dell'accesso a Twitter
Consulta la nostra guida per configurare un bot su Twitter con Node.js ti mostrerà come creare la tua app di Twitter . Tieni presente che Twitter impiegherà un po 'di tempo per verificare il tuo account e assicurarti di non creare un account spam.
Dopo aver seguito questi passaggi, copia la chiave del consumatore, il segreto del consumatore, il token di accesso e accedi al segreto del token nel tuo file credentials.py.
Impostazione dell'accesso a Reddit
Ottenere il tuo ID client e segreto di Reddit è molto simile a Twitter. Dovrai registrare un'app come agente utente di Reddit. Dopo aver fatto ciò, dovresti assolutamente mettere "Reddit User Agent" sul tuo curriculum.
Accedi all'account Reddit di tua scelta. Passare alla pagina delle preferenze delle app e fare clic su crea un'altra app . Dai un nome al tuo agente utente, qualcosa di utile. Seleziona lo script per lo scopo della tua app. L'URL about può essere lasciato vuoto. Inserisci qualsiasi indirizzo per la casella di reindirizzamento.
Dopo aver premuto Crea app , verrà visualizzata la seguente schermata con un elenco delle app. Le cifre sotto il nome della tua applicazione rappresentano l'ID cliente e il segreto del cliente si trova al di sotto di questo. Copia questi valori nel tuo file credentials.py.
Impostazione dell'accesso Instagram
L'accesso a Instagram differisce da Twitter e Reddit. Invece di registrare un'app, usi il tuo nome utente e password. Suggerisco di creare un account pubblico separato e utilizzare quei dettagli per il tuo bot.
Accedere a Reddit con Praw
L'utilizzo di praw è un processo in due fasi. Innanzitutto, l'impostazione dell'accesso è una chiamata a funzione singola al metodo Reddit di praw. Quindi, usando l'oggetto inizializzato, la ricerca di un subreddit viene eseguita usando il metodo new ().
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)
Cambia la variabile sub_name
per ottenere messaggi da diversi subreddit. Invece di new()
, altri metodi come hot()
sono disponibili per ottenere i post.
Ricerca di hashtag di Instagram tramite InstagramAPI
Il primo passo nell'utilizzo dell'API di Instagram è l'impostazione di un oggetto con l'ID client e il segreto. Subito dopo, chiama il metodo login () per completare la configurazione.
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()
L'utilizzo dell'API è un po 'più complicato della sua controparte Reddit. In questo esempio, lo script usa getHashtagFeed per ottenere un oggetto di risposta JSON molto grande da Instagram.
Cercando nella risposta, lo script cerca il testo della didascalia e poi stampa sullo schermo per vederlo.
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)
Aggiungi immagini ai social media
Andando avanti, potresti volere che il tuo script ottenga le immagini in questo feed hashtag. Per fare ciò, passa attraverso la risposta JSON e trova i media associati a ciascun post. Ecco un'implementazione per l'estrazione delle informazioni dalla risposta 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
Ci sono due funzioni di supporto utilizzate in questa funzione. Instagram invia una lista di immagini "candidati" nella risposta JSON. Scegli la più grande di queste immagini in modo che il supporto sia visualizzato con la massima risoluzione.
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
In secondo luogo, una volta trovato il collegamento all'immagine, è possibile salvare l'immagine localmente scrivendo il contenuto in un file. L'uso della libreria delle requests
rende semplice.
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 con Tweepy
Innanzitutto, devi impostare l'accesso a Twitter utilizzando i tuoi segreti e le tue chiavi.
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)
La creazione di un generico retweet bot avviene in poche righe.
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
Molte altre cose possono essere fatte con questa libreria. Per concludere questo passaggio, puoi utilizzare la funzione get_images_from_hashtag
dal bot di Instagram creato in precedenza per twittare immagini e didascalie.
Inoltre, il tuo bot di Twitter può cercare Reddit per i nuovi post e twittare anche quelli. Mettere insieme entrambe queste funzionalità assomiglia a questo:
# use r/<hashtag> for reddit search # and #<hashtag> 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:nn{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
Il tuo Bot di social media potenziato da Python è pronto!
Quindi, ora hai un sacco di codice che estrae i contenuti multimediali da un sito e i post in un altro. Puoi anche mescolare e abbinare. Tirare i tweet e postare su Reddit. Raccogli le immagini di Instagram per postare su subreddits. Crea un bot e diventa parte di Internet reale.
Infine, per automatizzare completamente questo processo, vorrai che i tuoi robot vengano eseguiti in loop su un server. Questo potrebbe essere sul tuo computer con un programmatore orario. Oppure rispolvera quel vecchio Raspberry Pi che è stato nel tuo armadio e dai un'occhiata a questi dolci progetti di Twitter per il Pi .
Leggi l'articolo completo: Come creare Twitter, Instagram e Reddit Bot usando Python
Fonte: Utilizzare