extraer datos de pagina con file_get_contents

Iniciado por kanser, 17 Noviembre 2011, 08:27 AM

0 Miembros y 1 Visitante están viendo este tema.

h3ct0r

El problema no es que lo entiendas tu, que lo haces, sino los demas, que lo mantienen. Yo se que tu puedes hacerlo, no es dificil. ;).

Estas equivocado con los framework. La idea de usar alguno es precisamente para no reinventar la rueda de mala manera, para asi solo usar tecnicas y herramientas probadas y testeadas para ser la mejor opcion. No se que frameworks lentos usaras tu (o si tu mismo te codeas frameworks lentos).

Yo tengo varios freeBSD corriendo como firewall en pentium2 y con muy poco ram. Y justamente, ademas de las reglas y optimizaciones que hago, esta corriendo un sistema testeado por la comunidad, que en principio nunca mudara de ese hardware pequeno. Y corre muuuy bien mi firewall/framework con alguno que otro codigo extra hecho por mi.

Y volviendo al tema, para lo que kanser necesita, segun sus explicaciones, es mejor un parser. Que lo puede hacer con una expresion regular grande, pues claro que puede!, pero no es la mejor opcion.
[img[/img]

~ Yoya ~

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

h3ct0r

[img[/img]

WHK

#13
Acá hize un simple script que hace lo que necesitas:



Código (php) [Seleccionar]
<?php
$a 
'
xxx
<input maxlength="3" onkeypress="SoloNumerico();" class="FormCasillas" size="1" name="Change120088Producto1" value="1" type="text">
<input maxlength="3" onkeypress="SoloNumerico();" class="FormCasillas" size="1" name="Change120088Producto1" value="2" type="text">
xxx
<input maxlength="3" onkeypress="SoloNumerico();" class="FormCasillas" size="1" name="Change120088Producto1" value="3" type="text">
<td class="TextoGeneralTabla" align="right" width="15%"><b>

$
627,732.00&nbsp;&nbsp;&nbsp;</b></td>
'
;

/* Obtiene el costo: */
$b explode('&nbsp;&nbsp;&nbsp;</b></td>'$a);
$b explode('$'$b[0]);
$b $b[count($b) - 1];
$b preg_replace('|[^0-9\.,]|i'''$b);
echo 
'<p>Valor costo: <strong>'.$b.'</strong></p>';
// 627,732.00

/* Obtiene lovalores numéricos */
$r = array();
$d explode('onkeypress="SoloNumerico();" '$a);
foreach(
$d as $b){
$c explode('value="'$b);
$c explode('"'$c[1]);
if((int)$c[0] > 0)
$r[] = (int)$c[0];
}

echo 
'Valores numéricos: <pre>'.print_r($rtrue).'</pre>';
/*
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
*/
?>


Saludos.

~ Yoya ~

Código (php) [Seleccionar]
<?php
$tablaHTML 
' <table class="TextoGeneral" align="CENTER" border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody><tr class="TextoGeneralRojomedium">
<td colspan="6"><b>
</b></td>
</tr>
<tr>
<td class="FormTitulo" align="CENTER" width="8%">Remover</td>

<td class="FormTitulo" align="CENTER" width="8%">Cantidad</td>

      <td class="FormTitulo" align="LEFT" width="25%">&nbsp;Descripción 
        del Producto</td>
<td class="FormTitulo" align="CENTER" width="15%">ID Producto</td>
<td class="FormTitulo" align="CENTER" width="15%">Precio Unitario</td>
<td class="FormTitulo" align="CENTER" width="15%">Precio Total</td>
</tr>

<tr>

<td class="TextoGeneralTabla" align="CENTER" width="8%"><input name="Check" value="Producto 3" type="radio"></td>
<td class="TextoGeneralTabla" align="CENTER" width="8%"><input maxlength="3" onkeypress="SoloNumerico();" class="FormCasillas" size="1" name="Change120088Producto0" value="7" type="text"></td>
<td class="TextoGeneralTabla" align="CENTER" width="25%">Producto 3</td>
<td class="TextoGeneralTabla" align="CENTER" width="15%">-</td>
<td class="TextoGeneralTabla" align="RIGHT" width="15%">

$ <input name="TipoMonedaProducto 3" value="1" type="hidden">
89,076.00&nbsp;&nbsp;&nbsp;</td>

<td class="TextoGeneralTabla" align="RIGHT" width="15%">


$
623,532.00&nbsp;&nbsp;&nbsp;</td>

</tr>
<tr>

<td class="TextoGeneralTabla" align="CENTER" width="8%"><input name="Check" value="Producto 2" type="radio"></td>
<td class="TextoGeneralTabla" align="CENTER" width="8%"><input maxlength="3" onkeypress="SoloNumerico();" class="FormCasillas" size="1" name="Change120088Producto1" value="6" type="text"></td>
<td class="TextoGeneralTabla" align="CENTER" width="25%">Producto 2</td>
<td class="TextoGeneralTabla" align="CENTER" width="15%">-</td>
<td class="TextoGeneralTabla" align="RIGHT" width="15%">

$ <input name="TipoMonedaProducto 2" value="1" type="hidden">

700.00&nbsp;&nbsp;&nbsp;</td>

<td class="TextoGeneralTabla" align="RIGHT" width="15%">

$
4,200.00&nbsp;&nbsp;&nbsp;</td>

</tr>
<tr>

<td colspan="5" class="TextoGeneralTabla" align="RIGHT" width="55%"><b>Total&nbsp;&nbsp;&nbsp;</b></td>
<td class="TextoGeneralTabla" align="right" width="15%"><b>

$
627,732.00&nbsp;&nbsp;&nbsp;</b></td>

</tr>
</tbody></table>'
;


preg_match_all('/(?=name\=\"Change120088Producto\d\"\s[^=]+=\"(\d+)\")|TextoGeneralTabla" align="right" width="15%"><b>\s[^\d]+([\d\,]+)/i'$tablaHTML,$result);

print_r($result);
?>




Código (xd,15,16,24) [Seleccionar]
Array
(
   [0] => Array
       (
           [0] =>
           [1] =>
           [2] => TextoGeneralTabla" align="right" width="15%"><b>

$
627,732
       )

   [1] => Array
       (
           [0] => 7
           [1] => 6
           [2] =>
       )

   [2] => Array
       (
           [0] =>
           [1] =>
           [2] => 627,732
       )

)



Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

h3ct0r

#15
Código (php) [Seleccionar]
<?php
include('simple_html_dom.php');

$str '
<table class="TextoGeneral" align="CENTER" border="0" cellpadding="2" cellspacing="2" width="100%">
<tbody><tr class="TextoGeneralRojomedium">
<td colspan="6"><b>
</b></td>
</tr>
<tr>
<td class="FormTitulo" align="CENTER" width="8%">Remover</td>

<td class="FormTitulo" align="CENTER" width="8%">Cantidad</td>

      <td class="FormTitulo" align="LEFT" width="25%">&nbsp;Descripción 
        del Producto</td>
<td class="FormTitulo" align="CENTER" width="15%">ID Producto</td>
<td class="FormTitulo" align="CENTER" width="15%">Precio Unitario</td>
<td class="FormTitulo" align="CENTER" width="15%">Precio Total</td>
</tr>

<tr>

<td class="TextoGeneralTabla" align="CENTER" width="8%"><input name="Check" value="Producto 3" type="radio"></td>
<td class="TextoGeneralTabla" align="CENTER" width="8%"><input maxlength="3" onkeypress="SoloNumerico();" class="FormCasillas" size="1" name="Change120088Producto0" value="7" type="text"></td>
<td class="TextoGeneralTabla" align="CENTER" width="25%">Producto 3</td>
<td class="TextoGeneralTabla" align="CENTER" width="15%">-</td>
<td class="TextoGeneralTabla" align="RIGHT" width="15%">

$ <input name="TipoMonedaProducto 3" value="1" type="hidden">
89,076.00&nbsp;&nbsp;&nbsp;</td>

<td class="TextoGeneralTabla" align="RIGHT" width="15%">


$
623,532.00&nbsp;&nbsp;&nbsp;</td>

</tr>
<tr>

<td class="TextoGeneralTabla" align="CENTER" width="8%"><input name="Check" value="Producto 2" type="radio"></td>
<td class="TextoGeneralTabla" align="CENTER" width="8%"><input maxlength="3" onkeypress="SoloNumerico();" class="FormCasillas" size="1" name="Change120088Producto1" value="6" type="text"></td>
<td class="TextoGeneralTabla" align="CENTER" width="25%">Producto 2</td>
<td class="TextoGeneralTabla" align="CENTER" width="15%">-</td>
<td class="TextoGeneralTabla" align="RIGHT" width="15%">

$ <input name="TipoMonedaProducto 2" value="1" type="hidden">

700.00&nbsp;&nbsp;&nbsp;</td>

<td class="TextoGeneralTabla" align="RIGHT" width="15%">

$
4,200.00&nbsp;&nbsp;&nbsp;</td>

</tr>
<tr>

<td colspan="5" class="TextoGeneralTabla" align="RIGHT" width="55%"><b>Total&nbsp;&nbsp;&nbsp;</b></td>
<td class="TextoGeneralTabla" align="right" width="15%"><b>

$
627,732.00&nbsp;&nbsp;&nbsp;</b></td>

</tr>
</tbody></table>'
;

$html str_get_html($str);
//o tambien puedes $html = file_get_html('http://www.tupagina.com/')

foreach($html->find('input[onkeypress=SoloNumerico();]') as $element) echo $element->value .'<br>';

echo 
$html->find('td[class=TextoGeneralTabla]', -1)->plaintext;
?>


Resultado:

7
6
$627,732.00


:xD
[img[/img]

WHK

#16
h3ct0r pasale un memory_get_usage() a eso, de seguro que consume sus 100 veces mas memoria que cualquiera de los otros dos scripts xD

El de yoya consume 10kb de memoria menos que el mio.

Array
(
   [0] => Array
       (
           [0] =>
           [1] =>
           [2] => TextoGeneralTabla" align="right" width="15%"><b>

$
627,732
       )

   [1] => Array
       (
           [0] => 7
           [1] => 6
           [2] =>
       )

   [2] => Array
       (
           [0] =>
           [1] =>
           [2] => 627,732
       )

)

Memory: 322064


Valor costo: 4,200.00555
Valores numéricos:

Array
(
   [0] => 7
   [1] => 6
)

Memory: 330936

h3ct0r

#17
 :xD Si, consume mas! jejeje

7
6
$ 627,732.00   

Memoria : 920720


Pero es una solucion elegante que te resuelve muy facilmente el problema! Y puedes hacer muchas mas consultas comodamente!

En pocas consultas pequenas es poco optimizado, o hasta poco eficiente, pero cuando se hacen muchas consultas a la misma fuente hay se le ve el provecho!

@Kanser, ya tienes 3 soluciones que te dan el mismo resultado! Ya escojeras la que mejor te parezca en base a rapidez/eficiencia/mantenibilidad.

Saludos
[img[/img]