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?
Dans ce cas, est-il possible de convertir cette DOMDocument à quelque chose PHP simple HTML DOM Parser peut comprendre? – TheLearner
// Création d'un objet DOM à partir d'une chaîne $ html = str_get_html ('
Hello!'); – LukasLa 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