Subversion Repositories SmartDukaan

Rev

Rev 3992 | Rev 4090 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3139 chandransh 1
#!/usr/bin/python
2
 
3
'''
4
Created on 01-Sep-2011
5
 
6
@author: ashish
7
'''
8
import sys
3140 chandransh 9
import csv
3486 chandransh 10
import xlrd
3139 chandransh 11
 
12
if __name__ == '__main__' and __package__ is None:
13
    import os
14
    sys.path.insert(0, os.getcwd())
15
 
16
from shop2020.clients.CatalogClient import CatalogClient
17
 
18
def get_title(item):
19
    title = item.brand
20
    if item.modelName:
21
        title = title + ' ' + item.modelName
22
    if item.modelNumber:
23
        title = title + ' ' + item.modelNumber
3584 chandransh 24
    if item.color:
25
        title = title + " | " + item.color
3139 chandransh 26
    return title
27
 
28
def get_hyphenated_name(item):
29
    productUrl = item.brand
30
    if item.modelName:
31
        productUrl = productUrl + "-" + item.modelName
32
    if item.modelNumber:
33
        productUrl = productUrl + '-' + item.modelNumber
34
    productUrl = productUrl.replace("/", "-")
35
    productUrl = productUrl.replace(" ", "-")
36
    productUrl = productUrl.replace("--", "-")
37
    productUrl = productUrl.lower()
38
    return productUrl
39
 
40
def get_url(item):
41
    url = "http://www.saholic.com/mobile-phones/"
42
    productUrl = get_hyphenated_name(item)
43
    productUrl = productUrl + "-" + str(item.catalogItemId)
44
    url = url + productUrl;
45
    url = url.replace("--", "-");
46
    return url;
47
 
48
def get_image_url(item):
49
    url = "http://static0.saholic.com/images/"
50
    url = url + str(item.catalogItemId) + "/"
51
    url = url + get_hyphenated_name(item) + "-default-0.jpg"
52
    return url
53
 
3486 chandransh 54
def is_active(item):
55
    return item.itemStatus in [2, 3, 6]
56
 
3502 chandransh 57
def get_key(brand, model_number, color):
58
    model_number_str = ''
59
    try:
60
        model_number_str = str(int(model_number))
61
    except:
62
        model_number_str = str(model_number)
63
    if '(' in model_number_str:
64
        model_number_str = model_number_str.split('(')[0]
3992 chandransh 65
    return str('handsets|' + brand.strip().lower() + '|' + model_number_str.strip().lower() + '|' + color.strip().lower())
3502 chandransh 66
 
67
def load_item_numbers():
68
    filename = "/home/ashish/itemNumbers.xls"
69
    workbook = xlrd.open_workbook(filename)
70
    sheet = workbook.sheet_by_index(0)
71
    num_rows = sheet.nrows
72
    itemNumberMap = {}
73
    itemNumberTypeMap = {}
3992 chandransh 74
    for rownum in range(2, num_rows):
3502 chandransh 75
        itemNumber, unused_description, unused_pc, unused_pg, unused_tech, brand, model_number, color = sheet.row_values(rownum)[0:8]
3992 chandransh 76
        key = get_key(brand, model_number, color)
77
        itemNumberStr = str(itemNumber)
78
        if not itemNumberStr.isdigit():
79
            continue
80
        itemNumberMap[key] = itemNumberStr 
81
        if len(itemNumberStr) == 13:
3502 chandransh 82
            itemNumberTypeMap[key] = 'EAN'
3992 chandransh 83
        elif len(itemNumberStr) == 12:
3502 chandransh 84
            itemNumberTypeMap[key] = 'UPC'
85
    print itemNumberMap
86
    return itemNumberMap, itemNumberTypeMap
87
 
3584 chandransh 88
 
89
def normalize_form_factor(formFactor):
90
    if formFactor == 'Candybar':
91
        formFactor = 'candy-bar'
92
    elif formFactor == 'Slider':
93
        formFactor = 'slide'
94
    elif formFactor == 'Flip':
95
        formFactor = 'flip'
96
    elif formFactor == 'Clamshell':
97
        formFactor = 'flip'
98
    else:
99
        formFactor = ''
100
    return formFactor
101
 
102
 
103
def normalize_operating_system(opsys):
104
    if 'Android' in opsys:
105
        opsys = 'Android'
106
    elif 'Symbian' in opsys:
107
        opsys = 'Symbian'
108
    elif 'BlackBerry' in opsys:
109
        opsys = 'Blackberry'
110
    elif 'Windows' in opsys:
111
        opsys = 'Windows Phone'
112
    elif 'bada' in opsys or 'Bada' in opsys:
113
        opsys = 'Bada'
