Alan Hou的个人博客

Magento生成Google Shopping Feed PHP代码

Google Shopping是由之前免费的Google Base所衍生出来的产品,现在Google Shopping的广告PLA(Product Listing Ads)成为Google产品线中的一个重要产品,尤其是现在移动端流量越来越大,其重要性也在逐步增强。Alan个人认为Google Shopping从转化率,投入成本方面而言要优于传统的文本的广告。在网上搜索生成Google Shopping的feed代码时,都是收费的插件,对于很多用惯了免费软件的朋友自然是不愿意去购买的,Alan也是由于好奇,稍微研究了一下Magento的api,使用水平有限的php写了一个feed生成文件,存在本地,然后手动上传的Merchant Center后台。这个代码并不太成熟,没有加入ftp上传功能,但是可以使用,欢迎大神协助优化。
使用下面代码时需要在Magento后台创建一个针对Soap的api用户名密码,并进行适当修改,如保存路径,产品类别等。
由于公司有技术团队负责这块任务,以下产品只进行过少量次数的使用,所以在您的使用过程中会出现bug,欢迎反映出来,一起探讨。
2014年6月23日:2014年8月底Google将会使用Shopping Campaigns作为PLA的默认选项,在新的版本中无法通过adwords_labels进行筛选,因此将adwords_labels更新为custom_label_0

注:2015年4月Google增加了增量feed上传(Online Product Inventory Update),只需在feed中更新price, availability(促销信息)即’price’,’availability’,’sale price’ 和 ‘sale price effective date’字段

<?php

	set_time_limit(0); //避免文件执行时超时

    date_default_timezone_set("America/Los_Angeles"); //设置时区,这里使用太平洋时间

	define('DOMAIN',''); //替换成自己网站的域名

	define('API_USER',''); //填写在后台创建的API用户名

	define('API_PASS',''); //填写在后台创建的API密码

	define('FILE_PATH','d://data_feed.txt'); //写入feed的路径及文件名,如d://data_feed.txt

	define('BRAND',''); //这里假设您使用自己的商标,如果对应字段则需对代码进行修改

	//ini_set('max_execution_time', 100000); // just put a lot of time

	//ini_set('default_socket_timeout', 100000); // same

	$client = new SoapClient(DOMAIN.'api/soap/?wsdl',array("connection_timeout"=>10000));

	$session=$client->login(API_USER,API_PASS);

	//文件头

	$init="id\ttitle\tdescription\tgoogle_product_category\tproduct_type\tlink\tmobile_link\timage_link\tadditional_image_link\tcondition\tavailability\tprice\tsale_price\tsale_price_effective_date\tbrand\tgtin\tmpn\tcustom_label_0\tshipping\ttax\tgender\tcolor\tage_group\n";

	$handle=fopen(FILE_PATH,'w') or die("can't open file");

	if(fwrite($handle,$init)===FALSE){

		echo"Can't write to ".FILE_PATH;

	}else{

		echo "generating feed";

	}

	fclose($handle);
	$category_list = $client->call($session, 'catalog_category.tree'); //获取category列表并存入数组中
		for($n=0; $n<count($category_list['children'][0]['children']); $n++){

			$cat_list[$category_list['children'][0]['children'][$n]['category_id']]= $category_list['children'][0]['children'][$n]['name'];
		}

	$handle=fopen(FILE_PATH,'a') or die("can't open file");

	if($plist=$client->call($session,'catalog_product.list'))

	//遍历所有产品

	for($i=0;$i<count($plist);$i++){
		$pid=$plist[$i]["product_id"]; //产品id

		$result=$client->call($session,'catalog_product.info',$pid);

		$sku=$plist[$i]['sku']; //产品sku

		$inventory=$client->call($session,'product_stock.list',$sku);

		$qty=$inventory[0]['qty']; //库存数量

		$title=$plist[$i]['name']; //产品名(标题)

		$product_desc=$result['description'];

		$url=DOMAIN.$result['url_key'].'.html?cid=GOOGS'; //拼接出产品的url,这里假设您启用了rewrite,后面添加cid以方便追踪

		$cat_id="";

		for($j=0;$j<count($result['category_ids']);$j++){
			$cat_id.=$result['category_ids'][$j].",";
		}

		$cat_id=explode(",",rtrim($cat_id,","));

		$price=round($result['price'],2)." USD"; //产品价格

		if(!empty($result['special_price']))

		$sp_price=round($result['special_price'],2)." USD"; //打折价格

		else

		$sp_price='';

		//打折有效期,默认当天到第二天

		if(!empty($sp_price)){

			$eff_date= date("Y-m-d\TH:i-0800/");

			$eff_date.=date("Y-m-");

			$temp=date("d")+1;

			$eff_date.=$temp.date("\TH:i-0800");

		}else{

			$eff_date="";

		}

		$gcategory="Apparel & Accessories  > Clothing";  //Google产品分类,可遵照http://www.google.com/basepages/producttype/taxonomy.en-US.txt

		$ptype="Apparel & Accessories > Clothing > ". $cat_list[$cat_id[0]];  //此处可自定义,这里取产品所属的一个目录

		$image=$client->call($session,'catalog_product_attribute_media.list',$pid); 

		$image_url=$image[0]['url']; //image地址
		$add_img="";
		if(count($image)>1){
			for($k=1; $k<count($image);$k++){
				$add_img .=$image[$k]['url'].",";
			}

		}
		$add_img = rtrim($add_img,',');

		$condition="new"; //可根据具体要求修改,这里假设没有二手产品

		//是否oos

		if($qty>0){

			$availability='in stock';

		}else{

			$availability='out of stock';

		}

		$shipping="US:::5 USD"; //这里根据具体运费标准来设置,此处假设美国国内运费为$5

		$tax="US:CA:8.25:y"; //这里根据具体收税标准来设置,这里取默认值加州收8.25点的税

		$gender="Unisex"; //根据具体情况进行修改

		$color="multi-color"; //由于Alan的网站上没有填写颜色,这里没有通过api调取

		$age_group="adult"; //根据实际情况而定

		$gtin="";

		$custom_label_0="";

		//判断是否有库存

		if($availability='in stock'){

			$add=$sku."\t".$title."\t".$product_desc."\t".$gcategory."\t".$ptype."\t".$url."\t".$url."\t".$image_url."\t".$add_img."\t".$condition."\t".$availability."\t".$price."\t".$sp_price."\t".$eff_date."\t".BRAND."\t".$gtin."\t".$sku."\t".$custom_label_0."\t".$shipping."\t".$tax."\t".$gender."\t".$color."\t".$age_group."\n";

			if(fwrite($handle,$add)===FALSE){

				echo"Can't write to ".FILE_PATH;

			}else{

				echo "-";

			}

		}

	}

	fclose($handle);

	$client->endSession($session); //关闭session

?>
退出移动版