Subversion Repositories SmartDukaan

Rev

Rev 3505 | Rev 3992 | 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]
65
    return brand.strip().lower() + '|' + model_number_str.strip().lower() + '|' + color.strip().lower()
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 = {}
74
    for rownum in range(1, num_rows):
75
        itemNumber, unused_description, unused_pc, unused_pg, unused_tech, brand, model_number, color = sheet.row_values(rownum)[0:8]
76
        key = get_key(brand, model_number, color) 
77
        itemNumberMap[key] = str(itemNumber)
78
        if len(str(itemNumber)) == 13:
79
            itemNumberTypeMap[key] = 'EAN'
80
        else:
81
            itemNumberTypeMap[key] = 'UPC'
82
    print itemNumberMap
83
    return itemNumberMap, itemNumberTypeMap
84
 
3584 chandransh 85
 
86
def normalize_form_factor(formFactor):
87
    if formFactor == 'Candybar':
88
        formFactor = 'candy-bar'
89
    elif formFactor == 'Slider':
90
        formFactor = 'slide'
91
    elif formFactor == 'Flip':
92
        formFactor = 'flip'
93
    elif formFactor == 'Clamshell':
94
        formFactor = 'flip'
95
    else:
96
        formFactor = ''
97
    return formFactor
98
 
99
 
100
def normalize_operating_system(opsys):
101
    if 'Android' in opsys:
102
        opsys = 'Android'
103
    elif 'Symbian' in opsys:
104
        opsys = 'Symbian'
105
    elif 'BlackBerry' in opsys:
106
        opsys = 'Blackberry'
107
    elif 'Windows' in opsys:
108
        opsys = 'Windows Phone'
109
    elif 'bada' in opsys or 'Bada' in opsys:
110
        opsys = 'Bada'
111
    elif 'iOS' in opsys:
112
        opsys = 'iOS'
113
    else:
114
        opsys = ''
115
    return opsys
116
 
117
 
118
def normalize_battery_type(batteryType):
119
    if 'Li-Ion' in batteryType or 'Li-ion' in batteryType or 'Lithium-ion' in batteryType:
120
        batteryType = 'lithium_ion'
121
    elif 'Li-Po' in batteryType:
122
        batteryType = 'lithium_metal'
123
    else:
124
        batteryType = ''
125
    return batteryType
126
 
127
 
128
def get_cellular_technology(multipleSIM, network3G):
129
    cellularTechnology = ''
130
    if multipleSIM == 'Dual-SIM':
131
        cellularTechnology = 'Dual SIM'
132
    if not cellularTechnology:
133
        if network3G != '':
134
            cellularTechnology = '3G'
135
        else:
136
            cellularTechnology = 'GSM'
137
    return cellularTechnology
138
 
139
 
140
def normalize_screen_type(screenType):
141
    if 'LCD' in screenType or 'Nova' in screenType or 'Retina' in screenType:
142
        screenType = 'LCD'
143
    elif 'LED' in screenType:
144
        screenType = 'LED'
145
    else:
146
        screenType = ''
147
    return screenType
148
 
3139 chandransh 149
def main():
3502 chandransh 150
    itemNumberMap, itemNumberTypeMap = load_item_numbers() 
3139 chandransh 151
    catalog_client = CatalogClient().get_client()
152
    item_details = []
3486 chandransh 153
    filename = "/home/ashish/featurevalues.xls"
154
    workbook = xlrd.open_workbook(filename)
155
    sheet = workbook.sheet_by_index(0)
156
    num_rows = sheet.nrows
3140 chandransh 157
 
3486 chandransh 158
    writer = csv.writer(open("junglee.csv", "wb"), delimiter='\t', quoting=csv.QUOTE_MINIMAL)
159
    writer.writerow(["SKU","Title","Link","Price","Delivery Time","Recommended Browse Node","Standard Product ID",\
160
                 "Product ID Type","Category","Description","Shipping Cost","Image","List Price","Availability",\
161
                 "Brand","Manufacturer","Mfr part number","Model Number","Computer CPU speed","Hard disk size",\
162
                 "Included RAM size","Optical zoom","Digital zoom","Megapixels","Display size","Screen Resolution",\
163
                 "Display Technology","Flash drive Size","Memory Card Type","Camera type","Viewfinder type","Flash type",\
164
                 "Cellular Technology","Phone Operating System","Talk Time","Standby Time","User Input","Device Type",\
165
                 "Form Factor","Colour Name","Colour Map","Item package quantity","Age","Warranty","Assembly required",\
166
                 "Battery Type","Batteries Included","Batteries Required","Power Source","Power Adapter Included",\
167
                 "Shipping Weight","Weight","Length","Height","Width","Keywords1","Keywords2", "Keywords3","Keywords4",\
168
                 "Keywords5","Bullet point1","Bullet point2","Bullet point3","Bullet point4","Bullet point5",\
169
                 "Other image-url1","Other image-url2","Other image-url3","Other image-url4","Other image-url5",
170
                 "Offer note","Is Gift Wrap Available","Registered Parameter","Update Delete"])
171
 
172
    for rownum in range(2, num_rows):
173
        unused_categoryName, unused_entityName, entityID, unused_accessories, unused_softwareApplications, unused_pageTitle,\
174
        unused_metaDescription, metaKeywords, snippets, shortSnippet, tagline, warranty,\
175
        unused_skinSize, screenSize, unused_screenLeftUpperCornerDimension, unused_modelNameSynonyms, unused_modelNumberSynonyms,\
176
        weight, size, formFactor, color, screenType, screenSize, screenResolution, numberOfColors, keyboardType,\
177
        navigation, touchscreenType, sideControls, multimediaKeys, multipleSIM, voip, network2G,\
178
        network3G, gprs, edge, g3, wifi, bluetooth, usb, musicFormats, earphone, speakerPhone,\
179
        fmRadio, internetRadio, ringtoneTypes, fileFormats, streaming, liveTV, hdVideoPlayback,\
180
        resolution, flash, imageFormats, numberOfCameras, secondaryCamera, additionalCameraFeatures,\
181
        builtIn, ram, expansionType, expansionCapacity, batteryType, powerAdaptor, musicPlayback,\
182
        videoPlayback, tvPlayback, talktime2G, talktime3G, standy2G, standby3G, types, markupLanguages,\
183
        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,\
184
        unused_instantMessaging, unused_email = sheet.row_values(rownum)[0:85]
185
 
3502 chandransh 186
        items = catalog_client.getItemsByCatalogId(entityID)
187
        active_items = filter(is_active, items)
188
        if not active_items:
189
            continue
190
 
3486 chandransh 191
        if screenSize:
192
            screenSize = screenSize.split()[0]
193
 
194
        if screenResolution:
195
            screenResolution = screenResolution.rsplit(' ', 1)[0]
196
 
3584 chandransh 197
        screenType = normalize_screen_type(screenType)
3486 chandransh 198
 
3584 chandransh 199
        cellularTechnology = get_cellular_technology(multipleSIM, network3G)
3486 chandransh 200
 
3584 chandransh 201
        opsys = normalize_operating_system(opsys)
3486 chandransh 202
 
203
        userInput = "keypad"
204
        if touchscreenType != "":
205
            userInput = "touchscreen"
206
 
3584 chandransh 207
        formFactor = normalize_form_factor(formFactor)
3486 chandransh 208
 
209
        if warranty:
210
            warranty = warranty + " manufacturer warranty"
211
 
3584 chandransh 212
        batteryType = normalize_battery_type(batteryType)
3486 chandransh 213
 
3505 chandransh 214
        weight_parts = weight.split()
215
        if len(weight_parts) > 1:
216
            weight = weight_parts[0]
217
            try:
218
                float(weight)
219
            except:
220
                weight = ''
221
 
3486 chandransh 222
        if size == "Not available" or size == '':
223
            length, width, height = ["", "", ""]
224
        else:
225
            list = size.split()
226
            length, width, height = [list[0], list[2], list[4]] 
227
 
228
        keywords = metaKeywords.split(",")
229
        if len(keywords) < 5:
230
            length = len(keywords)
231
            while length < 5:
232
                keywords.append('')
3502 chandransh 233
                length = length + 1       
3486 chandransh 234
 
3502 chandransh 235
        for item in active_items:
236
            stdProductId = ''
237
            stdProductIdType = ''
238
            if not item.color:
239
                item.color = ''
240
            key = get_key(item.brand, item.modelNumber, item.color)
241
            if itemNumberMap.has_key(key):
242
                stdProductId = itemNumberMap[key]
243
                stdProductIdType = itemNumberTypeMap[key]
244
            item_details.append(
245
                        [item.id, get_title(item), get_url(item), item.sellingPrice, "1", "803546031", stdProductId,\
246
                         stdProductIdType, "Wireless", tagline, '0', get_image_url(item), item.mrp, "TRUE",\
247
                         item.brand, "", "", item.modelNumber, "", builtIn,\
248
                         ram, "", "", "", screenSize, screenResolution,\
249
                         screenType, "", "", "", "", "",\
3505 chandransh 250
                         cellularTechnology, opsys,\
251
                         #talktime2G, standy2G, - use these values after converting them to minutes and hours respectively
252
                         '', '', userInput, "",\
3502 chandransh 253
                         formFactor, item.color, "", "1", "", warranty, "FALSE",\
254
                         batteryType, "TRUE","TRUE", "battery-powered", "TRUE",\
3584 chandransh 255
                         "", weight, length, width, height, keywords[0].strip(), keywords[1].strip(), keywords[2].strip(), keywords[3].strip(),\
256
                         keywords[4].strip(), "", "","","","",\
3502 chandransh 257
                         "","","","","",\
258
                         "","","",""]);
3486 chandransh 259
 
3140 chandransh 260
    for item_detail in item_details:
261
        writer.writerow(item_detail)
3139 chandransh 262
 
263
if __name__ == '__main__':
264
    main()