114
    elif 'iOS' in opsys:
115
        opsys = 'iOS'
116
    else:
117
        opsys = ''
118
    return opsys
119
 
120
 
121
def normalize_battery_type(batteryType):
122
    if 'Li-Ion' in batteryType or 'Li-ion' in batteryType or 'Lithium-ion' in batteryType:
123
        batteryType = 'lithium_ion'
124
    elif 'Li-Po' in batteryType:
125
        batteryType = 'lithium_metal'
126
    else:
127
        batteryType = ''
128
    return batteryType
129
 
130
 
131
def get_cellular_technology(multipleSIM, network3G):
132
    cellularTechnology = ''
133
    if multipleSIM == 'Dual-SIM':
134
        cellularTechnology = 'Dual SIM'
135
    if not cellularTechnology:
136
        if network3G != '':
137
            cellularTechnology = '3G'
138
        else:
139
            cellularTechnology = 'GSM'
140
    return cellularTechnology
141
 
142
 
143
def normalize_screen_type(screenType):
144
    if 'LCD' in screenType or 'Nova' in screenType or 'Retina' in screenType:
145
        screenType = 'LCD'
146
    elif 'LED' in screenType:
147
        screenType = 'LED'
148
    else:
149
        screenType = ''
150
    return screenType
151
 
3992 chandransh 152
def get_hotspot_mapping(mappings):
153
    for mapping in mappings:
154
        if mapping.vendorId == 1:
155
            return mapping.itemKey
156
    return None
157
 
3139 chandransh 158
def main():
3502 chandransh 159
    itemNumberMap, itemNumberTypeMap = load_item_numbers() 
3139 chandransh 160
    catalog_client = CatalogClient().get_client()
161
    item_details = []
4003 chandransh 162
    filename = "/home/ashish/featurevalues3.xls"
3486 chandransh 163
    workbook = xlrd.open_workbook(filename)
164
    sheet = workbook.sheet_by_index(0)
165
    num_rows = sheet.nrows
3140 chandransh 166
 
3486 chandransh 167
    writer = csv.writer(open("junglee.csv", "wb"), delimiter='\t', quoting=csv.QUOTE_MINIMAL)
168
    writer.writerow(["SKU","Title","Link","Price","Delivery Time","Recommended Browse Node","Standard Product ID",\
169
                 "Product ID Type","Category","Description","Shipping Cost","Image","List Price","Availability",\
170
                 "Brand","Manufacturer","Mfr part number","Model Number","Computer CPU speed","Hard disk size",\
171
                 "Included RAM size","Optical zoom","Digital zoom","Megapixels","Display size","Screen Resolution",\
172
                 "Display Technology","Flash drive Size","Memory Card Type","Camera type","Viewfinder type","Flash type",\
173
                 "Cellular Technology","Phone Operating System","Talk Time","Standby Time","User Input","Device Type",\
174
                 "Form Factor","Colour Name","Colour Map","Item package quantity","Age","Warranty","Assembly required",\
175
                 "Battery Type","Batteries Included","Batteries Required","Power Source","Power Adapter Included",\
176
                 "Shipping Weight","Weight","Length","Height","Width","Keywords1","Keywords2", "Keywords3","Keywords4",\
177
                 "Keywords5","Bullet point1","Bullet point2","Bullet point3","Bullet point4","Bullet point5",\
178
                 "Other image-url1","Other image-url2","Other image-url3","Other image-url4","Other image-url5",
179
                 "Offer note","Is Gift Wrap Available","Registered Parameter","Update Delete"])
180
 
3992 chandransh 181
    for rownum in range(2, num_rows): #2 is used as the starting index because first row is a test product with 12 years of warranty.
4003 chandransh 182
        unused_categoryName, unused_entityName, entityID, image_url, unused_accessories, unused_softwareApplications, unused_pageTitle,\
3992 chandransh 183
        unused_metaDescription, metaKeywords, snippets, shortSnippet, tagline,\
3486 chandransh 184
        unused_skinSize, screenSize, unused_screenLeftUpperCornerDimension, unused_modelNameSynonyms, unused_modelNumberSynonyms,\
3992 chandransh 185
        warranty, unused_warranty_type, unused_warranty_coverage, \
3486 chandransh 186
        weight, size, formFactor, color, screenType, screenSize, screenResolution, numberOfColors, keyboardType,\
187
        navigation, touchscreenType, sideControls, multimediaKeys, multipleSIM, voip, network2G,\
188
        network3G, gprs, edge, g3, wifi, bluetooth, usb, musicFormats, earphone, speakerPhone,\
189
        fmRadio, internetRadio, ringtoneTypes, fileFormats, streaming, liveTV, hdVideoPlayback,\
190
        resolution, flash, imageFormats, numberOfCameras, secondaryCamera, additionalCameraFeatures,\
191
        builtIn, ram, expansionType, expansionCapacity, batteryType, powerAdaptor, musicPlayback,\
192
        videoPlayback, tvPlayback, talktime2G, talktime3G, standy2G, standby3G, types, markupLanguages,\
193
        unused_http_protocols, unused_browser, unused_mail_protocols, opsys, unused_java, unused_flashPlayer, unused_drm, unused_securityFeatures, unused_gpsType, unused_mms, unused_sms, unused_ems,\
4003 chandransh 194
        unused_instantMessaging, unused_email = sheet.row_values(rownum)[0:88]
3486 chandransh 195
 
3502 chandransh 196
        items = catalog_client.getItemsByCatalogId(entityID)
197
        active_items = filter(is_active, items)
198
        if not active_items:
199
            continue
200
 
3486 chandransh 201
        if screenSize:
202
            screenSize = screenSize.split()[0]
203
 
204
        if screenResolution:
205
            screenResolution = screenResolution.rsplit(' ', 1)[0]
206
 
3584 chandransh 207
        screenType = normalize_screen_type(screenType)
3486 chandransh 208
 
3584 chandransh 209
        cellularTechnology = get_cellular_technology(multipleSIM, network3G)
3486 chandransh 210
 
3584 chandransh 211
        opsys = normalize_operating_system(opsys)
3486 chandransh 212
 
213
        userInput = "keypad"
214
        if touchscreenType != "":
215
            userInput = "touchscreen"
216
 
3584 chandransh 217
        formFactor = normalize_form_factor(formFactor)
3486 chandransh 218
 
219
        if warranty:
220
            warranty = warranty + " manufacturer warranty"
221
 
3584 chandransh 222
        batteryType = normalize_battery_type(batteryType)
3486 chandransh 223
 
3505 chandransh 224
        weight_parts = weight.split()
225
        if len(weight_parts) > 1:
226
            weight = weight_parts[0]
227
            try:
228
                float(weight)
229
            except:
230
                weight = ''
231
 
3486 chandransh 232
        if size == "Not available" or size == '':
233
            length, width, height = ["", "", ""]
234
        else:
235
            list = size.split()
236
            length, width, height = [list[0], list[2], list[4]] 
237
 
3992 chandransh 238
        keywords = []
239
        for keyword in metaKeywords.split(","):
240
            keywords.append(keyword.strip())
3486 chandransh 241
        if len(keywords) < 5:
242
            length = len(keywords)
243
            while length < 5:
244
                keywords.append('')
3502 chandransh 245
                length = length + 1       
3486 chandransh 246
 
3992 chandransh 247
        for keyword in keywords:
248
            if len(keyword) > 50:
249
                print keyword
250
 
3502 chandransh 251
        for item in active_items:
252
            stdProductId = ''
253
            stdProductIdType = ''
254
            if not item.color:
255
                item.color = ''
3992 chandransh 256
 
257
            mappings = catalog_client.getVendorItemMappings(item.id)
258
            key = get_hotspot_mapping(mappings)
259
            if key and itemNumberTypeMap.has_key(key):
3502 chandransh 260
                stdProductId = itemNumberMap[key]
261
                stdProductIdType = itemNumberTypeMap[key]
262
            item_details.append(
263
                        [item.id, get_title(item), get_url(item), item.sellingPrice, "1", "803546031", stdProductId,\
4003 chandransh 264
                         stdProductIdType, "Wireless", tagline, '0', 'http://' + str(image_url), item.mrp, "TRUE",\
3502 chandransh 265
                         item.brand, "", "", item.modelNumber, "", builtIn,\
266
                         ram, "", "", "", screenSize, screenResolution,\
267
                         screenType, "", "", "", "", "",\
3505 chandransh 268
                         cellularTechnology, opsys,\
269
                         #talktime2G, standy2G, - use these values after converting them to minutes and hours respectively
270
                         '', '', userInput, "",\
3502 chandransh 271
                         formFactor, item.color, "", "1", "", warranty, "FALSE",\
272
                         batteryType, "TRUE","TRUE", "battery-powered", "TRUE",\
3584 chandransh 273
                         "", weight, length, width, height, keywords[0].strip(), keywords[1].strip(), keywords[2].strip(), keywords[3].strip(),\
274
                         keywords[4].strip(), "", "","","","",\
3502 chandransh 275
                         "","","","","",\
276
                         "","","",""]);
3486 chandransh 277
 
3140 chandransh 278
    for item_detail in item_details:
279
        writer.writerow(item_detail)
3139 chandransh 280
 
281
if __name__ == '__main__':
282
    main()