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 Quote 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 ); ?> Quote 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 Quote 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']; Quote 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... Quote 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
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.