Puko
Dseda
Verificación en dos pasos activada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
y si no tengo "clipboard" como lo modifico para que continue asi como esta el codigo sin quitarle nada y no diga No module named 'clipboard' ?Sí, puedes hacerlo usando la libreríaclipboard
que te permitirá acceder al contenido del portapapeles. Aquí te dejo un ejemplo:
Recuerda instalar la libreríaPython:import os import clipboard def seleccion_url(): print("\nIntroduce URL:\n1 Desde el portapapeles\n2 Manualmente") opcion = input("> ") if opcion == '1': return clipboard.paste() # Obtiene la URL del portapapeles elif opcion == '2': return input("Introduce URL > ") else: print("Opción no válida, intenta de nuevo.") return seleccion_url() print("tiktok") url = seleccion_url() descarga = seleccion_carpeta() input("Presiona 'Enter' para continuar") command = f'yt-dlp -f best[format_id*=h264_540p] -o "{descarga}/%(upload_date)s - %(title)s (%(id)s).%(ext)s" "{url}"' os.system(command)
clipboard
usando pip:
Este código permitirá que el usuario introduzca una URL ya sea pegándola desde el portapapeles o escribiéndola manualmente.Insertar CODE, HTML o PHP:pip install clipboard
Si no tienes la librería "clipboard" o no puedes instalarla, puedes simplemente quitar esa parte de la lógica. Aquí te dejo cómo quedaría el código:y si no tengo "clipboard" como lo modifico para que continue asi como esta el codigo sin quitarle nada y no diga No module named 'clipboard' ?
import os
def seleccion_url():
url = input("Introduce URL > ")
return url
def seleccion_carpeta():
print("\nEscoge la carpeta de descarga:\n1 Descargas\n2 Escritorio\n3 Manual (introduce la ruta)")
opcion = input("> ")
if opcion == '1':
return os.path.expandvars('%userprofile%\\Downloads')
elif opcion == '2':
return os.path.expandvars('%userprofile%\\Desktop')
elif opcion == '3':
return input("Introduce la ruta de descarga > ")
else:
print("Opción no válida, intenta de nuevo.")
return seleccion_carpeta()
print("tiktok")
url = seleccion_url()
descarga = seleccion_carpeta()
input("Presiona 'Enter' para continuar")
command = f'yt-dlp -f best[format_id*=h264_540p] -o "{descarga}/%(upload_date)s - %(title)s (%(id)s).%(ext)s" "{url}"'
os.system(command)
Ya funciona 🥳 nomas que me diste el codigo en partes, los junte y hasta con "clipboard" funcionaSi no tienes la librería "clipboard" o no puedes instalarla, puedes simplemente quitar esa parte de la lógica. Aquí te dejo cómo quedaría el código:
Python:import os def seleccion_url(): url = input("Introduce URL > ") return url def seleccion_carpeta(): print("\nEscoge la carpeta de descarga:\n1 Descargas\n2 Escritorio\n3 Manual (introduce la ruta)") opcion = input("> ") if opcion == '1': return os.path.expandvars('%userprofile%\\Downloads') elif opcion == '2': return os.path.expandvars('%userprofile%\\Desktop') elif opcion == '3': return input("Introduce la ruta de descarga > ") else: print("Opción no válida, intenta de nuevo.") return seleccion_carpeta() print("tiktok") url = seleccion_url() descarga = seleccion_carpeta() input("Presiona 'Enter' para continuar") command = f'yt-dlp -f best[format_id*=h264_540p] -o "{descarga}/%(upload_date)s - %(title)s (%(id)s).%(ext)s" "{url}"' os.system(command)
Con esto, el programa te pedirá de manera manual la URL, sin la opción de obtenerla desde el portapapeles.
¡Genial! Me alegra mucho saber que el código está funcionando correctamente para ti. Si tienes más preguntas o necesitas ayuda con algo más, no dudes en preguntar. ¡Sigue programando!Ya funciona 🥳 nomas que me diste el codigo en partes, los junte y hasta con "clipboard" funciona
var coco=document.getElementsByClassName("nombre")[0];Aquí te dejo un ejemplo de cómo puedes hacerlo en Python:
Python:import os print("tiktok") url = input("Introduce URL > ") descarga = input("Introduce carpeta de descarga > ") input("Presiona 'Enter' para continuar") command = f'yt-dlp -f best[format_id*=h264_540p] -o "{descarga}/%(upload_date)s - %(title)s (%(id)s).%(ext)s" "{url}"' os.system(command)
Este script tomará la URL y la carpeta de descarga que ingreses, las usará para construir un comando yt-dlp, y luego ejecutará ese comando. Asegúrate de instalar yt-dlp en tu entorno para que este script funcione correctamente.
Para verificar que hay texto en un input en JavaScript, puedes usar el atributovar coco=document.getElementsByClassName("nombre")[0];
if(coco.value=false){
alert("parece que hay texto");
}
como hago para verificar que hay texto en un input??
.value
del elemento input y verificar si es un string vacío o no. Tu código sería:var coco = document.getElementsByClassName("nombre")[0];
if(coco.value){
alert("parece que hay texto");
} else {
alert("el input está vacío");
}
if (coco.value)
se evalúa a true
cuando hay texto.oks, ahora puedes añadirle que no puedan escribir letras con tilde y comillas?Para verificar que hay texto en un input en JavaScript, puedes usar el atributo.value
del elemento input y verificar si es un string vacío o no. Tu código sería:
Esto mostrará una alerta que dice "parece que hay texto" cuando haya texto en el input, y "el input está vacío" cuando no haya texto. Nota que en JavaScript, un string vacío se considera falsy, por lo queJavaScript:var coco = document.getElementsByClassName("nombre")[0]; if(coco.value){ alert("parece que hay texto"); } else { alert("el input está vacío"); }
if (coco.value)
se evalúa atrue
cuando hay texto.
Sí, puedes usar una expresión regular (regex) para comprobar que el texto no contenga letras con tildes ni comillas. Aquí te dejo cómo podrías hacerlo:oks, ahora puedes añadirle que no puedan escribir letras con tilde y comillas?
var coco = document.getElementsByClassName("nombre")[0];
var texto = coco.value;
var regex = /^[^áéíóúüÁÉÍÓÚÜ"'`]+$/; // No permite tildes, comillas simples ni dobles.
if(texto) {
if(regex.test(texto)) {
alert("El texto es válido");
} else {
alert("El texto contiene caracteres inválidos (tildes o comillas)");
}
} else {
alert("El input está vacío");
}
pointer-events:none;Sí, puedes usar una expresión regular (regex) para comprobar que el texto no contenga letras con tildes ni comillas. Aquí te dejo cómo podrías hacerlo:
JavaScript:var coco = document.getElementsByClassName("nombre")[0]; var texto = coco.value; var regex = /^[^áéíóúüÁÉÍÓÚÜ"'`]+$/; // No permite tildes, comillas simples ni dobles. if(texto) { if(regex.test(texto)) { alert("El texto es válido"); } else { alert("El texto contiene caracteres inválidos (tildes o comillas)"); } } else { alert("El input está vacío"); }
Este código mostrará una alerta que dice "El texto es válido" si no hay tildes ni comillas, "El texto contiene caracteres inválidos (tildes o comillas)" si hay alguno de estos caracteres, y "El input está vacío" si no hay texto.
La propiedad CSSpointer-events:none;
el pointer funciona para todos los navegadores??
pointer-events: none;
es ampliamente soportada en la mayoría de los navegadores modernos, incluyendo Google Chrome, Firefox, Safari, y las últimas versiones de Edge e Internet Explorer. Sin embargo, puede haber algunas inconsistencias a la hora de manejar cierto tipos de eventos o en navegadores más antiguos. Por ejemplo, Internet Explorer 10 y versiones anteriores no soportan pointer-events
en elementos HTML, solo en SVGs. Te recomiendo revisar la compatibilidad exacta en la documentación o en páginas como "Can I use".var r = new Resumable({La propiedad CSSpointer-events: none;
es ampliamente soportada en la mayoría de los navegadores modernos, incluyendo Google Chrome, Firefox, Safari, y las últimas versiones de Edge e Internet Explorer. Sin embargo, puede haber algunas inconsistencias a la hora de manejar cierto tipos de eventos o en navegadores más antiguos. Por ejemplo, Internet Explorer 10 y versiones anteriores no soportanpointer-events
en elementos HTML, solo en SVGs. Te recomiendo revisar la compatibilidad exacta en la documentación o en páginas como "Can I use".
Tu código está funcionando correctamente para manejar subida de archivos, pero hay un detalle que podrías estar pasando por alto y es que, la biblioteca Resumable.js maneja solo la subida de archivos. No maneja ni llena otros campos de input en un formulario, por ejemplo inputs de texto.var r = new Resumable({
target:'uploadpro.php',
chunkSize:1*1024*1024,
simultaneousUploads:4,
testChunks:false,
throttleProgressCallbacks:1,
maxFileSize: 250*1024*1024, // Set maximum file size to 250MB
});
r.assignDrop(document.getElementById('dropTarget'));
r.assignBrowse(document.getElementById('browseButton'));
r.on('fileAdded', function(file) {
if(file.size > r.getOpt('maxFileSize')) {
r.removeFile(file);
if(!document.querySelector('.plants')){
migrate("Tamaño maximo 250MB!");
}
return;
} else if (r.files.length > 1) {
r.removeFile(file);
if(!document.querySelector('.plants')){
migrate("1 archivo a la vez!");
}
return;
}
r.upload();
});
r.on('uploadStart', function() {
document.getElementById('mbRemaining').textContent = 'MB restantes: calculando...';
});
r.on('progress', function() {
var progress = r.progress() * 100;
document.getElementById('barra_estado').style.width = progress + '%';
document.getElementsByClassName("bluegold")[0].style.pointerEvents = "none";
var remainingSize = r.getSize() - r.progress() * r.getSize();
document.getElementById('mbRemaining').textContent = 'MB restantes: ' + (remainingSize / (1024 * 1024)).toFixed(2);
});
r.on('fileSuccess', function(file, message) {
console.log('Archivo cargado correctamente', file, message);
document.getElementById('barra_estado').style.backgroundColor = 'green';
});
r.on('fileError', function(file, message) {
console.log('Error al cargar el archivo', file, message);
document.getElementById('barra_estado').style.backgroundColor = 'red';
});
tengo una duda, porque solo sube los videos pero no detecta los demas input??
mysqli_query($conexion,"UPDATE user SET password='".$_POST['password']."', email='".$_POST['email']."' where email='".$_SESSION['email']."'");Tu código está funcionando correctamente para manejar subida de archivos, pero hay un detalle que podrías estar pasando por alto y es que, la biblioteca Resumable.js maneja solo la subida de archivos. No maneja ni llena otros campos de input en un formulario, por ejemplo inputs de texto.
Si estás usando un formulario y esperas que este código suba otros datos del formulario (como los inputs de texto, seleccionadores, checkboxes, etc), necesitarías manejar esos inputs de manera separada, ya sea con un manejo de formularios tradicional o mediante AJAX.
Y si tus intenciones son subir otros tipos de archivos (no solo videos) y Resumable.js no los está detectando, verifica si esos archivos cumplen con las reglas que estableces en la función 'fileAdded' como el tamaño y cantidad permitida. Asegúrate también de que el input de archivos permita seleccionar los tipos de archivos que intentas subir.
Puedes actualizar la entrada más reciente (es decir, con el ID más grande, dado que los IDs suelen incrementarse automáticamente) usando una subconsulta SQL para seleccionar el ID máximo. Tu consulta se vería de la siguiente manera:mysqli_query($conexion,"UPDATE user SET password='".$_POST['password']."', email='".$_POST['email']."' where email='".$_SESSION['email']."'");
como hago para que este update solo seleccione el ultimo id??
mysqli_query($conexion,"UPDATE user SET password='".$_POST['password']."', email='".$_POST['email']."' WHERE id = (SELECT MAX(id) FROM user)");
user
. Pero ten en cuenta que esto podría no funcionar como esperas si tienes múltiples usuarios trabajando con la base de datos simultáneamente. Idealmente, deberías tener algún otro criterio para seleccionar el registro que quieras actualizar, para asegurarte de que estás actualizando la entrada correcta.como hago para reemplazar comillas y tildes en php?Puedes actualizar la entrada más reciente (es decir, con el ID más grande, dado que los IDs suelen incrementarse automáticamente) usando una subconsulta SQL para seleccionar el ID máximo. Tu consulta se vería de la siguiente manera:
PHP:mysqli_query($conexion,"UPDATE user SET password='".$_POST['password']."', email='".$_POST['email']."' WHERE id = (SELECT MAX(id) FROM user)");
Eso actualizaría la entrada con el ID más grande en la tablauser
. Pero ten en cuenta que esto podría no funcionar como esperas si tienes múltiples usuarios trabajando con la base de datos simultáneamente. Idealmente, deberías tener algún otro criterio para seleccionar el registro que quieras actualizar, para asegurarte de que estás actualizando la entrada correcta.
Puedes usar la funcióncomo hago para reemplazar comillas y tildes en php?
str_replace
en PHP para reemplazar las comillas y tildes. Aquí te dejo un ejemplo:$texto = "¡Hola, cómo 'estás'?";
$busqueda = array('á', 'é', 'í', 'ó', 'ú', 'Á', 'É', 'Í', 'Ó', 'Ú', "'", '"');
$reemplazo = array('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U', '', '');
$textoNuevo = str_replace($busqueda, $reemplazo, $texto);
$busqueda
es un array de los caracteres que queremos reemplazar, y $reemplazo
es un array de los caracteres con los que queremos reemplazarlos. La función str_replace
luego reemplaza cada instancia de cada carácter en $busqueda
con el carácter correspondiente en $reemplazo
.<form id="uploadForm" action="uploadpro.php" method="POST" enctype="multipart/form-data">Puedes usar la funciónstr_replace
en PHP para reemplazar las comillas y tildes. Aquí te dejo un ejemplo:
PHP:$texto = "¡Hola, cómo 'estás'?"; $busqueda = array('á', 'é', 'í', 'ó', 'ú', 'Á', 'É', 'Í', 'Ó', 'Ú', "'", '"'); $reemplazo = array('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U', '', ''); $textoNuevo = str_replace($busqueda, $reemplazo, $texto);
En el código anterior,$busqueda
es un array de los caracteres que queremos reemplazar, y$reemplazo
es un array de los caracteres con los que queremos reemplazarlos. La funciónstr_replace
luego reemplaza cada instancia de cada carácter en$busqueda
con el carácter correspondiente en$reemplazo
.
Tu código actual debería aceptar solo archivos .mp4 debido a la línea<form id="uploadForm" action="uploadpro.php" method="POST" enctype="multipart/form-data">
<input type="hidden" accept="video/mp4" required id="fileInput" name="file">
</form>
<div id="dropTarget">Arrastra y suelta los archivos aquí</div>
<button id="browseButton">Seleccionar archivos</button>
<div class="barra"><div class="barra_azul" id="barra_estado"><span></span></div></div>
<div id="mbRemaining">MB restantes: N/A</div>
<script>
var r = new Resumable({
target:'uploadpro.php',
chunkSize:1*1024*1024,
simultaneousUploads:4,
testChunks:false,
throttleProgressCallbacks:1,
maxFileSize: 250*1024*1024, // Set maximum file size to 250MB
});
r.assignDrop(document.getElementById('dropTarget'));
r.assignBrowse(document.getElementById('browseButton'));
r.on('fileAdded', function(file) {
if(file.size > r.getOpt('maxFileSize')) {
r.removeFile(file);
if(!document.querySelector('.plants')){
migrate("Tamaño maximo 250MB!");
}
return;
} else if (r.files.length > 1) {
r.removeFile(file);
if(!document.querySelector('.plants')){
migrate("1 archivo a la vez!");
}
return;
}
r.upload();
});
r.on('uploadStart', function() {
document.getElementById('mbRemaining').textContent = 'MB restantes: calculando...';
});
r.on('progress', function() {
var progress = r.progress() * 100;
document.getElementById('barra_estado').style.width = progress + '%';
document.getElementsByClassName("bluegold")[0].style.pointerEvents = "none";
var remainingSize = r.getSize() - r.progress() * r.getSize();
document.getElementById('mbRemaining').textContent = 'MB restantes: ' + (remainingSize / (1024 * 1024)).toFixed(2);
});
r.on('fileSuccess', function(file, message) {
console.log('Archivo cargado correctamente', file, message);
document.getElementById("merum").style.display = "block";
document.getElementsByClassName("bluegold")[0].style.display = "none";
document.getElementById('barra_estado').style.backgroundColor = 'green';
});
r.on('fileError', function(file, message) {
console.log('Error al cargar el archivo', file, message);
document.getElementById('barra_estado').style.backgroundColor = 'red';
});
</script>
como hago para que este codigo busque solo los archivos .mp4??
accept="video/mp4"
en tu etiqueta de entrada del archivo. Sin embargo, Resumable.js no respeta el atributo de aceptar de los elementos de entrada del archivo y tienes que implementar la restricción de tipo de archivo manualmente:r.on('fileAdded', function(file) {
var fileType = file.fileType;
if (fileType !== 'mp4') {
alert('Por favor, selecciona solo archivos .mp4');
r.removeFile(file);
return;
}
//... Resto de tu código
});
podrias añadir el codigo complto porfa?Tu código actual debería aceptar solo archivos .mp4 debido a la líneaaccept="video/mp4"
en tu etiqueta de entrada del archivo. Sin embargo, Resumable.js no respeta el atributo de aceptar de los elementos de entrada del archivo y tienes que implementar la restricción de tipo de archivo manualmente:
Insertar CODE, HTML o PHP:r.on('fileAdded', function(file) { var fileType = file.fileType; if (fileType !== 'mp4') { alert('Por favor, selecciona solo archivos .mp4'); r.removeFile(file); return; } //... Resto de tu código });
Esta verificación asegurará que solo archivos .mp4 son procesados y un mensaje de alerta se mostrará si se intenta añadir un archivo que no es .mp4.
Por supuesto, aquí está el código completo ajustado para permitir solo archivos .mp4.podrias añadir el codigo complto porfa?
<form id="uploadForm" action="uploadpro.php" method="POST" enctype="multipart/form-data">
<input type="hidden" accept="video/mp4" required id="fileInput" name="file">
</form>
<div id="dropTarget">Arrastra y suelta los archivos aquí</div>
<button id="browseButton">Seleccionar archivos</button>
<div class="barra"><div class="barra_azul" id="barra_estado"><span></span></div></div>
<div id="mbRemaining">MB restantes: N/A</div>
<script>
var r = new Resumable({
target:'uploadpro.php',
chunkSize:1*1024*1024,
simultaneousUploads:4,
testChunks:false,
throttleProgressCallbacks:1,
maxFileSize: 250*1024*1024, // Set maximum file size to 250MB
});
r.assignDrop(document.getElementById('dropTarget'));
r.assignBrowse(document.getElementById('browseButton'));
r.on('fileAdded', function(file) {
var fileType = file.file.type;
if (fileType.indexOf('mp4') === -1) {
alert('Por favor, selecciona solo archivos .mp4');
r.removeFile(file);
return;
}
if(file.size > r.getOpt('maxFileSize')) {
r.removeFile(file);
if(!document.querySelector('.plants')){
migrate("Tamaño maximo 250MB!");
}
return;
} else if (r.files.length > 1) {
r.removeFile(file);
if(!document.querySelector('.plants')){
migrate("1 archivo a la vez!");
}
return;
}
r.upload();
});
r.on('uploadStart', function() {
document.getElementById('mbRemaining').textContent = 'MB restantes: calculando...';
});
r.on('progress', function() {
var progress = r.progress() * 100;
document.getElementById('barra_estado').style.width = progress + '%';
document.getElementsByClassName("bluegold")[0].style.pointerEvents = "none";
var remainingSize = r.getSize() - r.progress() * r.getSize();
document.getElementById('mbRemaining').textContent = 'MB restantes: ' + (remainingSize / (1024 * 1024)).toFixed(2);
});
r.on('fileSuccess', function(file, message) {
console.log('Archivo cargado correctamente', file, message);
document.getElementById("merum").style.display = "block";
document.getElementsByClassName("bluegold")[0].style.display = "none";
document.getElementById('barra_estado').style.backgroundColor = 'green';
});
r.on('fileError', function(file, message) {
console.log('Error al cargar el archivo', file, message);
document.getElementById('barra_estado').style.backgroundColor = 'red';
});
</script>
file.type
(que refleja el MIME type
del archivo). Si el 'MIME type' no contiene 'mp4', significa que el archivo no es un .mp4, y muestra una alerta y luego remueve el archivo del cargador.Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?