Grüße. Ich habe ein PHP-Skript, das die Website eines Großhändlers für Produktinformationen abkratzen und diese Informationen in eine Datenbank eingeben soll."Versuchen, Eigenschaft von Nicht-Objekt zu erhalten", wenn Datenbankprüfungen durchgeführt werden - PHP
Ich habe erfolgreich alle Informationen für ein Beispielprodukt gesammelt, und wenn Sie ein einfaches Echo aller $ v Variablen machen, wird alles korrekt auf den Bildschirm ausgegeben.
Jetzt, nachdem ich den Scheck zu sehen, ob die Kategorien der Produkte gibt es in der Datenbank hinzufügen, und tatsächlich die Informationen einfügen, ich
[phpBB Debug] PHP Notice: in file /rip.php on line 35: Trying to get property of non-object [phpBB Debug] PHP Notice: in file /rip.php on line 36: Trying to get property of non-object [phpBB Debug] PHP Notice: in file /rip.php on line 38: Undefined offset: 3 [phpBB Debug] PHP Notice: in file /rip.php on line 38: Undefined offset: 2 [phpBB Debug] PHP Notice: in file /rip.php on line 41: Trying to get property of non-object Fatal error: Call to a member function find() on a non-object in /XXXXX/public_html/XXXXX/rip.php on line 42
jedoch alle Angaben des Produkts noch eingegangen wird die Datenbank.
Das Skript soll Seite für Seite gehen, Informationen sammeln, aber stoppt nach dem ersten Produkt.
I SC bin mit Chens einfachen HTML-DOM Schaber Skript (http://sourceforge.net/projects/simplehtmldom/) und Core-System phpBB für Datenbank-Anrufe, und hier ist meine PHP Quelle:
<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/simple_html_dom.' . $phpEx);
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
function save($in, $out)
{
$tempDir = './rip_images';
$finalDir = $out;
$imageUrl = $in;
$file = basename($imageUrl);
exec("cd $tempDir && wget --quiet $imageUrl");
if (rename("$tempDir/$file", "$finalDir") === false) {
die('Failed while trying to move image file from temp dir to final dir');
}
}
function scrape($i)
{
$html = file_get_html('XXXXXXXXX.com/index.php?main_page=product_info&products_id='.$i.'&zenid=e4b7dde8de02e1df005d4549e2e3e529');
foreach($html->find('body') as $html)
{
$item['title'] = trim($html->find('#productName', 0)->plaintext);
$item['price'] = trim($html->find('#productPrices', 0)->plaintext);
$item['cat'] = $html->find('#navBreadCrumb', 0)->plaintext;
list($home, $item['cat'], $item['subcat'], $title) = explode("::", $item['cat']);
$item['cat'] = str_replace(" ", "", $item['cat']);
$item['subcat'] = str_replace("\n", "", str_replace(" ", "", $item['subcat']));
$item['desc'] = trim($html->find('#productDescription', 0)->plaintext);
$item['model'] = $html->find('ul#productDetailsList', 0)->find('li', 0)->plaintext;
$item['model'] = explode(":", $item['model']);
$item['model'] = trim($item['model'][1]);
$item['manufacturer'] = $html->find('ul#productDetailsList', 0)->find('li', 1)->plaintext;
$item['manufacturer'] = explode(":", $item['manufacturer']);
$item['manufacturer'] = trim($item['manufacturer'][1]);
foreach($html->find('img') as $img)
{
if($img->alt == $item['title'])
{
$item['img_sm'] = $img->src;
$thumb_width = $img->width;
$thumb_height = $img->height;
}
}
$sm_img_src = "http://XXXXXXXXXX.com/".$item['img_sm'];
$lg_img_src = "http://XXXXXXXXXX.com/index.php?main_page=popup_image&pID=".$i;
$ext = strrchr($item['img_sm'], '.');
$filename = $item['model'] . $ext;
$new_sm = "./rip_images/small/{$filename}";
$new_lg = "./rip_images/large/{$filename}";
$item['image'] = $filename;
$file = file_get_contents($lg_img_src);
$f = fopen($new_lg,'w+');
fwrite($f,$file);
fclose($f);
save($sm_img_src,$new_sm);
$ret[] = $item;
}
$html->clear();
unset($html);
return $ret;
}
$i = 1;
$end = 9999999;
while($i < $end)
{
$ret = scrape($i);
foreach($ret as $v)
{
$item['title'] = $v['title'];
$item['price'] = $v['price'];
$item['desc'] = $v['desc'];
$item['model'] = $v['model'];
$item['manufacturer'] = $v['manufacturer'];
$item['image'] = $v['image'];
$item['cat'] = $v['cat'];
$item['subcat'] = $v['subcat'];
}
//see if parent cat exists
$sql = 'SELECT cat_id FROM ' . SHOP_CAT_TABLE . ' WHERE cat_name = "'.$db->sql_escape($item['cat']).'"';
$result = $db->sql_query($sql);
$parent = $db->sql_fetchrow($result);
// if not exists
if($parent['cat_id'] == '')
{
//add the parent cat to the db
$sql_ary = array(
'cat_name' => $item['cat'],
'cat_parent' => 0
);
$sql = 'INSERT INTO '.SHOP_CAT_TABLE.' '.$db->sql_build_array('INSERT', $sql_ary);
$db->sql_query($sql);
$cat_id = $db->sql_nextid();
//see if subcat exists
$sql = 'SELECT cat_id FROM ' . SHOP_CAT_TABLE . ' WHERE cat_name = "'.$db->sql_escape($item['subcat']).'"';
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
// if not exists
if($row['cat_id'] == '')
{
//add subcat to db
$sql_ary = array(
'cat_name' => $db->sql_escape($item['subcat']),
'cat_parent' => $cat_id
);
$sql = 'INSERT INTO '.SHOP_CAT_TABLE.' '.$db->sql_build_array('INSERT', $sql_ary);
$db->sql_query($sql);
$item_cat = $db->sql_nextid();
}
else //if exists
{
$item_cat = $row['cat_id'];
}
}
else //if parent cat exists
{
//see if subcat exists
$sql = 'SELECT cat_id FROM ' . SHOP_CAT_TABLE . ' WHERE cat_name = "'.$db->sql_escape($item['subcat']).'"';
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
// if not exists
if($row['cat_id'] == '')
{
//add the subcat to the db
$sql_ary = array(
'cat_name' => $db->sql_escape($item['subcat']),
'cat_parent' => $parent['cat_id']
);
$sql = 'INSERT INTO '.SHOP_CAT_TABLE.' '.$db->sql_build_array('INSERT', $sql_ary);
$db->sql_query($sql);
$item_cat = $db->sql_nextid();
}
else //if exists
{
$item_cat = $row['cat_id'];
}
}
$sql_ary = array(
'item_title' => $db->sql_escape($item['title']),
'item_price' => $db->sql_escape($item['price']),
'item_desc' => $db->sql_escape($item['desc']),
'item_model' => $db->sql_escape($item['model']),
'item_manufacturer' => $db->sql_escape($item['manufacturer']),
'item_image' => $db->sql_escape($item['image']),
'item_cat' => $db->sql_escape($item_cat)
);
$sql = 'INSERT INTO ' . SHOP_ITEM_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
$db->sql_query($sql);
$i++;
}
?>
Gibt es Vorschläge, wie Sie diese Hinweise/Fehler beheben und das Skript dazu bringen, die Seiten korrekt zu durchlaufen? Ich bin fast sicher, dass es etwas ist sehr einfach, dass ich mit Blick auf ...