Magento生成Google Shopping Feed PHP代码

Magento Alan 11年前 (2014-06-06) 6376次浏览 0个评论 扫描二维码

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’字段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
<?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
 
?>
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址