duderino3 Posted August 24, 2013 Posted August 24, 2013 Dear OScommercler. I´ve got a problem with google merchant and my feeder file for www.ttshop-leipzig.de. they won´t list me with my products cause i do not have the right attributes in my file like they won´t here: Weitere Informationen But my products don´t have a GTIN like google want, so i don´t know what to do now. And there seems to be no up to date addon for this. Could anybody help me? Here is my latest googlefeeder.php <?php // Title: Google Base / Froogle Data Feeder 2.5 // Last Update: 12/25/09 by Jack_mcs at oscommerce-solution.com /*************** BEGIN MASTER SETTINGS ******************/ define('SEO_ENABLED','true'); //Change to 'false' to disable if Ultimate SEO URLs is not installed define('FEEDNAME', '***'); //from your googlebase account define('DOMAIN_NAME', 'www.ttshop-leipzig.de'); //your correct domain name (don't include www unless it is used) define('FTP_USERNAME', '***'); //created from within your googlebase account define('FTP_PASSWORD', '.***'); //created from within your googlebase account define('FTP_ENABLED', '0'); //set to 0 to disable define('CONVERT_CURRENCY', '0'); //set to 0 to disable - only needed if a feed in a difference currecny is required define('CURRENCY_TYPE', 'EUR'); //(eg. USD, EUR, GBP) //define('DEFAULT_LANGUAGE', 0); //Change this to the id of your language. BY default 1 is english define('QUOTES_CATEGORY_NAME',''); //if the Quotes contribution is installed, enter the name of the quotes category here define('OPTIONS_ENABLED', 1); define('OPTIONS_ENABLED_AGE_RANGE', 0); define('OPTIONS_ENABLED_ATTRIBUTES', 0); define('OPTIONS_ENABLED_BRAND', 0); define('OPTIONS_ENABLED_CONDITION', 1); define('OPTIONS_ENABLED_CURRENCY', 0); define('OPTIONS_ENABLED_FEED_LANGUAGE', 0); define('OPTIONS_ENABLED_FEED_QUANTITY', 0); define('OPTIONS_ENABLED_MADE_IN', 0); define('OPTIONS_ENABLED_MANUFACTURER', 1); //displays the manufacturer name define('OPTIONS_ENABLED_MPN', 0); define('OPTIONS_ENABLED_PAYMENT_ACCEPTED', 0); define('OPTIONS_ENABLED_PRODUCT_MODEL', 1); //displays the product model define('OPTIONS_ENABLED_PRODUCT_EAN', 1); //displays the products ean define('OPTIONS_ENABLED_PRODUCT_TYPE', 0); define('OPTIONS_ENABLED_SHIPPING', 1); define('OPTIONS_ENABLED_INCLUDE_TAX', 1); define('OPTIONS_ENABLED_AVAILABILITY', 1); define('OPTIONS_ENABLED_WEIGHT', 0); //the following only matter if the matching option is enabled above. define('OPTIONS_AGE_RANGE', '0-9'); define('OPTIONS_BRAND', ''); define('OPTIONS_CONDITION', 'Neu'); //possible entries are New, Refurbished, Used define('OPTIONS_DEFAULT_CURRENCY', 'EUR'); define('OPTIONS_DEFAULT_FEED_LANGUAGE', 'en'); define('OPTIONS_LOWEST_SHIPPING', '0'); //this is not binary. Custom Code is required to provide the shipping cost per product. ###needs to be an array for per product. define('OPTIONS_MADE_IN', 'USA'); define('OPTIONS_MANUFACTURERS_NAME_IGNORE', ''); //list if comma separated manufacturer names to be skipped - e.g. Matrox,Fox define('OPTIONS_PAYMENT_ACCEPTED_METHODS', ''); //Acceptable values: cash, check, GoogleCheckout, Visa, MasterCard, AmericanExpress, Discover, wiretransfer define('OPTIONS_TAX_RATE', 19); //default = 0 (e.g. for 17.5% tax use 17.5) define('OPTIONS_WEIGHT_ACCEPTED_METHODS', 'lb'); //Valid units include lb, pound, oz, ounce, g, gram, kg, kilogram. /*************** END MASTER SETTINGS ******************/ /*************** NO EDITS NEEDED BELOW THIS LINE *****************/ chdir('../'); include_once 'includes/application_top.php'; //******************** // Start TIMER // ----------- $stimer = explode( ' ', microtime() ); $stimer = $stimer[1] + $stimer[0]; // ----------- $OutFile = "feeds/" . FEEDNAME; $destination_file = FEEDNAME; $source_file = $OutFile; $imageURL = 'http://' . DOMAIN_NAME . '/images/'; if(SEO_ENABLED=='true'){ $productURL = 'product_info.php'; // ***** Revised for SEO $productParam = "products_id="; // ***** Added for SEO }else{ $productURL = 'http://' . DOMAIN_NAME . '/product_info.php?products_id='; } $already_sent = array(); $taxCalc = (OPTIONS_ENABLED_INCLUDE_TAX ? (OPTIONS_TAX_RATE/100) + 1 : 1); //Do not edit if(CONVERT_CURRENCY) { if(SEO_ENABLED=='true'){ $productParam="currency=" . CURRENCY_TYPE . "&products_id="; }else{ $productURL = "http://" . DOMAIN_NAME . "/product_info.php?currency=" . CURRENCY_TYPE . "&products_id="; //where CURRENCY_TYPE is your currency type (eg. USD, EUR, GBP) } } $feed_exp_date = date('Y-m-d', time() + 2505600 ); $quotes = ''; if (QUOTES_CATEGORY_NAME !== '') { $quotes = " and products.customers_email_address = '' and products.quotes_email_address = ''"; } $sql = " SELECT concat( '" . $productURL . "' ,products.products_id) AS product_url, products_model AS prodModel, products_ean AS prodEAN, manufacturers.manufacturers_name AS mfgName, manufacturers.manufacturers_id, products.products_id AS id, products_description.products_name AS name, products_description.products_description AS description, products.products_quantity AS quantity, products.products_status AS prodStatus, products.products_weight AS prodWeight, FORMAT( IFNULL(specials.specials_new_products_price, products.products_price) * " . $taxCalc . ",2) AS price, CONCAT( '" . $imageURL . "' ,products.products_image) AS image_url, products_to_categories.categories_id AS prodCatID, categories.parent_id AS catParentID, categories_description.categories_name AS catName FROM (categories, categories_description, products, products_description, products_to_categories) left join manufacturers on ( manufacturers.manufacturers_id = products.manufacturers_id ) left join specials on ( specials.products_id = products.products_id AND ( ( (specials.expires_date > CURRENT_DATE) OR (specials.expires_date is NULL) OR (specials.expires_date = 0) ) AND ( specials.status = 1 ) ) ) WHERE products.products_id=products_description.products_id AND products.products_id=products_to_categories.products_id AND products_to_categories.categories_id=categories.categories_id AND categories.categories_id=categories_description.categories_id " . $quotes . " AND categories_description.language_id = " . $languages_id . " AND products_description.language_id = " . $languages_id . " ORDER BY products.products_id ASC "; $quotes = ''; if (QUOTES_CATEGORY_NAME !== '') { $quotes = " and categories_description.categories_name NOT LIKE '" . QUOTES_CATEGORY_NAME . "' "; } $catInfo = " SELECT categories.categories_id AS curCatID, categories.parent_id AS parentCatID, categories_description.categories_name AS catName FROM categories, categories_description WHERE categories.categories_id = categories_description.categories_id " . $quotes . " AND categories_description.language_id = " . $languages_id . ""; function findCat($curID, $catTempPar, $catTempDes, $catIndex) { if( (isset($catTempPar[$curID])) && ($catTempPar[$curID] != 0) ) { if(isset($catIndex[$catTempPar[$curID]])) { $temp=$catIndex[$catTempPar[$curID]]; } else { $catIndex = findCat($catTempPar[$curID], $catTempPar, $catTempDes, $catIndex); $temp = $catIndex[$catTempPar[$curID]]; } } if( (isset($catTempPar[$curID])) && (isset($catTempDes[$curID])) && ($catTempPar[$curID] == 0) ) { $catIndex[$curID] = $catTempDes[$curID]; } else { $catIndex[$curID] = $temp . ", " . $catTempDes[$curID]; } return $catIndex; } $catIndex = array(); $catTempDes = array(); $catTempPar = array(); $processCat = tep_db_query( $catInfo ); while ( $catRow = tep_db_fetch_array( $processCat ) ) { $catKey = $catRow['curCatID']; $catName = $catRow['catName']; $catParID = $catRow['parentCatID']; if($catName != "") { $catTempDes[$catKey]=$catName; $catTempPar[$catKey]=$catParID; } } foreach($catTempDes as $curID=>$des) //don't need the $des { $catIndex = findCat($curID, $catTempPar, $catTempDes, $catIndex); } $_strip_search = array( "![\t ]+$|^[\t ]+!m", // remove leading/trailing space chars '%[\r\n]+%m'); // remove CRs and newlines $_strip_replace = array( '', ' '); $_cleaner_array = array(">" => "> ", "®" => "", "®" => "", "™" => "", "â„¢" => "", "\t" => "", " " => ""); if ( file_exists( $OutFile ) ) unlink( $OutFile ); $output = "link\ttitel\tbeschreibung\tverfallsdatum\tpreis\timage_link\tproduct_type\tid"; $attributesColumns = array(); //create optional section if(OPTIONS_ENABLED == 1) { if(OPTIONS_ENABLED_AGE_RANGE == 1) $output .= "\tage_range"; if(OPTIONS_ENABLED_BRAND == 1) $output .= "\tbrand"; if(OPTIONS_ENABLED_CONDITION == 1) $output .= "\tzustand"; if(OPTIONS_ENABLED_CURRENCY == 1) $output .= "\tcurrency"; if(OPTIONS_ENABLED_FEED_LANGUAGE == 1) $output .= "\tlanguage"; if(OPTIONS_ENABLED_FEED_QUANTITY == 1) $output .= "\tquantity"; if(OPTIONS_ENABLED_MADE_IN == 1) $output .= "\tmade_in"; if(OPTIONS_ENABLED_MANUFACTURER == 1) $output .= "\tmanufacturer"; if(OPTIONS_ENABLED_MPN == 1) $output .= "\tmpn"; if(OPTIONS_ENABLED_PAYMENT_ACCEPTED == 1) $output .= "\tpayment_accepted"; if(OPTIONS_ENABLED_PRODUCT_MODEL == 1) $output .= "\tmpn"; if(OPTIONS_ENABLED_PRODUCT_EAN == 1) $output .= "\tean"; if(OPTIONS_ENABLED_PRODUCT_TYPE == 1) $output .= "\tproduct_type"; if(OPTIONS_ENABLED_SHIPPING == 1) $output .= "\tshipping"; if(OPTIONS_ENABLED_AVAILABILITY == 1) $output .= "\tavailability"; if(OPTIONS_ENABLED_WEIGHT == 1) $output .= "\tweight"; if (OPTIONS_ENABLED_ATTRIBUTES == 1) { $products_options_name_query = tep_db_query("select distinct popt.products_options_id, popt.products_options_name from products_options popt, products_attributes patrib where popt.language_id = '" . (int)1 . "' order by popt.products_options_name") or die(mysql_error()); while ($products_options_name = tep_db_fetch_array($products_options_name_query)) { $attributesColumns[] = $products_options_name['products_options_name']; $name = strtolower($products_options_name['products_options_name']); $name = str_replace(" ","_", $name); $output .= "\tc:" . $name; } /* //If you want to only show particular attributes, comment out the above and uncomment this section. //Then enter two lines for each one you want to show. For example, if the atttributes you want to //show are named Color and Fabric, the entries would appear as follows: $attributesColumns[] = "Color"; $attributesColumns[] = "Fabric"; $output .= "\tc:" . strtolower("Color"); $output .= "\tc:" . strtolower("Fabric"); */ } } $output .= "\n"; $result=tep_db_query( $sql ); //Currency Information if(CONVERT_CURRENCY) { $sql3 = " SELECT currencies.value AS curUSD FROM currencies WHERE currencies.code = '" . CURRENCY_TYPE . "'"; $result3=tep_db_query( $sql3 ); $row3 = tep_db_fetch_array( $result3 ); } $loop_counter = 0; while( $row = tep_db_fetch_array( $result ) ) { if (isset($already_sent[$row['id']])) continue; // if we've sent this one, skip the rest of the while loop if( $row['prodStatus'] == 1 || (OPTIONS_ENABLED == 1 && $quantity == 1) ) { if (CONVERT_CURRENCY) { $row['price'] = ereg_replace("[^.0-9]", "", $row['price']); $row['price'] = $row->price * $row3['curUSD']; $row['price'] = number_format($row['price'], 2, '.', ','); } if(SEO_ENABLED=='true'){ $output .= tep_href_link($productURL,$productParam . $row['id'], 'NONSSL', false) . "\t" . preg_replace($_strip_search, $_strip_replace, strip_tags( strtr($row['name'], $_cleaner_array) ) ) . "\t" . preg_replace($_strip_search, $_strip_replace, strip_tags( strtr($row['description'], $_cleaner_array) ) ) . "\t" . $feed_exp_date . "\t" . $row['price'] . "\t" . $row['image_url'] . "\t" . $catIndex[$row['prodCatID']] . "\t" . $row['id']; }else{ $output .= $row['product_url'] . "\t" . preg_replace($_strip_search, $_strip_replace, strip_tags( strtr($row['name'], $_cleaner_array) ) ) . "\t" . preg_replace($_strip_search, $_strip_replace, strip_tags( strtr($row['description'], $_cleaner_array) ) ) . "\t" . $feed_exp_date . "\t" . $row['price'] . "\t" . $row['image_url'] . "\t" . $catIndex[$row['prodCatID']] . "\t" . $row['id']; } //optional values section if(OPTIONS_ENABLED == 1) { if(OPTIONS_ENABLED_AGE_RANGE == 1) $output .= " \t " . OPTIONS_AGE_RANGE; if(OPTIONS_ENABLED_BRAND == 1) $output .= " \t " . OPTIONS_BRAND; if(OPTIONS_ENABLED_CONDITION == 1) $output .= " \t " . OPTIONS_CONDITION; if(OPTIONS_ENABLED_CURRENCY == 1) $output .= " \t " . OPTIONS_DEFAULT_CURRENCY; if(OPTIONS_ENABLED_FEED_LANGUAGE == 1) $output .= " \t " . OPTIONS_DEFAULT_FEED_LANGUAGE; if(OPTIONS_ENABLED_FEED_QUANTITY == 1) $output .= " \t " . $row['quantity']; if(OPTIONS_ENABLED_MADE_IN == 1) $output .= " \t " . OPTIONS_MADE_IN; if(OPTIONS_ENABLED_MANUFACTURER == 1) $output .= " \t " . (in_array($row['mfgName'],explode(",",OPTIONS_MANUFACTURERS_NAME_IGNORE)) ? '' : $row['mfgName']); if(OPTIONS_ENABLED_PAYMENT_ACCEPTED == 1) $output .= " \t " . OPTIONS_PAYMENT_ACCEPTED_METHODS; if(OPTIONS_ENABLED_PRODUCT_MODEL == 1) $output .= " \t " . $row['prodModel']; if(OPTIONS_ENABLED_MPN == 1) $output .= " \t " . OPTIONS_MPN; if(OPTIONS_ENABLED_PRODUCT_EAN == 1) $output .= "\t" . $row->prodEAN; if(OPTIONS_ENABLED_PRODUCT_TYPE == 1) { $catNameTemp = strtolower($catName); $output .= " \t " . $row['catName']; } if(OPTIONS_ENABLED_SHIPPING == 1) $output .= " \t " . OPTIONS_LOWEST_SHIPPING; if(OPTIONS_ENABLED_AVAILABILITY == 1) $output .= " \t " . "available for order"; if(OPTIONS_ENABLED_WEIGHT == 1) $output .= " \t " . $row['prodWeight'] . ' ' .OPTIONS_WEIGHT_ACCEPTED_METHODS; /******************* BEGIN HANDLING THE ATTRIBUTES ********************/ if (OPTIONS_ENABLED_ATTRIBUTES == 1) { $products_attributes_query = tep_db_query("select count(*) as total from products_options popt, products_attributes patrib where patrib.products_id='" . $row['id'] . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)1 . "'"); $products_attributes = tep_db_fetch_array($products_attributes_query); if ($products_attributes['total'] > 0) { $products_options_name_query = tep_db_query("select distinct popt.products_options_id, popt.products_options_name from products_options popt, products_attributes patrib where patrib.products_id='" . (int)$row['id'] . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)1 . "' order by popt.products_options_name") or die(mysql_error()); $trackTabs = ''; while ($products_options_name = mysql_fetch_object($products_options_name_query)) { $products_options_array = array(); $products_options_query = tep_db_query("select pov.products_options_values_id, pov.products_options_values_name, pa.options_values_price, pa.price_prefix from products_attributes pa, products_options_values pov where pa.products_id = '" . (int)$row['id'] . "' and pa.options_id = '" . $products_options_name['products_options_id'] . "' and pa.options_values_id = pov.products_options_values_id and pov.language_id = '" . (int)1 . "'"); while ($products_options = tep_db_fetch_array($products_options_query)) { $products_options_array[] = array('id' => $products_options['products_options_values_id'], 'text' => $products_options['products_options_values_name']); } for ($a = 0; $a < count($attributesColumns); ++$a) { if ($products_options_name['products_options_name'] == $attributesColumns[$a]) { if ($a == 0) $trackTabs = "\t"; else { if (empty($trackTabs)) $trackTabs = str_repeat("\t", $a); $trackTabs .= "\t"; } $output .= $trackTabs; foreach ($products_options_array as $arr) $output .= $arr['text'] . ','; $output = substr($output, 0, -1); } } } } } /******************* END HANDLING THE ATTRIBUTES ********************/ } $output .= " \n"; } $already_sent[$row['id']] = 1; $loop_counter++; if ($loop_counter>750) { $fp = fopen( $OutFile , "a" ); $fout = fwrite( $fp , $output ); fclose( $fp ); $loop_counter = 0; $output = ""; } } $fp = fopen( $OutFile , "a" ); $fout = fwrite( $fp , $output ); fclose( $fp ); echo "File completed: <a href=\"" . tep_href_link( $OutFile ) . "\" target=\"_blank\">" . $destination_file . "</a><br>\n"; chmod($OutFile, 0777); //Start FTP function ftp_file( $ftpservername, $ftpusername, $ftppassword, $ftpsourcefile, $ftpdirectory, $ftpdestinationfile ) { // set up basic connection $conn_id = ftp_connect($ftpservername); if ( $conn_id == false ) { echo "FTP open connection failed to $ftpservername <BR>\n" ; return false; } // login with username and password $login_result = ftp_login($conn_id, $ftpusername, $ftppassword); // check connection if ((!$conn_id) || (!$login_result)) { echo "FTP connection has failed!<BR>\n"; echo "Attempted to connect to " . $ftpservername . " for user " . $ftpusername . "<BR>\n"; return false; } else { echo "Connected to " . $ftpservername . ", for user " . $ftpusername . "<BR>\n"; } if ( strlen( $ftpdirectory ) > 0 ) { if (ftp_chdir($conn_id, $ftpdirectory )) { echo "Current directory is now: " . ftp_pwd($conn_id) . "<BR>\n"; } else { echo "Couldn't change directory on $ftpservername<BR>\n"; return false; } } ftp_pasv ( $conn_id, true ) ; // upload the file $upload = ftp_put( $conn_id, $ftpdestinationfile, $ftpsourcefile, FTP_ASCII ); // check upload status if (!$upload) { echo "$ftpservername: FTP upload has failed!<BR>\n"; return false; } else { echo "Uploaded " . $ftpsourcefile . " to " . $ftpservername . " as " . $ftpdestinationfile . "<BR>\n"; } // close the FTP stream ftp_close($conn_id); return true; } if (FTP_ENABLED) ftp_file( "uploads.google.com", FTP_USERNAME, FTP_PASSWORD, $source_file, "", $destination_file); //End FTP // End TIMER // --------- $etimer = explode( ' ', microtime() ); $etimer = $etimer[1] + $etimer[0]; echo '<p style="margin:auto; text-align:center">'; printf( "Script timer: <b>%f</b> seconds.", ($etimer-$stimer) ); echo '</p>'; // --------- include_once 'includes/application_bottom.php'; ?> many thanks
Jack_mcs Posted August 24, 2013 Posted August 24, 2013 See the google feeder addon. Support Links: For Hire: Contact me for anything you need help with for your shop: upgrading, hosting, repairs, code written, etc. All of My Addons Get the latest versions of my addons Recommended SEO Addons
duderino3 Posted August 24, 2013 Author Posted August 24, 2013 Hi Jack. Thanks for your post, but it can´t be the new one that fits to the newest conditions from google for products, cause there is no gtin included etc. the last update for this is from 2012 and the latest change from google was july 2013. Do you have an idea how i can insert the latest needs from this page? https://support.google.com/merchants/answer/188494?hl=de Thx
Jack_mcs Posted August 24, 2013 Posted August 24, 2013 You have to adjust the settings to work with your product. They are included in the main file. Support Links: For Hire: Contact me for anything you need help with for your shop: upgrading, hosting, repairs, code written, etc. All of My Addons Get the latest versions of my addons Recommended SEO Addons
jestep Posted January 7, 2014 Posted January 7, 2014 Hello Googlefeeder Users On January 3, 2014 Google did it again! I had finally worked out the kinks and had Google Adwords in sync with my Google Merchant account and I was getting a reasonable number of hits daily. I was increasing my product listing Adwords and could see that 2014 was going to be a Great year. Then I noticed that on the 3rd, 4th & 5th I did not have one hit. You guessed it. Google got every penny due on my account and then shut it down. If you thought the Google Product Feed Specifications and the Summary of Attribute Requirements were getting tougher well now every product must have a unique (never to be changed, permanent) ID (can't use Model anymore) and they will not take any product without an image. I suspect all the Google Product Categories must literally match a line item in their taxonomy. So here's the problem. Googlefeeder.php needs to work for those of us who are on Version 2.3.3.4 as a contribution by Jack or as part of 2.3.3.5. Needless to say, THIS IS A REALLY REALLY REALLY HIGH PRIORITY!!!!!!!!! If we have to wait for it to be incorporated into 2.3.3.5 we also need Easy Populate added in also. As Mr Ross Perot would say, "I'm all ears." Tell me what we are going to do. Joseph E. "Joe" Stephenson[email protected]
fashnoshop Posted February 22, 2014 Posted February 22, 2014 I ll second to@@jestep. Desperately waiting for a way out from osc leaders enabling to again start publishing feeds to google base.
Mort-lemur Posted February 22, 2014 Posted February 22, 2014 This will probably never be core to OSC as not everybody uses google feeds - it will probably remain an add-on forever - there is a comprehensive support thread for google feeder which is very well supported by Jack. Now running on a fully modded, Mobile Friendly 2.3.4 Store with the Excellent MTS installed - See my profile for the mods installed ..... So much thanks for all the help given along the way by forum members.
burt Posted February 22, 2014 Posted February 22, 2014 @@Mort-lemur Confirmed. @@jestep @@fashnoshop This addon will never be a part of the core code as it presently stands as it is not coded in a manner consistent with osCommerce.
Recommended Posts
Archived
This topic is now archived and is closed to further replies.