Followback i Direct Message a nous Followers de Twitter (Python Tweepy)

Aquest petit projecte programat amb Python realitza la tasca següent, cada vegada que s’executa mira els followers que tenim en la nostra conta de Twitter i els compara amb els que tenim guardats en una base de dades, si en troba un o més d’un que no tenim enregistrats, els fa un Follow i els envia un missatge d’agrïment, a part d’això, enregistra en un log les principals passes dudes a terme i els possibles errors ocorreguts.

Per a dur a terme aquest projecte ho he fet amb dos fitxers, un de molt senzill amb les claus de la API de Twitter i l’altre que realitza totes les tasques. La primera execució crea també dos nous arxiu, el db (Base de dades) i fbidm.log (El log amb les tasques)

Això ho he desenvolupat per @ElTempsAVic, un bot que cada 3 hores envia un Tweet amb l’hora, la temperatura, el clima i les previsions meteoriològiques sobre les coordenades de la plaça de Vic. Us convido a que el seguiu.

Nota: Que per cert també té pàgina de Facebook https://www.facebook.com/eltempsavic

2017-02-25_12-42-07

Aquest programa s’ha d’executar des de Cron o des de una tasca programada de Windows cada X temps, ja que no pot funcionar amb el mètode push, no obstant de moment no sembla que sigui un problema

Segurament el codi es pot millorar i es podria fer d’altres maneres més senzilles, a mi de moment em serveix i compleix amb les seves funcions.

Arxiu de configuració:  keys.py

# Claus generades a veveloper
keys = dict(
consumer_key = 'Xxxxxxxxxxxxxxxxxxxxxxxxx',
consumer_secret = 'xxxxxxxxxxxxxxxxxxxxxxxx',
access_token = 'xxxxxxxxxxxxxxxxxxxxxxxx',
access_token_secret = 'xxxxxxxxxxxxxxxxxxxxxxxx',
)

Fitxer de programa: fbidm.py


#! /usr/bin/python
# -*- coding: utf-8 -*-
import tweepy
from keys import keys
import pickle
import time
import logging

#Credem les Keys
CONSUMER_KEY = keys['consumer_key']
CONSUMER_SECRET = keys['consumer_secret']
ACCESS_TOKEN = keys['access_token']
ACCESS_TOKEN_SECRET = keys['access_token_secret']

logger = logging.getLogger('fbidm')
hdlr = logging.FileHandler('/home/aesquis/python/fbidm.log')
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.INFO)

logger.info('Inici de les tasques')

#definim l'api
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)

#Definim les llistes que utilitzarem
followList =[]
destinataris =[]

#Contar nombre de followers per el log
user = api.get_user('eltempsavic')
logger.info ('Ara tens %s followers ',user.followers_count)

#agafem tots els noms de follower i els afegim dins la llista
try:
        for follower in tweepy.Cursor(api.followers).items():
                followList.append(follower.screen_name)
        logger.info('Get followers list ok!')
except Exception as e:
        logger.exception("message")

#agafar id's dels followers i afegir en la llista
#agafar id's dels followers i afegir en la llista
#for ids in tweepy.Cursor(api.followers_ids).items():
#       followList.append(ids)

#definim el que serà l'arxiu de la base de dades
file_name = '/home/aesquis/python/db'

#Obrim l'arxiu per lectura
try:
        fileObject = open(file_name,'r')
except Exception as e:
        logger.exception("message")

# Carreguem la base de dades en una llista
enviats = pickle.load(fileObject)

#Comparem entre els followers i la base de dades que teniem guardada 
#i afegim les discrepàncies a la llista destinataris
destinataris = 


# Fer el follow back dels usuaris de la llista destinataris
try:
        def fb():
                for follower in destinataris:
                        api.create_friendship(follower)
                    	logger.info('Follow to %s OK', follower)

except Exception as e:
        logger.exception("message")

# Fer Direct Message a usuaris de la llista destinataris
try:
        def sd():
                for follower in destinataris:
                        missatge = "Moltes gràcies per el teu interès, esperem que gaudeixes del temps"
                        api.send_direct_message(screen_name=follower, text = missatge )
                        logger.info('Direct Message to %s OK', follower)

                        except Exception as e:
        logger.exception("message")

#Tancar el fitxer de lectura
fileObject.close()

fb()
sd()

#Procés de regenerar la base de dades
try:
        fileObject = open(file_name, 'wb')
        pickle.dump(followList,fileObject)
        logger.info('Base de dades regenerada OK')
except Exception as e:
        logger.exception("message")


# tanquem fitxer
fileObject.close()
logger.info('Fi de les tasques')
print ("Resultat OK")

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.