Dom problem

PHPportalen Forum Index » PHP Mjukstart
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
Tomas59



Medlem i: 849 dagar

Status: Offline



#741421
Inlägg Skrivet: 2017-01-29 02:06      Ämne: Dom problem Citera

Vad gör jag för fel?
Har försökt med dom
$fileData = file_get_contents('http://rlc.alessa.sweb.cz/clothes/search.aspx-mid-100321174');

$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadHTMLFile($fileData);
$rest = $dom->getElementById('itemFoot');
if ($rest === NULL) {
echo 'EMPTY<br>';
}
else {
echo 'find itemFoot <br>';
}

jag får bara ut EMPTY när jag kör skripten

Har försökt med dom dör att få ut info från denna fil.

view-source:http://rlc.alessa.sweb.cz/clothes/search.aspx-mid-100321174

<---- "==" vad jag vill ha ut vill ha ut

<div class="itemFoot"> <----- getElementById
<span title="Tiger Tatto" class="name">Tiger Tatto</span> <---- Tiger Tatto
<span class="price"><b>&reg;</b><em>2.00</em> </span> <---2.00
<div class="buttons">
<a class="details" href="/clothing/outfit.aspx?id=1851205">Details</a> <---/clothing/outfit.aspx?id=1851205
</div>

</div>
</div>


<div class="item" data-outfitid="1846057">
<a href="/clothing/ajax/preview.aspx?id=1846057" target="_blank" rel="fancyGroup" class="itemPreview tipped" title="Instant Purchase">
<img src="/otm/image.ashx?typeid=7&refid=1846057&preview=1" alt="Preview image" /> <----/otm/image.ashx?typeid=7&refid=1846057&preview=1

-------------------------------------------------------------------
Har försök med att göra det direkt från saiten men det då skripten inte vet om jag är inloggad på saiten så måste man kopiera den och ladda upp den själv till lämplig plats så det gåt att läsa den informationen.[/b]
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 4598 dagar
Från: Tavesta
Status: Offline



#741422
Inlägg Skrivet: 2017-01-29 03:16      Ämne: Citera

Två fel:
Om du läst in htmldatat som en sträng skall du använda
PHP:
1:
 @$dom->loadHTML($fileData); 

snabelaet före gör att du slipper se alla felmeddelanden för småfel i htmlkoden.

itemFoot är inte ett id, utan en klass. PHP-versionen av DOM har inte getElementsByClassName, så du kan använda xpath istället:
PHP:
1:
 $rest = (new DOMXPath($dom))->query('//*[@class="itemFoot"]'); 

Nu är $rest inte ett DOMElement, utan en DOMNodeList. Då kan det vara lämpligt att använda en foreach-loop för att läsa av datat.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Tomas59



Medlem i: 849 dagar

Status: Offline



#741427
Inlägg Skrivet: 2017-01-30 01:50      Ämne: Citera

Hmm
1. När jag skrev in raden i editorn så får jag en röd överstuken text och syntax error unexpected T_object_operator.
Är det något generalfel eller ska man bara acceptera?

2 Försökte med echo och print_r för att se vad $rest innehöll
Men får inte ut någon text.

3 Är jag ute och cyklar?
Jag tänkte mig att plocka ut $item från "itemfot" till "itemHighlight2" för att sedan plocka ut Tiger Tatto som $name,
2.00 som $value, /clothing/outfit.aspx?id=1851205 som $url och /otm/image.ashx?typeid=7&refid=1896572&preview=1 $pic.

Och sen göra om det 10 ggr eller till end of file.

Obs: Gör inget att jag får klura lite själv, bara jag inte behöver söka ihjäl mig . :-p :idea:
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 4598 dagar
Från: Tavesta
Status: Offline



#741429
Inlägg Skrivet: 2017-01-30 02:31      Ämne: Citera

Tomas59 skrev:
Hmm
1. När jag skrev in raden i editorn så får jag en röd överstuken text och syntax error unexpected T_object_operator.
Är det något generalfel eller ska man bara acceptera?

Den syntaxen jag skrev är inte giltig i äldre versioner av php.
Då kan man använda
PHP:
1:
 $xpath = new DOMXPath($dom);
2:
$rest $xpath->query('//*[@class="itemFoot"]');  

Att editorn ger felmeddelande behöver inte betyda att php också gör det. Men risken finns.


Tomas59 skrev:
2 Försökte med echo och print_r för att se vad $rest innehöll
Men får inte ut någon text.

