PHP - Obtener datos de reporte de impresoras Samsung serie 4 (4020 por ejemplo) y 5 (5370 por ejemplo)

 
Vista:

Obtener datos de reporte de impresoras Samsung serie 4 (4020 por ejemplo) y 5 (5370 por ejemplo)

Publicado por Luis Lemos (1 intervención) el 09/07/2020 19:51:03
Buenas a todos, quiero compartir con ustedes algo con lo que me rompi la cabeza hace poco para mi oficina. Se trata de unas funciones en PHP con las cuales podrán obtener los datos de reporte de impresiones de las impresoras Samsung 4020 u otras similares de la serie 4 y a su vez de las samsung 5370 o similares de la serie 5.

a continuacion el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
$context = stream_context_create(array('http' => array(
                'timeout' => 1,
                'ignore_errors' => true,
        ))); // en primer lugar vamos a declarar el contexto de la futura busqueda "file_gets_contents" con el objetivo de definir un tiempo personalizado de espera, si modifican el valor del 'timeout', pueden hacer que el chequeo se mas rapido o mas lento, o sea el tiempo de espera por respuesta mayor o menor, pero tengan en cuenta que si el tiempo es demaisado corto, puede que la impresora no llegue a responder, y si es demasiado largo estarían perdiendo tiempo. En mi caso tenia que mapear todas las impresoras de la red, por lo cual cuanto menos tiempo mejor, pero procurando darles el tiempo suficiente para responder, por lo que 1 segundo resultó útil.
 
 
 
 function Impresiones_serie4($ip) {
 
$datosimp = Array();
 
 
 
 
        $url = "http://" . $ip . "/sws/app/information/counters/counters.json"; // aquí definimos la url donde se encuentra un json con los contadores, siendo un la ip, un parámetro de la función por mi caso de uso.
 
        $json = @file_get_contents($url, false, $context); //en esta parte, obtenemos el contenido del json y lo guardamos en una variable de tipo string.
 
        $array = explode(',', $json); //aquí lo interesante, a través del comando explode, vamos  a convertir esa variable string en un ARRAY usando un delimitador (cual CSV), en este caso "," (dos puntos)
 
        $count = 0;
        $array3 = array();
 
 
        for ($i = 0; $i < count($array); $i++) {
 
            $array[$i] = str_replace('{', '', $array[$i]);
            $array[$i] = str_replace('}', '', $array[$i]);
 // a través de esta funcion STR_REPLACE, vamos a purgar los arrays resultantes, eliminando las llaves que puedan haber dentro de las cadenas de texto, para evitar que interfieran en cualquier valor resultante
 
 
            $array2 = explode(':', $array[$i]); // aquí tomamos cada valor del array anterior y lo dividimos en dos a cada elemento, resultando en un array bidimensional, obteniendo en cada posición dos elementos, uno será el título del dato del reporte y el otro el valor cuantitativo.
 
 
            $array3[$count] = $array2;
            if (strpos($array3[$count][0], "GXI_SYS_SERIAL_NUM") != FALSE) {
                $datosimp[] = $array3[$count][1];
            }
 
            if (strpos($array3[$count][0], "GXI_BILLING_PRINT_TOTAL_IMP_CNT") != FALSE) {
                $datosimp[] = intval($array3[$count][1]);
            }
            if (strpos($array3[$count][0], "GXI_BILLING_COPY_TOTAL_IMP_CNT") != FALSE) {
                $datosimp[] = intval($array3[$count][1]);
            }
            if (strpos($array3[$count][0], "GXI_BILLING_REPORT_TOTAL_IMP_CNT") != FALSE) {
                $datosimp[] = intval($array3[$count][1]);
            }
//y finalmente con los if, utilizando el conocimiento sobre el contenido del json, buscamos las palabras claves de cada dato y procedemos en guardar los datos en un array llamado $datosimp, el cual despues podemos aprovechar para desplegar los datos en pantalla o guardarlos mismo en una base de datos.
 
 
            $count++;
        }
}

y eso fue todo lo que es referencia a la funcion de la serie 4 de samsung, a continuacion la funcion para serie 5:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function Serie5($ip) {
 
 
$url = "http://" . $ip . "/sws.application/information/countersView.sws";
 
        $src = file_get_contents($url, false, $context);
 
 
 
            $array1 = explode('</td>', $src);
            for ($i = 0; $i < count($array1); $i++) {
                $array2[] = explode('<td', $array1[$i]);
            }
            $array_serie = explode('>', $array2[10][2]);
 
            $datosimp[] = $array_serie[1];
 
            array_pop($datosimp[0]); //el array pop se usa para eliminar el ultimo item deun array, que en este caso sera un espacio en blanco
 
            for ($i = 0; $i < count($array2); $i++) {
                $array3[] = explode('>', $array2[$i][1]);
            }
 
            /* echo "Total de Impresiones Doble faz: " . $array3[35][1] . "<br>";
              echo "Total de copias Doble Faz: " . $array3[36][1] . "<br>";
              echo "Total Gral de Impresiones: " . $array3[40][1] . "<br>";
              echo "Total Gral de Copias: " . $array3[41][1] . "<br>";
             */
            $datosimp[] = $array3[40][1];
            $datosimp[] = $array3[41][1];
            $datosimp[] = 0;
 
 
 
}

Bueno espero les haya servido, cualquier consulta a las órdenes
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder