Foros del Web » Programando para Internet » PHP »

getAttribute -> ERROR!

Estas en el tema de getAttribute -> ERROR! en el foro de PHP en Foros del Web. buenas tardes, tengo un problemita, tengo que traer unos datos de un sitio de otra web y necesito acceder a una url que esta dentro ...
  #1 (permalink)  
Antiguo 13/01/2011, 10:23
 
Fecha de Ingreso: julio-2009
Ubicación: Argentina!
Mensajes: 324
Antigüedad: 14 años, 8 meses
Puntos: 4
getAttribute -> ERROR!

buenas tardes, tengo un problemita, tengo que traer unos datos de un sitio de otra web y necesito acceder a una url que esta dentro de un div el cual esta dentro de un form y asi varias veces, entonces empeze a anidar, pero la verdad no me fue muy bien, les muestro el codigo para que vean lo que estoy haciendo


Código PHP:
$html file_get_contents('http://www.url.com/');

$htmlDoc = new DomDocument();
$htmlDoc->formatOutput true;
$res = @$htmlDoc->loadHTML($html);


$div $htmlDoc->getElementsByTagName("div");
foreach (
$div as $nombres) {

    
$clas=$nombres->getAttribute("class");
    if(
$clas== "classicCompact"){
        echo 
$clas=$nombres->getAttribute("class");

            
$form=$clas->getElementsByTagName("form");
            foreach(
$form as $for){
                echo 
$for->getAttributes("id");
            }            
        
        }

como veran ahi entro a buscar en los divs el que tenga como clase a Perro, entonces, dentro de esa clase quiero acceder a ID de un FORM, dentro de ese form hay un fieldset dentro de el hay otro div y adentro hay una etiqueta A de la cual quiero sacar el href... como veran en el codigo solo llego al primer div :S en conde encuentro la clase perro, pero hasta ahi llego :S

El error que me da es este
Código:
Perro
Fatal error: Call to a member function getElementsByTagName() on a non-object in C:\AppServ\www\juegos\shop4.php on line 16
Alguien me podria decir cual es la forma correcta para aceder dentro de tantas etiquetas??

Desde ya muchas gracias.
  #2 (permalink)  
Antiguo 13/01/2011, 11:10
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: getAttribute -> ERROR!

Posteaste en el foro de javascript. Reportá el mensaje para que lo muevan a php.
  #3 (permalink)  
Antiguo 13/01/2011, 11:40
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Tema movido desde javascript
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 13/01/2011, 11:54
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: getAttribute -> ERROR!

Código PHP:
$html file_get_contents('http://www.url.com/'); 

$htmlDoc = new DomDocument(); 
$htmlDoc->formatOutput true
$res = @$htmlDoc->loadHTML($html); 


$div $htmlDoc->getElementsByTagName("div"); 
foreach (
$div as $nombres) { 

    
$clas=$nombres->getAttribute("class");  //Ojo a esto
    
if($clas== "classicCompact"){ 
        echo 
$clas=$nombres->getAttribute("class"); //Esto no es necesario asignarlo de nuevo porque ya lo hiciste arriba

            
$form=$clas->getElementsByTagName("form"); //Ojo a esto tambien
            
foreach($form as $for){ 
                echo 
$for->getAttributes("id"); 
            }             
         
        } 

Luego de que comparas a ver si el nombre de la clase es "classicCompact", tratas de acceder al formulario de esta manera: $form=$clas->getElementsByTagName("form");
Sin embargo, $clas no contiene el DIV con dicha clase, sino que contiene LOS ATRIBUTOS, porque anteriormente hiciste:
echo $clas=$nombres->getAttribute("class");
Para acceder al formulario, debes hacer $form = $nombres->getElementByTagName("form"), en vez de $form=$clas->getElementsByTagName("form")
  #5 (permalink)  
Antiguo 14/01/2011, 03:29
 
Fecha de Ingreso: julio-2009
Ubicación: Argentina!
Mensajes: 324
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: getAttribute -> ERROR!

@Caricatos & @Panino5001

Perdon, se ve que aprete mal y entre al foro equivocado! Pido disculpas y gracias por mover el mensaje


@Ronruby
Claaaaroooo!

Entonces despues de acceder a todos los forms de esta forma $form = $nombres->getElementByTagName("form") debo buscar el id o el nombre del formulario para saber en realidad cual es el que yo deseo!

En verdad eso ya lo habia pensado, es mas, lo hago unas lineas mas arriba pero comparando las clases de los divs, en realidad lo que busco es saber si hay manera de acceder a esto: (Con ejemplos siempre es mas claro):



Código HTML:
Ver original
  1. <form id="frmArticle6488289" action="https://opqa.spreadshirt.es/shop/basket/addtobasket" method="post"> <!---------- ACA LLEGUE si se pudiera mostrar todo desde aca estaria buenisimo.
  2.     <fieldset>
  3.         <legend></legend>
  4.         <input type="hidden" name="product" value="7448436" />
  5.         <input type="hidden" name="article" value="6488289" />
  6.         <input type="hidden" name="currentView" id="currentView6488289" value="611"/>
  7.         <input type="hidden" name="color" id="productColor6488289" value="171" />
  8.         <h3 class="small-gap-down"></h3>
  9.         <div class="articleImages" onmouseover="javascript:articleImageMouseover(6488289, false);" onmouseout="javascript:articleImageMouseover(6488289, true);">
  10.             <a href="http://opqa.spreadshirt.es/mujeres-camiseta-larga-v-A6488289" onclick="appendColor(this, 6488289);">
  11.             <img src="http://image.spreadshirt.net/image-server/image/product/7448436/view/1/type/png/width/190/height/190" border="0" alt="Camisetas ~ Mujeres camiseta larga V ~ Número del producto 6488289" title="Camisetas ~ Mujeres camiseta larga V ~ Número del producto 6488289" class="pimg" id="articleImage6488289" /> <!-- Esto lo necesito
  12.             <img src="http://image.spreadshirt.net/image-server/image/composition/7448436/view/1/producttypecolor/171/type/png/width/190/height/190/_design.png" id="compositionImage6488289" style="display:none" alt="Diseño ~ " title="Diseño ~ "/> </a> <!--Esto tmb
  13.         </div>
  14.        
  15.         <div class="articlePriceWrapper">
  16.         <div class="clearfix articleDesc">
  17.         <h5 title="">Mujeres camiseta larga V</h5><!-- Esto tambien
  18.  
  19.         <div class="articleSizes">
  20.             <label for="articleSize6488289" onclick="javascript:popUp('', 'measureTablePopup', 'width=680, height=650, scrollbars=1');"></label>
  21.             <select name="size" disabled="disabled">
  22.             <option value="0">...</option>
  23.             </select>
  24.         </div>
  25.         </div>
  26.         <div class="articlePrice clearfix stock-out">
  27.             <p class="system-alert"> <strong>Actualmente no disponible.</strong> <acronym title="Actualmente no disponible.">&nbsp;</acronym> </p><!-- Esto tambien
  28.         </div>
  29.         </div>
  30.     </fieldset>
  31. </form>

tal vez ahora este mas claro!



yo voy haciendo esto

Código PHP:
Ver original
  1. <?php
  2.  
  3. $html = file_get_contents('http://opqa.spreadshirt.es/');
  4.  
  5. $htmlDoc = new DomDocument();
  6. $htmlDoc->formatOutput = true;
  7. $res = @$htmlDoc->loadHTML($html);
  8.  
  9.  
  10. $div = $htmlDoc->getElementsByTagName("form");
  11. foreach ($div as $nombres) {
  12.        
  13.     echo $clas=$nombres->getAttribute("id")."<br />";
  14.     $asd=substr($clas, 0,9);
  15.     echo $asd."<br />";
  16.    
  17.     if($asd == 'frmArticl'){
  18.    
  19.     $field = $htmlDoc->getElementsByTagName("fieldset");
  20.    
  21.     $datos=$field->getAttribute("value");
  22.     echo $datos."<br />";
  23.    
  24.     }
  25.    
  26.  
  27. }
  28.  
  29.  
  30.  
  31.  
  32. ?>

Un abrazo

Última edición por kadas99; 14/01/2011 a las 04:08
  #6 (permalink)  
Antiguo 14/01/2011, 05:36
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: getAttribute -> ERROR!

Te sugiero que utilices DOMXPath, en tu caso podria ser asi:

Código PHP:
Ver original
  1. ...
  2. $doc = new DOMDocument('1.0', 'UTF-8');
  3. $doc->loadHTML($html);
  4.        
  5. $xpath = new DOMXPath($doc);
  6.  
  7. foreach($xpath->query("//form[starts-with(@id, 'frmArticle')]//a") as $anchor){
  8.     var_dump($anchor->getAttribute('href'));
  9. }

o algo mas explicito.

Código PHP:
Ver original
  1. ...
  2. $doc = new DOMDocument('1.0', 'UTF-8');
  3. $doc->loadHTML($html);
  4.        
  5. $xpath = new DOMXPath($doc);
  6.  
  7. foreach($xpath->query("//form[starts-with(@id, 'frmArticle')]/fieldset/div[@class='articleImages']/a") as $anchor){
  8.    var_dump($anchor->getAttribute('href'));
  9. }

Saludos.

Última edición por masterpuppet; 14/01/2011 a las 05:42

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:47.