JoeySchmoe Posted September 25, 2012 Share Posted September 25, 2012 Has anything changed very recently on Google Merchant feeds? On Friday we submitted our standard feed (7,000+ products) we've been doing for months, no issues. Today we submit with a few minor changed and we get "0 of 7,000 items inserted". Can't seem to find an issue. anyone having similar problems? Thanks! Link to comment Share on other sites More sharing options...
Jack_mcs Posted September 25, 2012 Share Posted September 25, 2012 Google has changed how they handle the feeds. You have to pay to be listed now. If you want to continue having your products listed in their shopping area, you have to create an account for paying. 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 Link to comment Share on other sites More sharing options...
♥kymation Posted September 25, 2012 Share Posted September 25, 2012 Google changed the requirements a while back. The Shopping listings are now a paid service, so if you don't have an account set up to pay them for listings you're not doing any good anyway. Regards JIm See my profile for a list of my addons and ways to get support. Link to comment Share on other sites More sharing options...
JoeySchmoe Posted September 25, 2012 Share Posted September 25, 2012 Actually we have a PLA (Product Listing Ad) setup with our Google Adwords account. We first upload to the "test feed" we have setup to ensure all the products are "inserted" without errors, then we upload to the actual feed. Our test feed is not being inserted but our actual feed from Friday is/was inserted. I should have outlined this in the original post. Link to comment Share on other sites More sharing options...
♥altoid Posted September 26, 2012 Share Posted September 26, 2012 I have one master google merchant center account on which I have four shops with google base uploads that are accepted and processed. Only one of the shops actually has an active adword campaign, but apparently that's all google needs because the other three shops upload as well to google base. I am not a professional webmaster or PHP coder by background or training but I will try to help as best I can. I remember what it was like when I first started with osC. It can be overwhelming. However, I strongly recommend considering hiring a professional for extensive site modifications, site cleaning, etc. There are several good pros here on osCommerce. Look around, you'll figure out who they are. Link to comment Share on other sites More sharing options...
corsaretto Posted October 3, 2012 Share Posted October 3, 2012 Hello and thanks to Jack for his important contrib. I had never installed this contrib, so I installed version 3.0 on 18-Mar-2012 but unfortunately I can not make it work. Running googlebase.php i receved this error: : SQL error Unknown column 'categories.categories_id' in 'field list'| catInfo = SELECT categories.categories_id AS curCatID, categories.parent_id AS parentCatID, categories_description.categories_name AS catName FROM goldtest_categories, goldtest_categories_description WHERE categories.categories_id = categories_description.categories_id AND categories_description.language_id = 6 All the tables in my shop have a prefix (goldtest_) that has been placed in the file database_table.php (Note: I use the shop in Italy and the Italian language for me is the language_id = 6) Help me ... I can not understand where is the error. Thanks in advance So I have changed the SELECT statement in the file googlebase.php that looks like this: <?php // Title: Google Base Data Feeder // Version: 3.0 by Jack_mcs at oscommerce-solution.com // google feed requirements - http://www.google.com/support/merchants/bin/answer.py?hl=en&answer=188494 chdir('../'); include_once 'includes/application_top.php'; /*************** BEGIN MASTER SETTINGS ******************/ define('SEO_ENABLED','true'); //Change to 'false' to disable if Ultimate SEO URLs is not installed define('FEEDNAME', 'googlebase.txt'); //from your googlebase account define('DOMAIN_NAME', HTTP_SERVER . DIR_WS_CATALOG); //www.yourwebsite.com/catalog/ - your correct domain name (don't include www unless it is used but do include the shops directory) define('FTP_USERNAME', 'googleFTP-username'); //created from within your googlebase account define('FTP_PASSWORD', 'googleFTP-password'); //created from within your googlebase account // define('FTP_ENABLED', (isset($_GET['noftp']) ? '0' : '1')); //set to 0 to disable - Spostata alla riga 109 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_ID', 6); //Change this to the id of your language. Nella mia versione: ITALIAN=1 | ENGLISH=7 define('QUOTES_CATEGORY_NAME',''); //if the Quotes contribution is installed, enter the name of the quotes category here /*************** OPTIONS - IF ENABLED, ALSO SET THE SIMILAR OPTION FARTHER DOWN ******************/ /*************** ENANLED=1 DISABLED=0 ***********************************************************/ define('OPTIONS_ENABLED', 1); // Se settato ad 1 abilita il seguente blocco di OPZIONI define('OPTIONS_ENABLED_AGE_RANGE', 0); define('OPTIONS_ENABLED_ATTRIBUTES', 0); define('OPTIONS_ENABLED_BRAND', 1); //if set, see options for this setting below define('OPTIONS_ENABLED_CONDITION', 1); define('OPTIONS_ENABLED_CURRENCY', 0); define('OPTIONS_ENABLED_EXPIRATION', 1); define('OPTIONS_ENABLED_FEED_LANGUAGE', 0); define('OPTIONS_ENABLED_GTIN', 0); //if set, a database field named "products_gtin" must exist. GTIN = Global Trade Item Numbers define('OPTIONS_ENABLED_GOOGLE_PRODUCT_CATEGORY', 0); //http://www.google.com/support/merchants/bin/answer.py?answer=160081 define('OPTIONS_ENABLED_GOOGLE_UTM', 0); define('OPTIONS_ENABLED_ISBN', 0); //if set, a database field named "products_isbn" must exist define('OPTIONS_ENABLED_MADE_IN', 0); define('OPTIONS_ENABLED_MPN', 0); //if set, see options for this setting below. MPN = Manufacturer Part Number define('OPTIONS_ENABLED_PRODUCT_MODEL', 0); //displays the product model define('OPTIONS_ENABLED_PRODUCT_TYPE', 1); define('OPTIONS_ENABLED_SHIPPING', 0); define('OPTIONS_ENABLED_INCLUDE_TAX', 0); //0 = no tax, 1 = uses google method, 2 = UK Vat define('OPTIONS_ENABLED_UPC', 0); //if set, a database field named "products_upc" must exist. UPC = Universal Product Code define('OPTIONS_ENABLED_WEIGHT', 0); //some of the following only work if the matching option is enabled above. define('OPTIONS_AGE_RANGE', '20-90 years'); define('OPTIONS_AVAILABILITY', 'quantity'); //in stock - Include this value if you are certain that it will ship (or be in-transit to the customer) in 3 business days or less. //available for order - Include this value if it will take 4 or more business days to ship it to the customer. //out of stock - You’re currently not accepting orders for this product. //preorder - You are taking orders for this product, but it’s not yet been released. //if empty (no entry), the data will be loaded from the database. A field in the products description table named products_availability is required //if "quantity," the field will be popuplated via the quantity: 0 or less = out of stock, greater than 0 = in stock //if "status," the field will be popuplated via the status field. in or out of stock define('OPTIONS_BRAND', 'manu'); //leave "blank" to load from the database field named "products_brand", set to "name" to substitute the products name, "manu" to substitute the manufactueres name or "model" to substitute the products model define('OPTIONS_CONDITION', 'new'); //possible entries are "New", "Refurbished", "Used" or "blank", which loads from the database field named "products_condition" define('OPTIONS_CURRENCY', 'USD'); define('OPTIONS_CURRENCY_THOUSANDS_POINT', ','); //this is the thousands point as in $1,000. define('OPTIONS_DATE_FORMAT', 'Y-m-d'); //change how the date is formatted define('OPTIONS_FEED_LANGUAGE', 'it'); // Lingua del Feed define('OPTIONS_GOOGLE_UTM', '?utm_source=GoogleBase1&utm_medium=BaseFeed1&utm_campaign=products'); //see http://www.google.com/support/googleanalytics/bin/answer.py?hl=en&answer=55578 define('OPTIONS_GOOGLE_PRODUCT_CATEGORY', ''); //enter "db" to load from a database field named "google_product_category" enter or enter a specific google category - see taxomy - http://www.google.com/support/merchants/bin/answer.py?answer=160081 define('OPTIONS_GTIN', ''); define('OPTIONS_ISBN', ''); define('OPTIONS_MADE_IN', 'US'); define('OPTIONS_MPN', 'model'); //leave "blank" to load from the database field named "products_mpn", set to "name" to substitute the products name, "manu" to substitute the manufactueres name or "model" to substitute the products model define('OPTIONS_PRODUCT_TYPE', ''); //"full" means the full category path (i.e., hardware,printers), anything else, or "blank", means just the products category (i.e., printers) //the following is for the shipping override option - enter multiple values separated by a comma //Format entries follow. A colon must be present for each field, whether it is entered or not. // COUNTRY - OPTIONAL - If country isn't included, we'll assume the shipping price applies to the target country of the item. If region isn't included, the shipping price will apply across the entire country. // REGION - OPTIONAL - blank for entire country, otherwise, us two-letter State (CA), full zip code (90210) or wildcard zip code (902*) // SERVICE - OPTIONAL - The service class or delivery speed, i.e. ground // PRICE - REQUIRED - Fixed shipping price (assumes the same currency as the price attribute) define('OPTIONS_SHIPPING_STRING', 'US:FL:Ground:7.00'); //says charge shipping to US for residents of Florida at 5% and don't apply tax to shipping define('OPTIONS_TAX_RATE' , '20.0'); //default = 0 (e.g. for 20.0% tax use "$taxRate = 20.0;") //only used in the next line define('OPTIONS_TAX_CALC', (OPTIONS_ENABLED_INCLUDE_TAX == 2 ? (OPTIONS_TAX_RATE/100) + 1 : '1')); //UK. US tax rate - US is ignorded since it is 1 //the following is for the tax override option - enter multiple values separated by a comma //Format entries follow. A colon must be present for each field, whether it is entered or not. // COUNTRY - OPTIONAL - country the tax applies to - only US for now // REGION - OPTIONAL - blank for entire country, otherwise, us two-letter State (CA), full zip code (90210) or wildcard zip code (902*) // TAX - REQUIRED - default = 0 (e.g. for 5.76% tax use 5.76) // SHIPPING - OPTIONAL - do you charge tax on shipping - choices are y or n define('OPTIONS_TAX_STRING', 'US:FL:5.00:n'); //says charge tax to US for residents of Florida at 5% and don't apply tax to shipping define('OPTIONS_UPC', ''); define('OPTIONS_WEIGHT_ACCEPTED_METHODS', 'kg'); //Valid units include lb, pound, oz, ounce, g, gram, kg, kilogram. //the following allow skipping certain items define('OPTIONS_IGNORE_PRODUCT_PRICE', 0); //0 = include products with price of 0 in output, 1 = ignore products with price of 0 define('OPTIONS_IGNORE_PRODUCT_ZERO', 0); //0 = include products with qty of 0 in output, 1 = ignore products with qty of 0 /*************** END MASTER SETTINGS ******************/ /*************** NO EDITS NEEDED BELOW THIS LINE *****************/ //******************** // Start TIMER // ----------- $stimer = explode( ' ', microtime() ); $stimer = $stimer[1] + $stimer[0]; // ----------- define('FTP_ENABLED', (isset($_GET['noftp']) ? '0' : '1')); //DO NOT CHANGE THIS LINE $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(); 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 = @[member='date'](OPTIONS_DATE_FORMAT, time() + 2419200 ); if (!($link=mysql_connect(DB_SERVER,DB_SERVER_USERNAME,DB_SERVER_PASSWORD))) { echo "Error when connecting itself to the data base"; exit(); } if (!mysql_select_db( DB_DATABASE , $link )) { echo "Error the data base does not exist"; exit(); } $quotes = ''; if (QUOTES_CATEGORY_NAME !== '') { $quotes = " and products.customers_email_address = '' and products.quotes_email_address = ''"; } $extraFields = ''; if (OPTIONS_AVAILABILITY == '') { $extraFields .= ' products_description.products_availability as availability, '; } if (OPTIONS_ENABLED_BRAND == 1) { if (strlen(OPTIONS_BRAND) == 0) { $extraFields .= ' products.products_brand as brand, '; } else { switch (OPTIONS_BRAND) { case 'name': $extraFields .= ' products_description.products_name as brand, '; break; case 'manu': $extraFields .= ' manufacturers.manufacturers_name as brand, '; break; case 'model': $extraFields .= ' products.products_model as brand, '; break; default: $extraFields .= ' products_description.products_name as brand, '; } } } if (OPTIONS_ENABLED_CONDITION == 1 && strlen(OPTIONS_CONDITION) == 0) { $extraFields .= ' products.products_condition as pcondition, '; } if (OPTIONS_ENABLED_GTIN == 1 && strlen(OPTIONS_GTIN) == 0) { $extraFields .= ' products.products_gtin as gtin, '; } if (OPTIONS_ENABLED_ISBN == 1 && strlen(OPTIONS_ISBN) == 0) { $extraFields .= ' products.products_isbn as isbn, '; } if (OPTIONS_ENABLED_MPN == 1) { if (strlen(OPTIONS_MPN) == 0) { $extraFields .= ' products.products_mpn as mpn, '; } else { switch (OPTIONS_MPN) { case 'name': $extraFields .= ' products_description.products_name as mpn, '; break; case 'manu': $extraFields .= ' manufacturers.manufacturers_name as mpn, '; break; case 'model': $extraFields .= ' products.products_model as mpn, '; break; default: $extraFields .= ' products_description.products_name as mpn, '; } } } if (OPTIONS_ENABLED_UPC == 1 && strlen(OPTIONS_UPC) == 0) { $extraFields .= ' products.products_upc as upc, '; } if (OPTIONS_ENABLED_GOOGLE_PRODUCT_CATEGORY == 1 && OPTIONS_GOOGLE_PRODUCT_CATEGORY == 'db') { $extraFields .= ' products_description.google_product_category as google_category, '; } $sql = " SELECT concat( '" . $productURL . "' ,products.products_id) AS product_url, products_model AS prodModel, 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, " . $extraFields . " FORMAT( IFNULL(specials.specials_new_products_price, products.products_price) * " . OPTIONS_TAX_CALC . ",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 (" . TABLE_CATEGORIES . ", " . TABLE_CATEGORIES_DESCRIPTION . ", " . TABLE_PRODUCTS . ", " . TABLE_PRODUCTS_DESCRIPTION . ", " . TABLE_PRODUCTS_TO_CATEGORIES . ") left join " . TABLE_MANUFACTURERS . " on ( manufacturers.manufacturers_id = products.manufacturers_id ) left join " . TABLE_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 = " . DEFAULT_LANGUAGE_ID . " AND products_description.language_id = " . DEFAULT_LANGUAGE_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 " . TABLE_CATEGORIES . ", " . TABLE_CATEGORIES_DESCRIPTION . " WHERE categories.categories_id = categories_description.categories_id " . $quotes . " AND categories_description.language_id = " . DEFAULT_LANGUAGE_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 = mysql_query( $catInfo )or die( $FunctionName . ": SQL error " . mysql_error() . "| catInfo = " . htmlentities($catInfo) ); while ( $catRow = mysql_fetch_object( $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\ttitle\tdescription\tprice\timage_link\tid\tavailability"; $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 .= "\tcondition"; if(OPTIONS_ENABLED_CURRENCY == 1) $output .= "\tcurrency"; if(OPTIONS_ENABLED_EXPIRATION == 1) $output .= "\texpiration_date"; if(OPTIONS_ENABLED_FEED_LANGUAGE == 1) $output .= "\tlanguage"; if(OPTIONS_ENABLED_GOOGLE_PRODUCT_CATEGORY == 1) $output .= "\tgoogle product_category"; if(OPTIONS_ENABLED_GTIN == 1) $output .= "\tgtin"; if(OPTIONS_ENABLED_ISBN == 1) $output .= "\tisbn"; if(OPTIONS_ENABLED_MADE_IN == 1) $output .= "\tmade_in"; if(OPTIONS_ENABLED_MPN == 1) $output .= "\tmpn"; if(OPTIONS_ENABLED_PRODUCT_MODEL == 1) $output .= "\tmodel"; if(OPTIONS_ENABLED_PRODUCT_TYPE == 1) $output .= "\tproduct_type"; if(OPTIONS_ENABLED_SHIPPING == 1) $output .= "\tshipping"; if(OPTIONS_ENABLED_INCLUDE_TAX == 1) $output .= "\ttax"; if(OPTIONS_ENABLED_UPC == 1) $output .= "\tupc"; if(OPTIONS_ENABLED_WEIGHT == 1) $output .= "\tweight"; if (OPTIONS_ENABLED_ATTRIBUTES == 1) { // OLD $products_options_name_query = mysql_query("select distinct popt.products_options_id, popt.products_options_name from " . TABLE_PRODCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where popt.language_id = '" . (int)1 . "' order by popt.products_options_name") or die(mysql_error()); $products_options_name_query = mysql_query("select distinct popt.products_options_id, popt.products_options_name from " . TABLE_PRODCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where popt.language_id = '" . DEFAULT_LANGUAGE . "' order by popt.products_options_name") or die(mysql_error()); while ($products_options_name = mysql_fetch_object($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=mysql_query( $sql )or die( $FunctionName . ": SQL error " . mysql_error() . "| sql = " . htmlentities($sql) ); //Currency Information if(CONVERT_CURRENCY) { $sql3 = " SELECT currencies.value AS curUSD FROM " . TABLE_CURRENCIES . " WHERE currencies.code = '" . CURRENCY_TYPE . "'"; $result3=mysql_query( $sql3 )or die( $FunctionName . ": SQL error " . mysql_error() . "| sql3 = " . htmlentities($sql3) ); $row3 = mysql_fetch_object( $result3 ); } $loop_counter = 0; $statsArray = array(); //record messages $statsArrayPrice = array(); //record prices of 0 $statsArrayQty = array(); //record quantities of 0 $showPriceZero = false; $showQtyZero = false; while( $row = mysql_fetch_object( $result ) ) { if (isset($already_sent[$row->id])) continue; // if we've sent this one, skip the rest of the while loop if (OPTIONS_IGNORE_PRODUCT_PRICE > 0 && $row->price <= 0) continue; //skip products with 0 price if (OPTIONS_IGNORE_PRODUCT_ZERO > 0 && $row->quantity < 1) continue; //skip products with 0 qty if (OPTIONS_IGNORE_PRODUCT_PRICE < 1 && $row->price <= 0 && $row->prodStatus == 1) {$statsArray['price']++; $showPriceZero = true; }//record for warning if (OPTIONS_IGNORE_PRODUCT_ZERO < 1 && $row->quantity < 1 && $row->prodStatus == 1) {$statsArray['qty']++; $showQtyZero = true; } //record for warning $statsArray['total']++; if ( $row->prodStatus == 1 ) { if (CONVERT_CURRENCY) { $row->price = preg_replace("/[^.0-9]/", "", $row->price); $row->price = $row->price * $row3->curUSD; $row->price = number_format($row->price, 2, '.', OPTIONS_CURRENCY_THOUSANDS_POINT); } $availability = ''; switch (OPTIONS_AVAILABILITY) { case 'quantity': $availability = ($row->quantity > 0 ? 'in stock' : 'out of stock'); break; case 'status': $availability = ($row->prodStatus == 1 ? 'in stock' : 'out of stock'); break; case '': $availability = $row->availability; break; default: $availability = OPTIONS_AVAILABILITY; } $google_utm = (OPTIONS_ENABLED_GOOGLE_UTM ? OPTIONS_GOOGLE_UTM : ''); $pURL = $row->product_url; if(SEO_ENABLED=='true'){ $output .= tep_href_link($productURL,$productParam . $row->id, 'NONSSL', false) . $google_utm . "\t"; $pURL = tep_href_link($productURL,$productParam . $row->id, 'NONSSL', false); } else { $output .= $row->product_url . $google_utm . "\t"; } if ($showPriceZero) { $showPriceZero = false; $statsArrayPrice[] = $pURL; } if ($showQtyZero) { $showQtyZero = false; $statsArrayQty[] = $pURL; } $output .= 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" . $row->price . "\t" . $row->image_url . "\t" . // $catIndex[$row->prodCatID] . "\t" . $row->id . "\t" . $availability; //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" . (isset($row->brand) ? $row->brand : (strlen(OPTIONS_BRAND) ? $row->name : "Not Supported")); if(OPTIONS_ENABLED_CONDITION == 1) $output .= "\t" . (isset($row->pcondition) ? $row->pcondition : OPTIONS_CONDITION); if(OPTIONS_ENABLED_CURRENCY == 1) $output .= "\t" . OPTIONS_CURRENCY; if(OPTIONS_ENABLED_EXPIRATION == 1) $output .= "\t" . $feed_exp_date; if(OPTIONS_ENABLED_FEED_LANGUAGE == 1) $output .= "\t" . OPTIONS_FEED_LANGUAGE; if(OPTIONS_ENABLED_GOOGLE_PRODUCT_CATEGORY == 1) $output .= "\t" . (OPTIONS_GOOGLE_PRODUCT_CATEGORY == 'db' ? $row->google_category : OPTIONS_GOOGLE_PRODUCT_CATEGORY); if(OPTIONS_ENABLED_GTIN == 1) $output .= "\t" . (isset($row->gtin) ? $row->gtin : (strlen(OPTIONS_GTIN) ? OPTIONS_GTIN : "Not Supported")); if(OPTIONS_ENABLED_ISBN == 1) $output .= "\t" . (isset($row->isbn) ? $row->isbn : (strlen(OPTIONS_ISBN) ? OPTIONS_ISBN : "Not Supported")); if(OPTIONS_ENABLED_MADE_IN == 1) $output .= "\t" . OPTIONS_MADE_IN; if(OPTIONS_ENABLED_MPN == 1) $output .= "\t" . (isset($row->mpn) ? $row->mpn : (strlen(OPTIONS_MPN) ? OPTIONS_MPN : "Not Supported")); if(OPTIONS_ENABLED_PRODUCT_MODEL == 1) $output .= "\t" . (! empty($row->prodModel) ? $row->prodModel : $row->catName); if(OPTIONS_ENABLED_PRODUCT_TYPE == 1) $output .= "\t" . ((OPTIONS_PRODUCT_TYPE == strtolower('full')) ? $catIndex[$row->prodCatID] : $row->catName); if(OPTIONS_ENABLED_SHIPPING == 1) $output .= "\t" . OPTIONS_SHIPPING_STRING; if(OPTIONS_ENABLED_INCLUDE_TAX == 1) $output .= "\t" . OPTIONS_TAX_STRING; if(OPTIONS_ENABLED_UPC == 1) $output .= "\t" . (isset($row->upc) ? $row->upc : (strlen(OPTIONS_UPC) ? OPTIONS_UPC : "Not Supported")); if(OPTIONS_ENABLED_WEIGHT == 1) $output .= "\t" . $row->prodWeight . ' ' .OPTIONS_WEIGHT_ACCEPTED_METHODS; /******************* BEGIN HANDLING THE ATTRIBUTES ********************/ if (OPTIONS_ENABLED_ATTRIBUTES == 1) { // OLD $products_attributes_query = mysql_query("select count(*) as total from " . TABLE_PRODCTS_OPTIONS . " popt, " . TABLE_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_query = mysql_query("select count(*) as total from " . TABLE_PRODCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where patrib.products_id='" . $row->id . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . DEFAULT_LANGUAGE . "'"); $products_attributes = mysql_fetch_object($products_attributes_query); if ($products_attributes->total > 0) { // OLD $products_options_name_query = mysql_query("select distinct popt.products_options_id, popt.products_options_name from " . TABLE_PRODCTS_OPTIONS . " popt, " . TABLE_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()); $products_options_name_query = mysql_query("select distinct popt.products_options_id, popt.products_options_name from " . TABLE_PRODCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where patrib.products_id='" . (int)$row->id . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . DEFAULT_LANGUAGE . "' 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(); // OLD $products_options_query = mysql_query("select pov.products_options_values_id, pov.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " pa, " . TABLE_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 . "'"); $products_options_query = mysql_query("select pov.products_options_values_id, pov.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " pa, " . TABLE_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 = '" . DEFAULT_LANGUAGE . "'"); while ($products_options = mysql_fetch_object($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 '<p style="margin:auto; text-align:left">'; printf( "Feed contains %d products.", $statsArray['total'] ); echo '</p>'; $warning = false; if (count($statsArray['price']) > 0) { $warning = true; echo '<p style="margin:auto; text-align:left; padding:10px; 0px">'; printf( "***Warning:*** There are %d products with a price of $0.<br>", $statsArray['price'] ); for ($i = 0; $i < count($statsArrayPrice); ++$i) { echo ' ' . $i . ' - ' . $statsArrayPrice[$i] .'<br>'; } echo '</p>'; } if (count($statsArray['qty']) > 0) { $warning = true; echo '<p style="margin:auto; text-align:left; padding-bottom:10px; ">'; printf( "***Warning:*** There are %d products with a quantity of 0.<br>", $statsArray['qty'] ); for ($i = 0; $i < count($statsArrayQty); ++$i) { echo ' ' . $i . ' - ' . $statsArrayQty[$i] .'<br>'; } echo '</p>'; } $completed = 'File Completed' . ($warning ? ' (with warnings): ' : ':' ); echo '<p style="margin:auto; text-align:left">'; echo "$completed <a href=\"../" . $OutFile . "\" target=\"_blank\">" . $destination_file . "</a><br>\n\n"; echo '</p>'; $csvFileDest = str_replace('.txt', '.csv', $destination_file); $csvFileLocn = str_replace('.txt', '.csv', $OutFile); $csvStr = str_replace("\t", '",", ', $output); $fp = fopen( $csvFileLocn , "a" ); $fout = fwrite( $fp , $csvStr ); fclose( $fp ); echo '<p style="margin:auto; text-align:left; padding-top:10px;">'; echo 'Use the following for easier viewing from this page. It is still in development and not meant for anything other than viewing.' . "<br>\n\n"; echo "$completed <a href=\"../" . $csvFileLocn . "\" target=\"_blank\">" . $csvFileDest . "</a><br>\n"; echo '</p>'; 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>'; // --------- ?> Ad Maiora Link to comment Share on other sites More sharing options...
corsaretto Posted October 3, 2012 Share Posted October 3, 2012 ok, i have corrected Ad Maiora Link to comment Share on other sites More sharing options...
don01234 Posted October 22, 2012 Share Posted October 22, 2012 I've been using this wonderful contribution for over a year and had no problems at all. However, just last week I noticed that there was sudden drop in people who signing up on website and found that the customer weren't able to to free search on google. I read the posts and signed up and have adword campaign going, also. Please see following pictures from my google merchant account: I've been rechecking every steps and making sure and as far as I can tell, I've done everything way I did before. However, my products are still not searchable on the free side because when I do a search on an item, I do not see the my store's products listing. Please, any help will much appreciated, I'm about to go mad trying to get this to work. Link to comment Share on other sites More sharing options...
Jack_mcs Posted October 22, 2012 Share Posted October 22, 2012 You should check your google account and make sure they are accepting the feed. There is a place in the googlebase section where they list products with errors. 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 Link to comment Share on other sites More sharing options...
don01234 Posted October 22, 2012 Share Posted October 22, 2012 Thanks for getting back to me, I think you are talking about this page: http://midhardware.com/google4.jpg There is no problem there either..... Link to comment Share on other sites More sharing options...
Jack_mcs Posted October 22, 2012 Share Posted October 22, 2012 So you can't see the invalid UPC message? Also, the page I meant is the data quality but any of them will get you to the errors. 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 Link to comment Share on other sites More sharing options...
don01234 Posted October 22, 2012 Share Posted October 22, 2012 There are only about 200 items with UPC warnings, since we have about 75000 items that's not really biggie. Take a look at data quality page. http://midhardware.com/google3.jpg I know there are some that requires suggested optimization but my understanding is these are not that serious problem and it should not block my products from appearing.... or is it? Even with these warnings our listing work before... Link to comment Share on other sites More sharing options...
Jack_mcs Posted October 22, 2012 Share Posted October 22, 2012 Before the paid requirement, google would not use any of the feed if any of it was wrong. I have not seen anything to suggest otherwise now but with any problem of this type, it is always best to fix the obvious first. 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 Link to comment Share on other sites More sharing options...
gaspower Posted December 1, 2012 Share Posted December 1, 2012 Hello, Sorry, I have searched for a solution for the below error. The answers I have seen mostly are for the config file, and it seems to be set correct for functions and includes, define('DIR_WS_INCLUDES', 'includes/'); define('DIR_WS_FUNCTIONS', DIR_WS_INCLUDES . 'functions/'); Error I am getting from the cron job is, PHP Warning: include(includes/configure.php): failed to open stream: No such file or directory in /home/virtual/site1/fst/var/www/html/adminm/includes/application_top.php on line 28 PHP Warning: include(): Failed opening 'includes/configure.php' for inclusion (include_path='.:/php/includes:/usr/share/php') in /home/virtual/site1/fst/var/www/html/adminm/includes/application_top.php on line 28 PHP Warning: require(DIR_WS_FUNCTIONScompatibility.php): failed to open stream: No such file or directory in /home/virtual/site1/fst/var/www/html/adminm/includes/application_top.php on line 35 PHP Fatal error: require(): Failed opening required 'DIR_WS_FUNCTIONScompatibility.php' (include_path='.:/php/includes:/usr/share/php') in /home/virtual/site1/fst/var/www/html/adminm/includes/application_top.php on line 35 Lines in my applications_top, Line 28 // load server configuration parameters if (file_exists('includes/local/configure.php')) { // for developers include('includes/local/configure.php'); } else { include('includes/configure.php'); (Line 28) } Line 35 require(DIR_WS_FUNCTIONS . 'compatibility.php'); Thanks JR Link to comment Share on other sites More sharing options...
Jack_mcs Posted December 2, 2012 Share Posted December 2, 2012 The script has to load from the shop side and the error is saying it can't find the needed code because it is being ran on the admin side. You have set up the cron job to cd into the admin directory and then include the full path to the script. This is specific to the server you are on so you will need to ask your host for help with it. 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 Link to comment Share on other sites More sharing options...
gaspower Posted December 2, 2012 Share Posted December 2, 2012 Hello Jack_mcs, Thank you for the prompt reply. Sorry, I am a little confused. As per the instructions for installing Google Feeder, it mentions for the cron job to be the following, php -q /home/virtual/site1.com/var/www/html/admin/googlefeeder.php This is the full path to googlefeeder.php. Thank you Link to comment Share on other sites More sharing options...
Jack_mcs Posted December 2, 2012 Share Posted December 2, 2012 Cron jobs are specific to the server. The one provided will work on many servers but not all. I posted a differetn format here in the trhead at some point, though I don't know where it would be. But from memory, it is something like cd /full path to admin/; /usr/local/bin/php -c /full path to root php.ini -q /full path to googlefeeder.php Your host can give the correct syntax. 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 Link to comment Share on other sites More sharing options...
gaspower Posted December 2, 2012 Share Posted December 2, 2012 Hello, Thank you very much, that worked. Link to comment Share on other sites More sharing options...
Frekey Posted December 6, 2012 Share Posted December 6, 2012 Hi, I have a question, is there an option to exclude some brand(s)? If not, how could it be the easiest way to do it? Thanks, Link to comment Share on other sites More sharing options...
Jack_mcs Posted December 6, 2012 Share Posted December 6, 2012 No, there's not. There is an option to exclude products so you could duplicate that code and have it work for brands, depending upon what you are using for brands. 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 Link to comment Share on other sites More sharing options...
tecman Posted January 6, 2013 Share Posted January 6, 2013 Hello, The default language are 1 (Portuguese) on my store and not working for me! --- Feed contains 0 products. File Completed: feed_makedonos.txt Use the following for easier viewing from this page. It is still in development and not meant for anything other than viewing. File Completed: feed_makedonos.csv Script timer: 0.001691 seconds. --- Please any idea for help? Thanks Link to comment Share on other sites More sharing options...
Jack_mcs Posted January 7, 2013 Share Posted January 7, 2013 Be sure you have the latest version installed since it grabs the default language automatically. If not, you have to manually edit the googlefeeder.php file. This, of course, assumes your products have quantities. Some shops run without setting them. 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 Link to comment Share on other sites More sharing options...
ghostrc Posted January 18, 2013 Share Posted January 18, 2013 I was hoping someone might be able to point me in the right direction. I have googlefeeder installed that works perfectly. I have now installed the Extra Fields contribution as I will be selling 2nd hand items as well as new. I now need googlefeeder to pick up the products condition. Looking at the database, the extra fields contribution has added 'products to products extra fields' to the database and inside this there is 'products_id', 'products_extra_fields_id' and then 'products_extra_fields_value' which contains the products condition. I just need some help to tell the googlefeed to pick the products condition here? Link to comment Share on other sites More sharing options...
tecman Posted January 21, 2013 Share Posted January 21, 2013 Be sure you have the latest version installed since it grabs the default language automatically. If not, you have to manually edit the googlefeeder.php file. This, of course, assumes your products have quantities. Some shops run without setting them. Yes, I have the latest version ... Any idea? Can help me? Thanks a lot! Link to comment Share on other sites More sharing options...
markfinstro Posted January 23, 2013 Share Posted January 23, 2013 Just a note - not sure if anyone else had experienced this. I recently installed SEO URLs 5 latest version by FWR media using an older version of the Google Feeder (around 2.5 I think). Having had a series of warnings from Google regarding duplicate content I discovered that when the google feeder was run in the admin section, for some reason the configuration of the SEO URLs was reset to the default setup - resulting in sitemaps being generated with different URLs. I tested this and every time the feeder was run, the SEO config was reset. The latest version of the google feeder (version 3) works perfectly and has fixed whatever issue or conflict was present before. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.