e1seix Posted December 31, 2007 Share Posted December 31, 2007 Complete regex novice here, but know can rely on your help. I have an affiliate website stocking products through external website. As you can imagine the prices change a lot and it's hard to keep updating mySQL, so my idea is to use regex to automatically update. I have a basic premise and I need some help: The page I need to scan for info is - http://www.cheapsmells.com/viewProduct.php?id=3978 The tags I need to lift the info from within this page are - <div class='productOurPrice'>Our Price £22.54</div> From here I need to just seperate the 22.54 part. I can figure out the updating part etc, but I need help with the regex code/function/instruction initially. Can anyone help me get this far? many thanks and happy new year Link to comment https://forums.phpfreaks.com/topic/83837-solved-linking-with-external-website-regex/ Share on other sites More sharing options...
fataqui Posted December 31, 2007 Share Posted December 31, 2007 There is all kinds of ways to do it, you could just use a simple regex. Here some code I had lying around... <?php $url = 'http://www.cheapsmells.com/viewProduct.php?id='; $item = '3978'; $parts = array ( array ( '<div class=\'productOriginalPrice\'>', '</div>' ), array ( '<div class=\'productOurPrice\'>', '</div>' ) ); $out = array ( 'original' => '', 'current' => '' ); if ( false !== ( $page = file_get_contents ( $url . $item ) ) ) { foreach ( $parts AS $name => $value ) { if ( false !== ( $s = stripos ( $page, $value[0] ) ) ) { $page = substr ( $page, $s + strlen ( $value[0] ) ); $out[($name == 0 ? 'original' : 'current' )] = preg_replace ( '/(.+?)(\d+\.\d+)(.+?)?/is', '\\2', substr ( $page, 0, strpos ( $page, $value[1] ) ) ); } } } print_r ( $out ); ?> Link to comment https://forums.phpfreaks.com/topic/83837-solved-linking-with-external-website-regex/#findComment-426683 Share on other sites More sharing options...
e1seix Posted December 31, 2007 Author Share Posted December 31, 2007 man, that is SOOO good! thank you, thank you. is there a simpler way of literally printing off the current price of "22.54" instead of "Array ( [current] => 22.54 [original] => 36.00 )" as i need to grab this "22.54" as a defined variable and update the mysql data accordingly Link to comment https://forums.phpfreaks.com/topic/83837-solved-linking-with-external-website-regex/#findComment-426703 Share on other sites More sharing options...
MadTechie Posted December 31, 2007 Share Posted December 31, 2007 print $out['original']; Link to comment https://forums.phpfreaks.com/topic/83837-solved-linking-with-external-website-regex/#findComment-426772 Share on other sites More sharing options...
e1seix Posted January 1, 2008 Author Share Posted January 1, 2008 I have one last question... This is great and works wonderfully especially with my php code $qry = mysql_query("SELECT * FROM fragrances WHERE fragrances.avail='true' AND fragrances.sku=$sku UNION SELECT * FROM skincare WHERE skincare.avail='true' AND skincare.sku=$sku UNION SELECT * FROM shaving WHERE shaving.avail='true' AND shaving.sku=$sku UNION SELECT * FROM bodycare WHERE bodycare.avail='true' AND bodycare.sku=$sku UNION SELECT * FROM haircare WHERE haircare.avail='true' AND haircare.sku=$sku UNION SELECT * FROM suncare WHERE suncare.avail='true' AND suncare.sku=$sku")or die(mysql_error()); echo "<table>"; $i=0; while ($row = mysql_fetch_array($qry)) { $original=$row['pound']; $url = $row[buy_link]; $parts = array ( array ( '<div class=\'productOurPrice\'>', '</div>') ); $out = array ( 'current' => '' ); if ( false !== ( $page = file_get_contents ( $url ) ) ) { foreach ( $parts AS $name => $value ) { if ( false !== ( $s = stripos ( $page, $value[0] ) ) ) { $page = substr ( $page, $s + strlen ( $value[0] ) ); $out = preg_replace ( '/(.+?)(\d+\.\d+)(.+?)?/is', '\\2', substr ( $page, 0, strpos ( $page, $value[1] ) ) ); } } } mysql_query("UPDATE fragrances SET pound='$out' WHERE sku='$sku'"); mysql_query("UPDATE skincare SET pound='$out' WHERE sku='$sku'"); mysql_query("UPDATE shaving SET pound='$out' WHERE sku='$sku'"); mysql_query("UPDATE bodycare SET pound='$out' WHERE sku='$sku'"); mysql_query("UPDATE haircare SET pound='$out' WHERE sku='$sku'"); mysql_query("UPDATE suncare SET pound='$out' WHERE sku='$sku'"); However the parameters in this case only relate to one of my affiliate sites and it defaults anything that doesn't match back to 0.00. I have tried to put an if statement around this but it doesn't make a difference. Similarly I also had code: mysql_query("UPDATE fragrances SET avail='NULL' WHERE sku='$sku'"); ...etc which removes anything that doesn't fit within the parameters (ie. out of stock or not displayed) so that it removes it from my database, but I can't seem to place this or implement it properly either. This is causing all sorts of problems for me. Has anyone any suggestions? Is this a common fault or is there just a problem with my structure and method? I hope I'm explaining this correctly... Link to comment https://forums.phpfreaks.com/topic/83837-solved-linking-with-external-website-regex/#findComment-427104 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.