trim($columna['ID']),
"URL" => trim($columna['EASYVENTURL']),
);
}
// Los servidores se obtuvieron de la página http://proxydb.net/?country=MX ** Todos son de México
$arrProxies = array(); // Lista de Proxies para realizar las peticiones
$arrProxies[0]['proxyAndPuerto'] = '201.159.22.164:46809';
$arrProxies[0]['tipoProxy'] = CURLPROXY_SOCKS4;
$arrProxies[1]['proxyAndPuerto'] = '201.144.20.231:5678';
$arrProxies[1]['tipoProxy'] = CURLPROXY_SOCKS4;
$arrProxies[2]['proxyAndPuerto'] = '45.167.253.129:999';
$arrProxies[2]['tipoProxy'] = CURLPROXY_HTTPS;
// Iteración de las URL de easyvent
foreach ($arrURLEasyVent as $dataEasyVent) {
$exito = true;
$totalProxies = count($arrProxies) - 1;
// Iteración de las proxies guardadas
for ($i = 0; $i <= $totalProxies; $i++) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $dataEasyVent['URL']); // Dirección URL a capturar
curl_setopt($ch, CURLOPT_PROXY, $arrProxies[$i]['proxyAndPuerto']); // El proxy HTTP para enviar peticiones a través de tunel.
curl_setopt($ch, CURLOPT_PROXYTYPE, $arrProxies[$i]['tipoProxy']); // Puede ser CURLPROXY_HTTP (por defecto), CURLPROXY_SOCKS4, CURLPROXY_SOCKS5, CURLPROXY_SOCKS4A o CURLPROXY_SOCKS5_HOSTNAME
curl_setopt($ch, CURLOPT_TIMEOUT, 60); // Número máximo de segundos permitido para ejectuar funciones cURL
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60); // Número de segundos a esperar cuando se está intentado conectar. Use 0 para esperar indefinidamente
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // "true" para seguir cualquier encabezado "Location: " que el servidor envíe como parte del encabezado HTTP (observe la recursividad, PHP seguirá tantos header "Location: " como se envíen, a no ser que la opción CURLOPT_MAXREDIRS esté establecida)
//curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // Número máximo de redirecciones HTTP a seguir. Use esta opción con CURLOPT_FOLLOWLOCATION
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // "true" para devolver el resultado de la transferencia como string del valor de curl_exec() en lugar de mostrarlo directamente
$data = curl_exec($ch); // Ejecuta la sesión cURL que se le pasa como parámetro
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); // Obtener información sobre una transferencia específica -> El último código de respuesta. A partir de PHP 5.5.0 y cURL 7.10.8, este es un alias heredado de CURLINFO_RESPONSE_CODE
curl_close($ch); // Cierra la sesión cURL
// Comprobación si se obtuvo los datos del proxy
if (($httpcode >= 200) && ($httpcode < 300)) {
$contenido = $data;
// Identificar si se obtuvo la tabla
if ( !empty($contenido) ) {
// Contenido de la tabla
$tablaHTML = "
";
$seccionGris = strstr($contenido, "section section-grey");
$removeFooter = strstr($seccionGris, "section cookie-warning", true);
$tablaHTML .= ("
");
$tablaHTML .= "
";
// Cambiar las comillas dobles "" por comillas simples ''
$tablaHTML = str_replace("'", '"', $tablaHTML);
// Variable de fecha de modificación
$fechaHoy = date("Y-m-d");
$FUPD = date("Y-m-d H:i:s");
// Consultar si existe en la tabla de datos de easyvent
$queryConsulta = " SELECT IDPROD, FECHAMOD FROM ITT_ASW_EASYVENT WHERE IDPROD = '" . $dataEasyVent['ID'] . "' ";
$resultado = mysqli_query($conexion, $queryConsulta) or die("Algo ha ido mal en la consulta a la base de datos");
$arrEasy = array();
while ($columna = mysqli_fetch_assoc($resultado)) {
$arrEasy = array(
"IDPROD" => trim($columna['IDPROD']),
"FECHAMOD" => trim($columna['FECHAMOD'])
);
}
$dateTimeEasyVent = date("Y-m-d", strtotime($arrEasy['FECHAMOD'] ));
// Verificar si existe para modificar o ingresar el nuevo dato
if ( empty($arrEasy) ) {
$queryInsert = "INSERT INTO ITT_ASW_EASYVENT (IDPROD, DATATABLE, FECHAMOD) VALUES ('" . trim($dataEasyVent['ID']) . "', '" . trim($tablaHTML) . "', '" . trim($FUPD) . "');";
if (!mysqli_query($conexion, $queryInsert)) {
$exito = false;
$errorDescripcion = 'SQL INSERT MEX|' . $dataEasyVent['ID'];
$respuesta = conectarWebService($errorDescripcion, "sendEtlError");
}else{
goto next;
}
}else if( !empty($arrEasy) && $fechaHoy > $dateTimeEasyVent) {
$queryUpdate = "UPDATE ITT_ASW_EASYVENT SET DATATABLE = '" . trim($tablaHTML) . "', FECHAMOD = '" . trim($FUPD) . "' WHERE ( IDPROD = '" . trim($dataEasyVent['ID']) . "' );";
if (!mysqli_query($conexion, $queryUpdate)) {
$exito = false;
$errorDescripcion = 'SQL UPDATE MEX|' . $dataEasyVent['ID'];
$respuesta = conectarWebService($errorDescripcion, "sendEtlError");
}else{
goto next;
}
}
} else {
$exito = false;
$errorDescripcion = 'EMPTY TABLE MEX|' . $dataEasyVent['ID'];
$respuesta = conectarWebService($errorDescripcion, "sendEtlError");
}
}else{
$exito = false;
$errorDescripcion = 'ERROR PROXY MEX|' . $dataEasyVent['ID'];
$respuesta = conectarWebService($errorDescripcion, "sendEtlError");
}
}
next:
}
fin_extraerTabla:
if($exito == false){
$respuesta = conectarWebService($errorDescripcion, "sendEtlError");
}
function conectarWebService($dataPlain, $function) {
// URL del webservice
$wsdl = "https://smart.solerpalau.mx/QA/WS001_ASW.php?wsdl";
// Verificamos si esta disponible
$headers = @get_headers($wsdl);
if (preg_match('/^HTTP\/\d\.\d\s+(200|301|302)/', $headers[0])) {
// Instanciando un nuevo objeto cliente para consumir el webservice
$client = new nusoap_client($wsdl, 'wsdl');
$param = array('datos' => $dataPlain);
// Llamando al método y pasándole el array con los parámetros
$resultado = $client->call($function, $param);
return $resultado;
}
}