2017-01-05 1 views
0

J'essaye de gratter un site distant et de modifier des parties des résultats avant de mettre à jour quelques tables dans la base de données et par la suite echo() 'en final document.Impossible d'utiliser la fonction find() PHP Simple HTML DOM Parser

Voici un extrait expurgée du code en question pour référence:

<?php 

require_once 'backend/connector.php'; 
require_once 'table_access/simplehtmldom_1_5/simple_html_dom.php'; 
require_once 'pronunciation1.php'; 

// retrieve lookup term 
if(isset($_POST["lookup_term"])){ $term = trim($_POST["lookup_term"]); } 
else { $term = "hombre"; } 

$html = file_get_html("http://www.somesite.com/translate/" . rawurlencode($term)); 
$coll_temp = $html->find('div[id=translate-en]'); 
$announce = $coll_temp[0]->find('.announcement'); 
$quickdef = $coll_temp[0]->find('.quickdef'); 
$meaning = $announce[0] . $quickdef[0]; 

$html->clear(); // release scraper variable to prevent memory leak issues 
unset($html); // release scraper variable to prevent memory leak issues 
$meaning = '<?xml version="1.0" encoding="ISO-8859-15"?>' . $meaning; 

// process the newly-created DOM 
$dom = new DOMDocument; 
$dom->loadHTML($meaning); 
// various DOM-manipulation code snippets 

// extract the quick definition section 
foreach ($dom->find('div[class=quickdef]') as $qdd) { 
    $qdh1 = $qdd->find('.source')[0]->find('h1.source-text'); 
    $qdterm = $qdh1[0]->plaintext; 
    $qdlang = $qdh1[0]->getAttribute('source-lang'); 
    add2qd($qdterm, $qdd, $qdlang); 
    unset($qdterm); 
    unset($qdlang); 
    unset($qdh1); 
} 

$finalmeaning = $dom->saveHTML(); // store processed DOM in $finalmeaning 
push2db($term, $finalmeaning); // add processed DOM to database 
echo $finalmeaning; // output processed DOM 

// release variables 
unset($dom); 
unset($html); 
unset($finalmeaning); 
function add2qd($lookupterm, $finalqd, $lang){ 
    $connect = dbconn(PROJHOST, CONTEXTDB, PEPPYUSR, PEPPYPWD); 
    $sql = 'INSERT IGNORE INTO tblquickdef (word, quickdef, lang) VALUES (:word, :quickdef, :lang)'; 
    $query = $connect->prepare($sql); 
    $query->bindParam(':word', $lookupterm); 
    $query->bindParam(':quickdef', $finalqd); 
    $query->bindParam(':lang', $lang); 
    $query->execute(); 
    $connect = null; 
} 
function push2db($lookupword, $finalmean) { 
    $connect = dbconn(PROJHOST, DICTDB, PEPPYUSR, PEPPYPWD); 
    $sql = 'INSERT IGNORE INTO tbldict (word, mean) VALUES (:word, :mean)'; 
    $query = $connect->prepare($sql); 
    $query->bindParam(':word', $lookupword); 
    $query->bindParam(':mean', $finalmean); 
    $query->execute(); 
    $connect = null; 
} 

?> 

Le code fonctionne bien, sauf pour la boucle sous la // extrait la section de définition rapide. La fonction appelée depuis l'intérieur de cette boucle est add2qd() qui accepte 3 valeurs de chaîne en entrée.

Chaque fois que cette boucle s'exécute, PHP renvoie une erreur fatale car elle pense que find() est indéfini. Je sais trouver est une fonction légitime dans la bibliothèque Parser PHP Simple HTML DOM parce que je l'ai utilisé plusieurs fois dans le même code sans aucun problème (dans la section // récupérer le terme de recherche). Qu'est-ce que je fais mal?

Répondre

0

Mais vous n'utilisez pas PHP DOM HTML HTML DOM standard seulement, qui n'a pas trouvé la méthode.

$dom = new DOMDocument; 
$dom->loadHTML($meaning); 

foreach ($dom->find('div[class=quickdef]') as $qdd) { 

http://php.net/manual/en/class.domdocument.php

+0

Dans ce cas, est-il possible de convertir cette DOMDocument à quelque chose PHP simple HTML DOM Parser peut comprendre? – TheLearner

+0

// Création d'un objet DOM à partir d'une chaîne $ html = str_get_html (' Hello!'); – Lukas

+0

La fonction str_get_html() attend une entrée de chaîne, n'est-ce pas? Mais la variable que j'utilise ($ dom) est de type DOMDocument, c'est pourquoi find() ne fonctionne pas. Comment puis-je convertir $ dom en chaîne pour pouvoir utiliser find() et d'autres fonctions de Parser? – TheLearner