Använd hellre var_dump() när du felsöker. Den ger bättre information än print_r

Tomas59 skrev:
3 Är jag ute och cyklar?
Jag tänkte mig att plocka ut $item från "itemfot" till "itemHighlight2" för att sedan plocka ut Tiger Tatto som $name,
2.00 som $value, /clothing/outfit.aspx?id=1851205 som $url och /otm/image.ashx?typeid=7&refid=1896572&preview=1 $pic.

Och sen göra om det 10 ggr eller till end of file.

Allt som är underordnat "itemFot" kan du få ut från $rest. Det enda av det du vill ha som inte finns där är bildadressen. Om du vill få ut den också borde du söka igenom "item" istället för "itemFoot". Nu blir det hela lite mer komplext, så här får du lite att klura på.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Tomas59



Medlem i: 849 dagar

Status: Offline



#741431
Inlägg Skrivet: 2017-01-30 18:26      Ämne: Citera

$items = $rest->query('//*[@class="itemFoot"]');
^^^^Satte om variabel så det associerar till vad man håller på med.
Hade jag hittat men va inte 100% då jag fan denna efter ett antal klockade på länkar.

Har lyckats med att se
foreach ($items as $node) {echo $node->nodeValue ."<br>";}

Känner mig inte riktigt med i matchen då det inte är något skiljetecken i mellan och hur den fångar värdena.

Har försökt att googla på query men det fastnar inte i mitt huvud. Går det att lägga till så den plockar src= och href= åxå? eller måste man ta dessa sepparat?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 4598 dagar
Från: Tavesta
Status: Offline



#741433
Inlägg Skrivet: 2017-01-31 00:27      Ämne: Citera

Google kommer nog ge dig en hel väldig massa träffar som inte har med det här att göra ifall du söker på "query". Skall du få relevanta träffar skall du söka på "xpath" istället.
Annars brukar php-manualen vara en bra källa till kunskap. Kapitlet om DOM innehåller mycket du kan ha användning av nu.

$node är ett objekt av klassen DOMElement. DOMElementet representerar en av alla divar med klassen itemFoot (här är det för övrigt läge att ändra till "item" istället, ifall du skall få tag i det data du vill ha.). Till diven räknas allt i htmlkoden från och med <div till och med </div>.
Du kan använda DOMElementets medlemsmetoder ->getElementsByTagName(), ->getAttribute() mm och medlemmar ->childNodes, ->firstChild, ->nextSibling, ->attributes, mm för att plocka fram det data du vill ha, eller för att plocka fram andra DOMElement som kan leda dig vidare till datat du söker.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Tomas59



Medlem i: 849 dagar

Status: Offline



#741434
Inlägg Skrivet: 2017-01-31 23:45      Ämne: Citera

Har nu efter ett par hinkar kaffe och hjärnskrynkling lyckats med vissa
träffar.

uptäckte att i 1:a "item" finns ett nummer som utgör id värde till url och bild.
kan man plocka ut det i $items = $rest->query('//*[@class="item"]'); ?
" <div class="item" data-outfitid="1896580"> "

Sen är det namnet i <span title="Black Tenis Shoes" class="name">Black Tenis Shoes</span>

Som jag har brottats med hela em med. Tror att jag behöver en knuff närmare
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 4598 dagar
Från: Tavesta
Status: Offline



#741435
Inlägg Skrivet: 2017-02-01 00:49      Ämne: Citera

Numret i data-outfitid får du enkelt fram med getAttribute(), eftersom det är ett attribut i det element som $node representerar:
PHP:
1:
 $node->getAttribute('data-outfitid'


Texten i <span> kan du få ut med hjälp av ett xpath-uttryck som du skriver relativt $node:
PHP:
1:
 $rest->query('div[@class="itemFoot"]/span[@class="name"]'$node)->item(0)->nodeValue 

Den här tekniken kan du använda för att få fram precis allt data du behöver. Du behöver bara hänga med i hur xpath-uttryck fungerar.
http://www.w3schools.com/xml/xpath_syntax.asp
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Tomas59



Medlem i: 849 dagar

Status: Offline



#741436
Inlägget är accepterad som det rätta svaret Skrivet: 2017-02-01 01:58      Ämne: Citera

Va ganska nära men inte tillräkligt eller en del överdimensionerat
$id = $node->getElementsByTagName('div');
$id = $id->item(0)->getAttribute('data-outfitid');

query hade jag nog brutit ihop på.

Tack för hjälpen.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » PHP Mjukstart
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic