xaiborweb
Programador
No recomendado
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
creo que este error es cuando el texto a traducir es demasiado largo.PHP Fatal error: Uncaught ErrorException: Client error: `POST http://translate.google.com/translate_a/single?client=t&hl=en&dt=t&sl=en&tl=es&ie=UTF-8&oe=UTF-8&multires=1&otf=0&pc=1&trs=1&ssel=0&tsel=0&kc=1&tk=387179.252693` resulted in a `413 Request Entity Too Large` response:
function catch_fatal_error(){
$error = error_get_last();
//COMPROBAR QUE EL ERROR SEA FATAL
if($error['type']==E_ERROR) {
//LO QUE QUIERAS HACER CUANDO HAYA UN FATAL ERROR
}
}
register_shutdown_function('catch_fatal_error');
Debes hacer que tu script traduzca por partes, por ejemplo de 1 a 500 palabras y así sucesivamente hasta completar el total de palabras de otro modo te va a salir el error y otra cosa también que debes de mirar el tiempo máximo de ejecución del php.ini si tu script pasa de 30 segundos debes de buscar una manera util de programar ya que esto para un usuario es muy tedioso.
Se dice que un script que tarde mas de 30seguns en hacer algo está mal programado.
*scrapeo
id
url
completado
Haz una tabla en tu BD así:
Insertar CODE, HTML o PHP:*scrapeo id url completado
Antes de empezar a scrapear primero inserta tus 400,000 urls en la tabla, todas con completado=0.
Luego haz que tu script comience a scrapear basado en las URL con completado=0 de tu tabla.
Cuando tu script termine de traducir una URL entonces actualiza su registro a completado=1.
De esta manera si tu script se detiene en cualquier momento sabrás en que registró se quedó (completado=1), solo tendrás que ejecutarlo nuevamente y continuará donde debe continuar.
Espero haberme explicado.
PD. Incluso puedes ponerle un LIMIT a la consulta o un tiempo de ejecución al PHP de 30 minutos, para que no arroje errores, es decir que se detenga cada 30 minutos, y lo ejecutas nuevamente y automáticamente mediante un cron job.
Hice exactamente lo mismo cuando subí 700,000 pequeños archivos a Amazon S3.
PD2. Traduce párrafo por párrafo (<p>) para evitar errores.
Me parece una buena idea lo que propone, agregaria un campo numeroDeIntentos, para que luego de un intento fallido aumente en uno este numero y le de prioridad a los que tienen 0 intentos, ya que asi lograrias traducir todos los que no te dan problema, y despues te quedaria una minoria problematicos. Saludos!!
Bueno lo que creo conveniente es que al momento de scrapear contar el numero de palabras de la publicación y si es superior a 500 palabras entonces dividirla en dos partes(250/250) 413 Request Entity Too Large y hacer la petición, en cuanto a error 404 es probable por que haces demasiadas peticiones a don google y el te limita... Como dice don cicklow puedes agregar el try / catch o en su caso llevar una tabla adicional como la comenta el amigo epicmedia en donde si se scrapeo correctamente entonces colocar OK o 1 de lo contrario NO o 0 como gustes, de esta manera llevar un control... jaja 400 mil post les vas acabar la web a ellos xD
Seria también que el proceso de traducción fuera menos rápido por que google no le gusta mucho eso xD
Disclaimer
This package is developed for educational purposes only. Do not depend on this package as it may break anytime as it is based on crawling the Google Translate website. Consider buying Official Google Translate API for other types of usage.
Also, Google might ban your server IP or requre to solve CAPTCHA if you send unusual traffic (large amount of data/requests).
Ademas de google hay más traductores 😉
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?