← Article précédent Article suivant →
Publié le 11 février 2016
Tweeter en CLI sans API Twitter

A travers cet épisode on va voir comment authentifier notre utilisateur sur Twitter en utilisant la technique du Web scraping.

Sommaire de la série


Les modules


Je me suis permis d'ajouter les deux modules "externes" dans le code source pour que vous n'ayez pas à les télécharger dans le cas ou vous rencontreriez des difficultés lors de l'installation de ces modules.
En revanche, il est plus adapté de les installer sur votre machine via le gestionnaire de paquets pip.

Beautiful Soup


Beautiful Soup est la librairie Python que nous utilisons pour parser le code source des pages en question. Elle va dans un premier temps formater le code pour qu'il soit compréhensible par la librairie et permettre l'utilisation de la méthode find() par exemple. Nous pouvons désormais parser le code HTML dans toute son arborescence.

Pour installer Beautiful Soup :
pip install beautifulsoup4

Requests


Requests est la librairie Python que nous utilisons pour (comme son nom l'indique :D) envoyer des requêtes.
Evidemment, elle regorge d'autres fonctionnalités, tout comme Beautiful Soup, mais gravitants autour des requêtes. D'ailleurs dans cet épisode nous utilisons son système de sessions afin de s'assurer de la persistance de l'authentification à travers notre classe "User".

Pour installer Requests :
pip install requests

Un petit tour du code


Instanciation de l'utilisateur


class User:

	session = None
	tokenCsrf = ''

	# Constructeur de notre classe User
	def __init__(self, username, password):

		self.username = username
		self.password = password

def main():

	# Instanciation de l'utilisateur
	user = User('your_username', 'your_password')

# Définition du point d'entrée du script
if __name__ == '__main__':
	main()

Initialisation de la session


# Définition de notre méthode d'authentification
def auth(self):
		
		# Initialisation de notre session
		with requests.Session() as self.session:
			# Retour de la requête "session"
			response = self.session.get('https://mobile.twitter.com/session/new')

Récupération du token CSRF


# "Formatage" du code de la librarie Beautiful Soup
html = BeautifulSoup(response.content)

# Attribution du token CSRF à notre variable d'instance tokenCsrf
self.tokenCsrf = html.find('input', {'name' : 'authenticity_token'}).get('value')

Classe Request


class Request:

	# Définition de notre method statique pour toutes nos requêtes "POST"
	@staticmethod
	def post(url, session, data):
		# Attribution d'un header spécifique pour notre requête HTTP
		headers = {'content-type' : 'application/x-www-form-urlencoded', 'user-agent': 'Mozilla/5.0'}
		return session.post(url, data = data, headers = headers).content

Envoi des données au serveur Twitter


content = Request.post(
	'https://mobile.twitter.com/sessions', # URL où l'on va envoyer la requête
	self.session, # La session courante
	{
		'authenticity_token' : self.tokenCsrf,
		'session[username_or_email]' : self.username,
		'session[password]' : self.password
	} # Les données à envoyer au serveur Twitter
)

Etat de l'authentification


# Formatage du contenu retourné
html = BeautifulSoup(content)

# Rechercher la classe "me" se trouvant dans le parent "<td>"
authenticated = html.find('td', {'class' : 'me'})

Retrouvez-moi sur les réseaux sociaux