Code-Makers ha revivido. It's alive! Bienvenidos! Presentate aca!

Twittear desde Python 2

Avatar de Usuario
ni0
Arquitecto
Mensajes: 121
Registrado: Mar Nov 17, 2015 4:07 pm

Twittear desde Python 2

Mensajepor ni0 » Sab Mar 26, 2016 1:43 am

Hola, voy a poner un algo cortito en python 2 que permite twittear

Requiere tener python-oauth2, lo pueden conseguir desde https://github.com/joestump/python-oauth2
Y requiere tener el CONSUMER KEY y un TOKEN KEY


Yo queria usar la api de twitter directamente, asique no use librerias (que las hay) para twittear, por lo que tuve que usar socket, ssl, y la libreria para la autentificacion por oauth2.

La documentacion de la api de twitter esta en https://dev.twitter.com/rest/public, por ejemplo la llamada para twittear esta en: https://dev.twitter.com/rest/reference/ ... ses/update para twittear, ahi estan todos los parametros que se pueden especificar al twittear

De la forma que lo voy a hacer, requiere primero tener una cuenta en twitter y generar las claves de autentificacion (que son diferentes al usuario/clave que se ingresa por web) y el programita con esas claves twittea en nombre del usuario. Hay mas formas de autentificar nuestra aplicacion contra twitter

Tener el Consumer Key y Token Key (y las claves privadas) nos sirve para cualquier aplicacion que querramos hacer que utilize una cuenta de twitter, para teneras hay que hacer:
  • Tener cuenta en twitter y tener un numero de telefono celular asociado a la cuenta
  • Ir a https://apps.twitter.com y crear una nueva aplicacion
  • Ir a la aplicacion creada, ir a la solapa "Keys and Access Tokens" y abajo de todo pedir generar un token
  • Estando en esa misma solapa, tenemos que guardar los valores de "Consumer Key", "Consumer Secret", "Access Token Key", y "Access Token Secret"

Esto hara que si tenemos el usuario "Chespirito" y en apps.twitter.com creamos la aplicacion "Chipote", la aplicacion "Chipote" queda asociada a "Chespirito" y con el consumer key y token key usamos la aplicacion "Chipote" con la cuenta "Chespirito".
Luego hay que cambiar las variables que puse en el codigo completandolas con los valores sacados de como puse recien.

Se puede dividir en 3 partes lo que hice, al principio creo la conexion por ssl, luego genero la autentificacion ssl, y luego hago el llamado a la api de twitter con el POST

Si lo llamamos "twit.py", haciendo

Código: Seleccionar todo

./twit.py "Este es mi twit!"

nos twittea :D

Acordarse de poner las variables CONSUMER_KEY, CONSUMER_SECRET, TOKEN_KEY y TOKEN_SECRET

Código: Seleccionar todo

#!/usr/bin/python

import socket
import ssl
import sys
#bajarla desde https://github.com/joestump/python-oauth2
import oauth2
import urllib

#completar con los datos de nustra aplicacion creada en https://apps.twitter.com
CONSUMER_KEY=""
CONSUMER_SECRET=""
TOKEN_KEY=""
TOKEN_SECRET=""

#de parametro se recibe el twit
if len(sys.argv) != 2:
sys.exit(-1)

host = "api.twitter.com"

#configuro el oauth2 con mi token y consumer
consumer = oauth2.Consumer(key=CONSUMER_KEY, secret=CONSUMER_SECRET)
token = oauth2.Token(key=TOKEN_KEY, secret=TOKEN_SECRET)
client = oauth2.Client(consumer, token)

#creo socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#lo levanto con SSL, el ca_certs habra que completarlo con la ruta a nuestro archivo de certificados
sslsock = ssl.wrap_socket(sock, server_side = False, cert_reqs = ssl.CERT_REQUIRED, ssl_version = ssl.PROTOCOL_SSLv23, ca_certs = "/etc/ssl/certs/ca-certificates.crt")

#me conecto a la api de twitter
sslsock.connect((host, 443))

#encodeo el twit en formato x-www-form-urlencoded (por ejemplo, esto nos pone los '%' cuando es necesario, y los espacios los convierte en '+')
#notar que aca pongo tambien "status", este es el parametro requerido para twittear, el parametro status es nuestro twit
post = urllib.urlencode({"status": sys.argv[1]})

#genero la autentificacion
req = oauth2.Request.from_consumer_and_token(consumer, token=token, http_method="POST", http_url="https://" + host + "/1.1/statuses/update.json?" + post)
req.sign_request(oauth2.SignatureMethod_HMAC_SHA1(), consumer, token)

#genero la peticion POST, notar que los parametros los encodeo dentro de la url (creo que lo llaman query string) y agrego el parametro Authorization con la autentificacion del oauth2
s = "POST /1.1/statuses/update.json?" + post + " HTTP/1.1\nHost: " + host + "\nAuthorization: " + req.to_header()["Authorization"] + "\nContent-Type: application/x-www-form-urlencoded\nContent-Length: 0\n\n"

print "Envio:\n" + s + "\n\n"
sslsock.send(s)

r = sslsock.recv(1000)
print "Recivo:\n" + r

r = sslsock.recv(1000)
print "Recivo:\n" + r


ni0 escribió:como te habras dado cuenta para Stallman, Linus y todos los que los siguen se refieren al hacking a la accion de programar porque les (nos?) da orgasmos (cuak cuak)

ni0 [at] code-makers [dot] es

Volver a “Python”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado