
Son Lux
Delta
Programador
Verificación en dos pasos activada
El script permite crear una base de datos con SQLite en donde almacenaremos de forma permanente las historias de otros usuarios en nuestro servidor o en su respectivo ordenador.
¿Qué se necesita para correr el script?
El script está hecho en Python 3 por lo que necesitarás acceso a una terminal que tenga corriendo Python 3.
Básicamente es todo lo que se necesita, lo demás son temas de configuración que yo os iré guiando para que todo el mundo pueda correr el script correctamente.
Temario del tutorial
Sacar Cookies de tu sesión en Instagram
Haremos uso de la API de Instagram por lo que necesitaremos sacar una Cookie que está alojada en nuestro navegador, la podemos consultar desde la herramienta de developers de Google Chrome, para esto he realizado un vídeo explicativo para no hacer tan aburrido el tutorial y puedan entender mejor.
Hasta aquí no deberíamos tener problemas, hemos sacado solamente nuestra Cookie de Instagram, recuerden que para hacer este paso necesitan estar loggeados en su cuenta en intagram.com, de lo contrario no podremos sacar la cookie y el script necesita dicho texto para funcionar.
Crear archivo llamado configuracion.json
Este archivo contiene nuestra configuración en formato .JSON, más adelante explico como funciona dicho archivo.
Campos a modificar:
id = user id de la cuenta que queramos descargar
username = nombre de usuario de la cuenta
tus cookies aquí: insertamos la cookie que hemos sacado anteriormente
Para sacar el id de la cuenta yo utilizo una herramienta llamada Smash Ballon pero tu puedes usar la que sea de tu preferencia. No hace falta modificar más este archivo, simplemente guardamos los ajustes y pasamos al siguiente paso.
Creación de historias.py
Este archivo será el encargado de ejecutar las funciones necesarias para conectarse a la API de Instagram, no hace falta modificar nada aquí. Solo copiamos y pegamos tal cual el siguiente código:
Listo, tenemos el script listo, no hace falta descargarse nada extra, simplemente ejecutamos el script desde nuestra consola con el siguiente comando:
Posterior a esto, el script nos creará una carpeta llamada "archivos" en donde contiene los datos descargados y un archivo .sqlite que es nuestra base de datos.
Vídeo explicativo
Puedes ejecutar un cron en tu server para que se esté generando la consulta cada determinado tiempo, pero eso ya depende de ti hacerlo o no :encouragement:
Estaría genial si alguien aportará al código o que lo pudiera llevar a otro lenguaje como PHP :encouragement: sería genial.
Si te ha gustado el tutorial deja un :encouragement: os traeré más tutoriales como este para automatizar tareas. También si quieres pasarte por mi blog eres bienvenido :witless: les mando un abrazo virtual a todos los forobetanos.

¿Qué se necesita para correr el script?
El script está hecho en Python 3 por lo que necesitarás acceso a una terminal que tenga corriendo Python 3.
Básicamente es todo lo que se necesita, lo demás son temas de configuración que yo os iré guiando para que todo el mundo pueda correr el script correctamente.
Temario del tutorial
- Sacar nuestra Cookie de Instagram
- Creación de configuracion.json
- Creación de historias.py
- Ejecutar script
Sacar Cookies de tu sesión en Instagram
Haremos uso de la API de Instagram por lo que necesitaremos sacar una Cookie que está alojada en nuestro navegador, la podemos consultar desde la herramienta de developers de Google Chrome, para esto he realizado un vídeo explicativo para no hacer tan aburrido el tutorial y puedan entender mejor.
[video=youtube;nh6JkjXj-sM]https://www.youtube.com/watch?v=nh6JkjXj-sM[/video]
Hasta aquí no deberíamos tener problemas, hemos sacado solamente nuestra Cookie de Instagram, recuerden que para hacer este paso necesitan estar loggeados en su cuenta en intagram.com, de lo contrario no podremos sacar la cookie y el script necesita dicho texto para funcionar.
Crear archivo llamado configuracion.json
Este archivo contiene nuestra configuración en formato .JSON, más adelante explico como funciona dicho archivo.
Insertar CODE, HTML o PHP:
{
"filesdir": "archivos",
"dbfilename": "historias.sqlite3",
"ids": { "id": "username" },
"headers": {
"cookie": "tus cookies aqui",
"user-agent": "Instagram 10.3.2 (iPhone7,2; iPhone OS 9_3_3; en_US; en-US; scale=2.00; 750x1334) AppleWebKit/420+",
"cache-control": "no-cache"
},
"quiet": false
}
Campos a modificar:
id = user id de la cuenta que queramos descargar
username = nombre de usuario de la cuenta
tus cookies aquí: insertamos la cookie que hemos sacado anteriormente
Para sacar el id de la cuenta yo utilizo una herramienta llamada Smash Ballon pero tu puedes usar la que sea de tu preferencia. No hace falta modificar más este archivo, simplemente guardamos los ajustes y pasamos al siguiente paso.
Creación de historias.py
Este archivo será el encargado de ejecutar las funciones necesarias para conectarse a la API de Instagram, no hace falta modificar nada aquí. Solo copiamos y pegamos tal cual el siguiente código:
Insertar CODE, HTML o PHP:
#!/usr/bin/python3
import requests
import sqlite3
import json
import os
try:
with open('configuracion.json') as json_data:
prefs = json.load(json_data)
except FileNotFoundError:
print("el archivo configuracion.json no se encuentra :(")
exit()
conn = sqlite3.connect(prefs["dbfilename"])
c = conn.cursor()
c.execute("CREATE TABLE IF NOT EXISTS `entries` (`id` TEXT UNIQUE, `url` TEXT, `userid` TEXT, `username` TEXT, `taken_at` INTEGER, `filename` TEXT);")
if not prefs["quiet"]: print("Descargando las historias! :D")
while len(prefs["ids"]) > 0:
pair = prefs["ids"].popitem()
response = requests.request("GET", "https://i.instagram.com/api/v1/feed/user/"+pair[0]+"/reel_media/", headers=prefs["headers"])
if response.status_code != 200:
print("ERROR: got "+str(response.status_code)+" when fetching stories entries!")
exit
response = json.loads(response.text)
for item in response['items']:
id = item['id']
try:
url = item['video_versions'][0]['url']
except KeyError: #if there are no videos of this item
url = item['image_versions2']['candidates'][0]['url']
userid = pair[0]
username = pair[1]
taken_at = item['taken_at']
try:
c.execute('INSERT INTO entries VALUES(?,?,?,?,?,?)', (str(id),str(url),str(userid),str(username),taken_ at,""))
except sqlite3.IntegrityError: #is thrown when UNIQUE doesn't match
if not prefs["quiet"]: print('!', end='',flush=True)
else:
if not prefs["quiet"]: print('.', end='',flush=True)
conn.commit()
if not prefs["quiet"]:
print()
print("Descargando los archivos! :)")
todelete = []
toupdate = []
if not os.path.exists(prefs["filesdir"]):
os.makedirs(prefs["filesdir"])
for row in c.execute('SELECT * FROM entries WHERE filename = ""'):
r = requests.get(row[1])
if r.status_code == 404:
todelete.append(row[0])
elif r.status_code%200 < 100:
if r.headers["Content-Type"] == "video/mp4":
filename = str(row[3])+"/"+str(row[4])+".mp4"
elif r.headers["Content-Type"] == "image/jpeg":
filename = str(row[3])+"/"+str(row[4])+".jpg"
else:
filename = str(row[3])+"/"+str(row[4])+".unknown"
print("WARNING: couldn't identify MIME type for URL "+row[1])
if not os.path.exists(prefs["filesdir"]+"/"+str(row[3])):
os.makedirs(prefs["filesdir"]+"/"+str(row[3]))
with open(prefs["filesdir"]+"/"+filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
toupdate.append((filename,row[0]))
if not prefs["quiet"]: print(filename)
for item in todelete:
c.execute('DELETE FROM entries WHERE id = ?',(item,))
for item in toupdate:
c.execute('UPDATE entries SET filename = ? WHERE id = ?',item)
conn.commit()
Listo, tenemos el script listo, no hace falta descargarse nada extra, simplemente ejecutamos el script desde nuestra consola con el siguiente comando:
Insertar CODE, HTML o PHP:
python3 historias.py
Posterior a esto, el script nos creará una carpeta llamada "archivos" en donde contiene los datos descargados y un archivo .sqlite que es nuestra base de datos.
Vídeo explicativo
[video=youtube;p77SD2h0FzU]https://www.youtube.com/watch?v=p77SD2h0FzU[/video]
Puedes ejecutar un cron en tu server para que se esté generando la consulta cada determinado tiempo, pero eso ya depende de ti hacerlo o no :encouragement:
Estaría genial si alguien aportará al código o que lo pudiera llevar a otro lenguaje como PHP :encouragement: sería genial.
Si te ha gustado el tutorial deja un :encouragement: os traeré más tutoriales como este para automatizar tareas. También si quieres pasarte por mi blog eres bienvenido :witless: les mando un abrazo virtual a todos los forobetanos.
Última edición: