Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
13829 kshitij.so 1
import urllib2
2
import simplejson as json
3
import pymongo
15951 kshitij.so 4
from dtr.utils.utils import to_java_date, getNlcPoints, transformUrl
13918 kshitij.so 5
from datetime import datetime, timedelta
13829 kshitij.so 6
from operator import itemgetter
7
from dtr.utils.AmazonPriceOnlyScraper import AmazonScraper
14309 kshitij.so 8
from dtr.utils import AmazonDealScraper
16410 kshitij.so 9
from dtr.utils import FlipkartScraper,NewFlipkartScraper, ShopCluesScraper, \
10
PaytmOfferScraper, PaytmScraper
14324 kshitij.so 11
from dtr.storage.MemCache import MemCache
14334 kshitij.so 12
from functools import partial
13
import threading
14760 kshitij.so 14
from dtr.utils.utils import getCashBack
14794 kshitij.so 15
import traceback
15174 kshitij.so 16
from shop2020.config.client.ConfigClient import ConfigClient
16065 kshitij.so 17
import chardet
16415 kshitij.so 18
from dtr.CouponMaster import addToPaytmMaster
13829 kshitij.so 19
 
15174 kshitij.so 20
config_client = ConfigClient()
21
host_memCache = config_client.get_property('mem_cache_host_dtr')
22
host = config_client.get_property('mongo_dtr_host')
14324 kshitij.so 23
 
15174 kshitij.so 24
mc = MemCache(host_memCache)
25
 
26
 
15902 kshitij.so 27
con  = None
16410 kshitij.so 28
SOURCE_MAP = {'AMAZON':1,'FLIPKART':2,'SNAPDEAL':3,'SAHOLIC':4, 'SHOPCLUES.COM':5,'PAYTM.COM':6}
13829 kshitij.so 29
 
30
headers = { 
31
           'User-agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
32
            'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',      
33
            'Accept-Language' : 'en-US,en;q=0.8',                     
34
            'Accept-Charset' : 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
35
        }
36
 
16428 kshitij.so 37
ignoreItems = [24291, 24102, 24101]
15608 kshitij.so 38
 
15174 kshitij.so 39
def get_mongo_connection(port=27017):
13829 kshitij.so 40
    global con
41
    if con is None:
42
        print "Establishing connection %s host and port %d" %(host,port)
43
        try:
44
            con = pymongo.MongoClient(host, port)
45
        except Exception, e:
46
            print e
47
            return None
48
    return con
49
 
14828 kshitij.so 50
def returnLatestPrice(data, source_id, ignoreLastUpdated = True):
13918 kshitij.so 51
    now = datetime.now()
13829 kshitij.so 52
    if source_id == 1:
53
        try:
13918 kshitij.so 54
            if data['identifier'] is None or len(data['identifier'].strip())==0:
13829 kshitij.so 55
                return {}
13918 kshitij.so 56
 
15615 kshitij.so 57
            if data['_id'] in ignoreItems:
58
                print "Ignored items returning for %d"%(data['_id'])
16117 kshitij.so 59
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':1,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
15615 kshitij.so 60
 
61
 
14577 kshitij.so 62
            if data['dealFlag'] ==1 and data['dealType'] ==1:
63
                data['marketPlaceUrl'] = "http://www.amazon.in/dp/%s"%(data['identifier'].strip())
64
 
13918 kshitij.so 65
            try:
14828 kshitij.so 66
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13918 kshitij.so 67
                    print "sku id is already updated",data['_id'] 
16117 kshitij.so 68
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':1,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
13918 kshitij.so 69
            except:
70
                pass
71
 
72
 
15956 kshitij.so 73
            url = "http://www.amazon.in/gp/aw/ol/%s?o=New&op=1"%(data['identifier'])
13829 kshitij.so 74
            lowestPrice = 0.0
14309 kshitij.so 75
            try:
76
                if data['dealFlag'] ==1 and data['dealType'] ==1:
77
                    print "Inside deal"
78
                    deal_url = "http://www.amazon.in/dp/%s"%(data['identifier'].strip())
79
                    print deal_url
15213 kshitij.so 80
                    dealScraperAmazon = AmazonDealScraper.AmazonScraper(True)
14309 kshitij.so 81
                    lowestPrice = dealScraperAmazon.read(deal_url)
82
                    print lowestPrice
83
                    if lowestPrice == 0:
84
                        raise
85
                else:    
15213 kshitij.so 86
                    scraperAmazon = AmazonScraper(True)
14309 kshitij.so 87
                    lowestPrice = scraperAmazon.read(url)
88
            except Exception as e:
89
                print e
15213 kshitij.so 90
                scraperAmazon = AmazonScraper(True)
14309 kshitij.so 91
                lowestPrice = scraperAmazon.read(url)
13929 kshitij.so 92
            print "LowestPrice ",lowestPrice
13829 kshitij.so 93
            inStock = 0
94
            if lowestPrice > 0:
95
                inStock = 1
96
            if lowestPrice > 0:
13971 kshitij.so 97
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':lowestPrice,'updatedOn':to_java_date(now),'priceUpdatedOn':to_java_date(now),'in_stock':inStock}}, multi=True)
16024 kshitij.so 98
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestPrice , 'in_stock':inStock,'dealType':data['dealType'],'codAvailable':data['codAvailable']}}, multi=True)
13829 kshitij.so 99
            else:
13929 kshitij.so 100
                lowestPrice = data['available_price']
13977 kshitij.so 101
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(now),'in_stock':0,'priceUpdatedOn':to_java_date(now)}}, multi=True)
16024 kshitij.so 102
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0,'dealType':data['dealType'],'codAvailable':data['codAvailable']}}, multi=True)
13918 kshitij.so 103
 
16117 kshitij.so 104
            return {'_id':data['_id'],'available_price':lowestPrice,'in_stock':inStock,'source_id':1,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'], 'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
14834 kshitij.so 105
        except Exception as e:
106
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
107
            print e
16117 kshitij.so 108
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':1,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'], 'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
13829 kshitij.so 109
 
14203 kshitij.so 110
    elif source_id ==4:
14207 kshitij.so 111
 
14203 kshitij.so 112
        try:
14212 kshitij.so 113
            if data['identifier'] is None or len(data['identifier'].strip())==0:
114
                return {}
115
 
116
            try:
14828 kshitij.so 117
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
14212 kshitij.so 118
                    print "sku id is already updated",data['_id'] 
16117 kshitij.so 119
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':4,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'], 'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
14212 kshitij.so 120
            except:
121
                pass
122
 
14840 kshitij.so 123
            url = "http://50.116.3.101:8080/mobileapi/dtr-pricing?id=%s"%(data['identifier'])
14212 kshitij.so 124
            lowestPrice = 0.0
125
            instock = 0
126
            req = urllib2.Request(url,headers=headers)
127
            response = urllib2.urlopen(req)
128
            json_input = response.read()
129
            response.close()
130
            priceInfo = json.loads(json_input)
131
            lowestPrice = priceInfo['response']['sellingPrice']
132
            if lowestPrice > 0:
133
                instock = 1
134
            if instock  == 1:
135
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':lowestPrice,'updatedOn':to_java_date(now),'priceUpdatedOn':to_java_date(now),'in_stock':instock}}, multi=True)
16024 kshitij.so 136
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestPrice , 'in_stock':instock,'codAvailable':data['codAvailable']}}, multi=True)
14212 kshitij.so 137
            else:
138
                lowestPrice = data['available_price']
139
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(now),'in_stock':instock,'priceUpdatedOn':to_java_date(now)}}, multi=True)
16024 kshitij.so 140
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':instock,'codAvailable':data['codAvailable']}}, multi=True)
14212 kshitij.so 141
 
16205 kshitij.so 142
            return {'_id':data['_id'],'available_price':lowestPrice,'in_stock':instock,'source_id':4,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'],'tagline': data['tagline'], 'offer': data['offer']}
14834 kshitij.so 143
 
144
        except Exception as e:
145
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
146
            print e
16205 kshitij.so 147
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':4,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'],'tagline': data['tagline'], 'offer': data['offer']}
14203 kshitij.so 148
 
14207 kshitij.so 149
 
13829 kshitij.so 150
    elif source_id ==3:
151
        try:
13918 kshitij.so 152
            if data['identifier'] is None or len(data['identifier'].strip())==0:
13829 kshitij.so 153
                return {}
13918 kshitij.so 154
 
16206 kshitij.so 155
            if data['_id'] in ignoreItems:
156
                print "Ignored items returning for %d"%(data['_id'])
16265 kshitij.so 157
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':3,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
16206 kshitij.so 158
 
13918 kshitij.so 159
            try:
14828 kshitij.so 160
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13920 kshitij.so 161
                    print "sku id is already updated",data['_id']
16205 kshitij.so 162
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':3,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'],'tagline': data['tagline'], 'offer': data['offer']}
13919 kshitij.so 163
 
164
            except Exception as e:
13920 kshitij.so 165
                print "Exception snapdeal"
13919 kshitij.so 166
                print e
13918 kshitij.so 167
 
15819 kshitij.so 168
            url="http://www.snapdeal.com/acors/json/v2/gvbps?supc=%s&catUrl=&bn=&catId=175&start=0&count=10000"%(data['identifier'])
13829 kshitij.so 169
            req = urllib2.Request(url,headers=headers)
170
            response = urllib2.urlopen(req)
16065 kshitij.so 171
            snapdeal_data = response.read()
172
            encoding =  chardet.detect(snapdeal_data)
173
            try:
174
                snapdeal_data = snapdeal_data.decode(encoding.get('encoding'))
175
            except:
176
                snapdeal_data = snapdeal_data.decode(encoding.get('latin-1'))
177
            vendorInfo = json.loads(snapdeal_data)
14188 kshitij.so 178
            response.close()
13829 kshitij.so 179
            lowestOfferPrice = 0
180
            inStock = 0
15253 kshitij.so 181
            buyBoxPrice = 0
182
            isBuyBox = 1
15819 kshitij.so 183
            try:
184
                buyBoxStock = vendorInfo['primaryVendor']['buyableInventory']
185
                if buyBoxStock >0:
186
                    buyBoxPrice = vendorInfo['primaryVendor']['sellingPrice']
187
            except:
188
                pass
16065 kshitij.so 189
            print "buy box stock ",buyBoxStock
190
            print "bux box price ",buyBoxPrice
15819 kshitij.so 191
            sortedVendorsData = sorted(vendorInfo['vendors'], key=itemgetter('sellingPrice'))
15253 kshitij.so 192
            for sortedVendorData in sortedVendorsData:
193
                lowestOfferPrice = float(sortedVendorData['sellingPrice'])
194
                try:
195
                    stock = sortedVendorData['buyableInventory']
196
                except:
197
                    stock = 0
13829 kshitij.so 198
                if stock > 0 and lowestOfferPrice > 0:
199
                    inStock = 1
200
                    break
201
 
202
            print lowestOfferPrice
203
            print inStock
204
            print "*************"
15253 kshitij.so 205
 
206
            if buyBoxPrice != lowestOfferPrice:
207
                isBuyBox = 0
208
 
13829 kshitij.so 209
            if inStock  == 1:
15253 kshitij.so 210
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':lowestOfferPrice,'updatedOn':to_java_date(now),'priceUpdatedOn':to_java_date(now),'in_stock':inStock,'buyBoxFlag':isBuyBox}}, multi=True)
16024 kshitij.so 211
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestOfferPrice , 'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13829 kshitij.so 212
            else:
13929 kshitij.so 213
                lowestOfferPrice = data['available_price']
15253 kshitij.so 214
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(now),'in_stock':inStock,'priceUpdatedOn':to_java_date(now),'buyBoxFlag':isBuyBox}}, multi=True)
16024 kshitij.so 215
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13918 kshitij.so 216
 
16117 kshitij.so 217
            return {'_id':data['_id'],'available_price':lowestOfferPrice,'in_stock':inStock,'source_id':3,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
14834 kshitij.so 218
        except Exception as e:
15266 kshitij.so 219
            print traceback.print_exc()
14834 kshitij.so 220
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
221
            print e
16117 kshitij.so 222
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':3,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
13829 kshitij.so 223
 
224
    elif source_id == 2:
225
        try:
13918 kshitij.so 226
            if data['identifier'] is None or len(data['identifier'].strip())==0:
13829 kshitij.so 227
                return {}
13918 kshitij.so 228
 
15609 kshitij.so 229
            if data['_id'] in ignoreItems:
15608 kshitij.so 230
                print "Ignored items returning for %d"%(data['_id'])
16117 kshitij.so 231
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':2,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
15608 kshitij.so 232
 
13918 kshitij.so 233
            try:
14828 kshitij.so 234
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13918 kshitij.so 235
                    print "sku id is already updated",data['_id']
16117 kshitij.so 236
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':2,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']} 
13918 kshitij.so 237
            except:
238
                pass
239
 
240
            lowestSp = 0
241
            inStock = 0
15253 kshitij.so 242
            buyBoxPrice = 0
243
            isBuyBox = 0
14189 kshitij.so 244
            scraperProductPage = NewFlipkartScraper.FlipkartProductPageScraper()
14121 kshitij.so 245
            try:
246
                if data['marketPlaceUrl']!="" or data['marketPlaceUrl'] !="http://www.flipkart.com/ps/%s"%(data['identifier']):
247
                    result = scraperProductPage.read(data['marketPlaceUrl'])
14124 kshitij.so 248
                    print result
14125 kshitij.so 249
                    if result.get('lowestSp')!=0:
250
                        lowestSp = result.get('lowestSp')
14121 kshitij.so 251
                        inStock = result.get('inStock')
15253 kshitij.so 252
                        buyBoxPrice = result.get('buyBoxPrice')
14121 kshitij.so 253
            except:
254
                print "Unable to scrape product page ",data['identifier']
255
            if lowestSp ==0:
256
                url = "http://www.flipkart.com/ps/%s"%(data['identifier'])
14189 kshitij.so 257
                scraperFk = FlipkartScraper.FlipkartScraper()
15253 kshitij.so 258
                vendorsData, buyBoxInfo = (scraperFk.read(url))
14121 kshitij.so 259
                sortedVendorsData = []
260
                sortedVendorsData = sorted(vendorsData, key=itemgetter('sellingPrice'))
261
                print "data",sortedVendorsData
262
                for vData in sortedVendorsData:
263
                    lowestSp = vData['sellingPrice']
264
                    break
265
                if lowestSp > 0:
266
                    inStock = 1
15975 kshitij.so 267
                try:
268
                    buyBoxPrice = buyBoxInfo[0].get('sellingPrice')
269
                except:
270
                    buyBoxPrice = None
13829 kshitij.so 271
            print lowestSp
272
            print inStock
15253 kshitij.so 273
            if buyBoxPrice is not None and buyBoxPrice == lowestSp:
274
                isBuyBox = 1
13829 kshitij.so 275
            if lowestSp > 0:
15253 kshitij.so 276
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':lowestSp,'updatedOn':to_java_date(now),'priceUpdatedOn':to_java_date(now),'in_stock':inStock,'buyBoxFlag':isBuyBox}}, multi=True)
16024 kshitij.so 277
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestSp , 'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13829 kshitij.so 278
            else:
13929 kshitij.so 279
                lowestSp = data['available_price']
15253 kshitij.so 280
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(now),'in_stock':inStock,'priceUpdatedOn':to_java_date(now),'buyBoxFlag':isBuyBox}}, multi=True)
16024 kshitij.so 281
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13918 kshitij.so 282
 
16117 kshitij.so 283
            return {'_id':data['_id'],'available_price':lowestSp,'in_stock':inStock,'source_id':2,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
14342 kshitij.so 284
 
14834 kshitij.so 285
        except Exception as e:
286
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
287
            print e
16117 kshitij.so 288
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':2,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
15902 kshitij.so 289
 
290
    elif source_id == 5:
291
        try:
292
            if data['_id'] in ignoreItems:
293
                print "Ignored items returning for %d"%(data['_id'])
16117 kshitij.so 294
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':5,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
15902 kshitij.so 295
 
296
            try:
297
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
298
                    print "sku id is already updated",data['_id'] 
16117 kshitij.so 299
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':5,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
15902 kshitij.so 300
            except:
301
                pass
302
 
303
 
304
            url = data['marketPlaceUrl']
305
            lowestPrice = 0.0
306
            try:
307
                sc = ShopCluesScraper.ShopCluesScraper()
15951 kshitij.so 308
                url = transformUrl(url, 5)
15902 kshitij.so 309
                productInfo = sc.read(url)
310
            except Exception as e:
16177 kshitij.so 311
                traceback.print_exc()
16176 kshitij.so 312
                productInfo = {}
16022 kshitij.so 313
                productInfo['price'] = 0.0
314
                productInfo['inStock'] = 0
315
                productInfo['isCod'] = 0
16178 kshitij.so 316
                productInfo['coupon'] = ""
16022 kshitij.so 317
 
15902 kshitij.so 318
            print "LowestPrice ",productInfo['price']
319
            if productInfo['price'] > 0 and productInfo['inStock']==1:
320
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':productInfo['price'],'coupon':productInfo['coupon'],'codAvailable':productInfo['isCod'],'updatedOn':to_java_date(now),'priceUpdatedOn':to_java_date(now),'in_stock':productInfo['inStock']}})
16024 kshitij.so 321
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':productInfo['price'] , 'in_stock':productInfo['inStock'],'dealType':data['dealType'], 'rank':data['rank'],'codAvailable':productInfo['isCod']}})
15902 kshitij.so 322
            else:
323
                lowestPrice = data['available_price']
324
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(now),'in_stock':0,'priceUpdatedOn':to_java_date(now)}})
16024 kshitij.so 325
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0,'dealType':data['dealType'],'rank':data['rank'],'codAvailable':productInfo['isCod']}})
15902 kshitij.so 326
 
16117 kshitij.so 327
            return {'_id':data['_id'],'available_price':productInfo['price'],'in_stock':productInfo['inStock'],'source_id':5,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'], 'coupon':productInfo['coupon'],'codAvailable':productInfo['isCod'], 'tagline': data['tagline'], 'offer': data['offer']}
15902 kshitij.so 328
        except Exception as e:
329
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
16177 kshitij.so 330
            traceback.print_exc()
16117 kshitij.so 331
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':5,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
16410 kshitij.so 332
 
333
    elif source_id == 6:
334
        try:
335
            if data['_id'] in ignoreItems:
336
                print "Ignored items returning for %d"%(data['_id'])
16462 kshitij.so 337
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':5,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer'],'gross_price':data.get('gross_price')}
16410 kshitij.so 338
 
339
            try:
340
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
341
                    print "sku id is already updated",data['_id'] 
16462 kshitij.so 342
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':5,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer'],'gross_price':data.get('gross_price')}
16410 kshitij.so 343
            except:
344
                pass
345
 
346
            paytmScraper = PaytmScraper.PaytmScraper()
347
            url = "https://catalog.paytm.com/v1/mobile/product/%s"%(data['identifier'].strip())
348
            try:
349
                result = paytmScraper.read(url)
350
                effective_price = result.get('offerPrice')
16462 kshitij.so 351
                gross_price = effective_price
16410 kshitij.so 352
                coupon = ""
353
                try:
354
                    offers = PaytmOfferScraper.fetchOffers(result['offerUrl'])
16415 kshitij.so 355
                    try:
356
                        addToPaytmMaster(offers.get('codes'))
357
                    except:
358
                        print "Error in adding coupon"
359
                        traceback.print_exc()
16410 kshitij.so 360
                    bestOffer = {}
361
                    for offer_data in offers.get('codes'):
16415 kshitij.so 362
                        if effective_price > offer_data.get('effective_price'):
16410 kshitij.so 363
                            effective_price = offer_data.get('effective_price')
364
                            bestOffer = offer_data
365
                            coupon = bestOffer.get('code')
366
                except:
367
                    pass
16469 kshitij.so 368
 
369
                """Temp fix"""
370
                if len(coupon) > 0:
371
                    result['codAvailable'] = 0
372
 
16410 kshitij.so 373
                available_price = effective_price 
374
                if result['inStock']:
375
                    inStock = 1
16462 kshitij.so 376
                    get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':available_price,'updatedOn':to_java_date(datetime.now()),'priceUpdatedOn':to_java_date(datetime.now()),'in_stock':1,'buyBoxFlag':1,'codAvailable':result.get('codAvailable'),'coupon':coupon,'gross_price':gross_price}})
377
                    get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':available_price , 'in_stock':1,'codAvailable':result.get('codAvailable'),'gross_price':gross_price}})
16410 kshitij.so 378
                else:
379
                    inStock = 0
16415 kshitij.so 380
                    get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(datetime.now()),'in_stock':0,'priceUpdatedOn':to_java_date(datetime.now()),'buyBoxFlag':1,'codAvailable':result.get('codAvailable'),'coupon':coupon}})
381
                    get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0,'codAvailable':result.get('codAvailable')}})
16410 kshitij.so 382
 
383
            except:
384
                inStock = 0
385
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(datetime.now()),'in_stock':0,'priceUpdatedOn':to_java_date(datetime.now()),'buyBoxFlag':1}})
386
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0}})
387
 
388
 
16462 kshitij.so 389
            return {'_id':data['_id'],'available_price':available_price,'in_stock':inStock,'source_id':6,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'], 'coupon':coupon,'codAvailable':result['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer'],'gross_price':gross_price}
16410 kshitij.so 390
        except Exception as e:
391
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
392
            traceback.print_exc()
16462 kshitij.so 393
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':6,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer'],'gross_price':data.get('gross_price')}
16410 kshitij.so 394
 
15902 kshitij.so 395
 
13829 kshitij.so 396
    else:
397
        return {}
15902 kshitij.so 398
 
399
 
13918 kshitij.so 400
 
15253 kshitij.so 401
def recomputePoints(item, deal):
402
    try:
403
        nlcPoints = getNlcPoints(item, deal['minNlc'], deal['maxNlc'], deal['available_price'])
404
    except:
405
        print traceback.print_exc()
406
        nlcPoints = deal['nlcPoints']
407
    if item['manualDealThresholdPrice'] >= deal['available_price']:
408
        dealPoints = item['dealPoints']
409
    else:
410
        dealPoints = 0
411
    get_mongo_connection().Catalog.Deals.update({'_id':deal['_id']},{"$set":{'totalPoints':deal['totalPoints'] - deal['nlcPoints'] + nlcPoints - deal['dealPoints'] +dealPoints , 'nlcPoints': nlcPoints, 'dealPoints': dealPoints, 'manualDealThresholdPrice': item['manualDealThresholdPrice']}})
412
 
15266 kshitij.so 413
 
414
def populateNegativeDeals():
415
    negativeDeals = get_mongo_connection().Catalog.NegativeDeals.find().distinct('sku')
416
    mc.set("negative_deals", negativeDeals, 600)
417
 
418
def recomputeDeal(item):
16017 kshitij.so 419
 
13918 kshitij.so 420
    """Lets recompute deal for this bundle"""
15266 kshitij.so 421
    print "Recomputing for bundleId",item.get('skuBundleId')
422
    skuBundleId = item['skuBundleId']
13829 kshitij.so 423
 
13918 kshitij.so 424
    similarItems = list(get_mongo_connection().Catalog.Deals.find({'skuBundleId':skuBundleId}).sort([('available_price',pymongo.ASCENDING)]))
425
    bestPrice = float("inf")
426
    bestOne = None
427
    bestSellerPoints = 0
428
    toUpdate = []
16017 kshitij.so 429
    prepaidBestPrice = float("inf")
430
    prepaidBestOne = None
431
    prepaidBestSellerPoints = 0
13918 kshitij.so 432
    for similarItem in similarItems:
15266 kshitij.so 433
        if similarItem['_id'] == item['_id']:
434
            recomputePoints(item, similarItem)
16017 kshitij.so 435
        if similarItem['codAvailable'] ==1:
436
            if mc.get("negative_deals") is None:
437
                populateNegativeDeals()
16172 kshitij.so 438
            if similarItem['in_stock'] == 0  or similarItem['_id'] in mc.get("negative_deals"):
16017 kshitij.so 439
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0, 'prepaidDeal':0 }})
440
                continue
441
            if similarItem['source_id'] == SOURCE_MAP.get('SHOPCLUES.COM') and similarItem['rank']==0:
442
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':0 }})
443
                continue
444
            if similarItem['available_price'] < bestPrice:
445
                bestOne = similarItem
446
                bestPrice = similarItem['available_price']
447
                bestSellerPoints = similarItem['bestSellerPoints']
448
            elif similarItem['available_price'] == bestPrice and bestSellerPoints < similarItem['bestSellerPoints']:
449
                bestOne = similarItem
450
                bestPrice = similarItem['available_price']
451
                bestSellerPoints = similarItem['bestSellerPoints']
452
            else:
453
                pass
13918 kshitij.so 454
        else:
16017 kshitij.so 455
            if mc.get("negative_deals") is None:
456
                populateNegativeDeals()
16172 kshitij.so 457
            if similarItem['in_stock'] == 0  or similarItem['_id'] in mc.get("negative_deals"):
16017 kshitij.so 458
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0, 'prepaidDeal':0 }})
459
                continue
460
            if similarItem['source_id'] == SOURCE_MAP.get('SHOPCLUES.COM') and similarItem['rank']==0:
461
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':0 }})
462
                continue
463
            if similarItem['available_price'] < prepaidBestPrice:
464
                prepaidBestOne = similarItem
465
                prepaidBestPrice = similarItem['available_price']
466
                prepaidBestSellerPoints = similarItem['bestSellerPoints']
467
            elif similarItem['available_price'] == prepaidBestPrice and prepaidBestSellerPoints < similarItem['bestSellerPoints']:
468
                prepaidBestOne = similarItem
469
                prepaidBestPrice = similarItem['available_price']
470
                prepaidBestSellerPoints = similarItem['bestSellerPoints']
471
            else:
472
                pass
16024 kshitij.so 473
    print "bestOne ", bestOne
474
    print "prepaid best one",  prepaidBestOne
475
    if bestOne is not None or prepaidBestOne is not None:
13918 kshitij.so 476
        for similarItem in similarItems:
477
            toUpdate.append(similarItem['_id'])
16023 kshitij.so 478
        if bestOne is not None:
479
            toUpdate.remove(bestOne['_id'])
480
            get_mongo_connection().Catalog.Deals.update({ '_id' : bestOne['_id'] }, {'$set':{'showDeal':1,'prepaidDeal':0 }})
481
        if prepaidBestOne is not None:
16069 kshitij.so 482
            if bestOne is not None:
483
                if prepaidBestOne['available_price'] < bestOne['available_price']: 
484
                    toUpdate.remove(prepaidBestOne['_id'])
485
                    get_mongo_connection().Catalog.Deals.update({ '_id' : prepaidBestOne['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':1 }})
16072 kshitij.so 486
            else:
487
                toUpdate.remove(prepaidBestOne['_id'])
488
                get_mongo_connection().Catalog.Deals.update({ '_id' : prepaidBestOne['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':1 }})
13918 kshitij.so 489
    if len(toUpdate) > 0:
16017 kshitij.so 490
        get_mongo_connection().Catalog.Deals.update({ '_id' : { "$in": toUpdate } }, {'$set':{'showDeal':0,'prepaidDeal':0 }},upsert=False, multi=True)
491
 
14342 kshitij.so 492
    print "Done with recomputing"
13829 kshitij.so 493
 
494
def getLatestPrice(skuBundleId, source_id):
495
    temp = []
496
    itemIds = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId,'source_id' : source_id}))
16026 kshitij.so 497
    item = None
13829 kshitij.so 498
    for item in itemIds:
14309 kshitij.so 499
        item['dealFlag'] = 0
500
        item['dealType'] = 0
15266 kshitij.so 501
        item['dealPoints'] = 0
502
        item['manualDealThresholdPrice'] = None
15912 kshitij.so 503
        if item['source_id'] ==5 and item['rank'] == 0:
504
            continue
15187 kshitij.so 505
        if item['source_id'] ==3:
506
            item['marketPlaceUrl'] = item['marketPlaceUrl']+'?supc='+item.get('identifier')
14309 kshitij.so 507
        manualDeals = list(get_mongo_connection().Catalog.ManualDeals.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())},'source_id':source_id, 'sku':item['_id']}))
508
        if len(manualDeals) > 0:
509
            item['dealFlag'] = 1
14760 kshitij.so 510
            item['dealType'] =manualDeals[0]['dealType']
15266 kshitij.so 511
            item['dealPoints'] = manualDeals[0]['dealPoints']
512
            item['manualDealThresholdPrice'] = manualDeals[0]['dealThresholdPrice']
14760 kshitij.so 513
        info = returnLatestPrice(item, source_id)
14794 kshitij.so 514
        print info
14760 kshitij.so 515
        try:
516
            cashBack = getCashBack(item['_id'], item['source_id'], item['category_id'], mc, 'localhost')
14794 kshitij.so 517
            print "CashBack is ",cashBack
14760 kshitij.so 518
            if not cashBack or cashBack.get('cash_back_status')!=1:
14801 kshitij.so 519
                info['cash_back_type'] = 0
520
                info['cash_back'] = 0
14760 kshitij.so 521
            else:
522
                if cashBack['cash_back_type'] in (1,2):
523
                    info['cash_back_type'] = cashBack['cash_back_type']
524
                    info['cash_back'] = float(cashBack['cash_back'])
525
                else:
14801 kshitij.so 526
                    info['cash_back_type'] = 0
527
                    info['cash_back'] = 0
14760 kshitij.so 528
        except Exception as cashBackEx:
14794 kshitij.so 529
            traceback.print_exc()
14760 kshitij.so 530
            print "Error calculating cashback."
531
            info['cash_back_type'] = 0
532
            info['cash_back'] = 0
14794 kshitij.so 533
        print "info is ",info
14760 kshitij.so 534
        temp.append(info)
16026 kshitij.so 535
    if item is not None:
536
        try:
537
            thread = threading.Thread(target=recomputeDeal, args = (item,))
538
            thread.daemon = True
539
            thread.start()    
540
        except:
541
            print traceback.print_exc()
542
            print "Unable to compute deal for ",skuBundleId
13829 kshitij.so 543
    return temp
544
 
13864 kshitij.so 545
def getLatestPriceById(id):
546
    item = list(get_mongo_connection().Catalog.MasterData.find({'_id':id}))
14309 kshitij.so 547
    item[0]['dealFlag'] = 0
548
    item[0]['dealType'] = 0
15266 kshitij.so 549
    item[0]['dealPoints'] = 0
550
    item[0]['manualDealThresholdPrice'] = None
14309 kshitij.so 551
    manualDeals = list(get_mongo_connection().Catalog.ManualDeals.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())},'source_id':item[0]['source_id'], 'sku':item[0]['_id']}))
552
    if len(manualDeals) > 0:
553
        item[0]['dealFlag'] = 1
15266 kshitij.so 554
        item[0]['dealType'] =manualDeals[0]['dealType']
555
        item[0]['dealPoints'] = manualDeals[0]['dealPoints']
556
        item[0]['manualDealThresholdPrice'] = manualDeals[0]['dealThresholdPrice']
14367 kshitij.so 557
 
14431 kshitij.so 558
    info = returnLatestPrice(item[0], item[0]['source_id'])
14794 kshitij.so 559
    print info
14367 kshitij.so 560
    try:
14794 kshitij.so 561
        cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'], mc, 'localhost')
562
        print "CashBack is ",cashBack
14760 kshitij.so 563
        if not cashBack or cashBack.get('cash_back_status')!=1:
14801 kshitij.so 564
            info['cash_back_type'] = 0
565
            info['cash_back'] = 0
14760 kshitij.so 566
        else:
567
            if cashBack['cash_back_type'] in (1,2):
568
                info['cash_back_type'] = cashBack['cash_back_type']
569
                info['cash_back'] = float(cashBack['cash_back'])
570
            else:
14801 kshitij.so 571
                info['cash_back_type'] = 0
572
                info['cash_back'] = 0
14760 kshitij.so 573
    except Exception as cashBackEx:
14794 kshitij.so 574
        traceback.print_exc()
14760 kshitij.so 575
        print cashBackEx
576
        print "Error calculating cashback."
577
        info['cash_back_type'] = 0
578
        info['cash_back'] = 0
579
    try:
15273 kshitij.so 580
        thread = threading.Thread(target=recomputeDeal, args = (item[0],))
14367 kshitij.so 581
        thread.daemon = True
582
        thread.start()    
583
    except:
584
        print "Unable to compute deal for ",item[0]['skuBundleId']
14431 kshitij.so 585
    return info
13829 kshitij.so 586
 
14828 kshitij.so 587
def updatePriceForNotificationBundles(skuBundleId):
15266 kshitij.so 588
    itemIds = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId,'priceUpdatedOn':{'$lte':to_java_date(datetime.now() - timedelta(minutes=2))},'source_id':{"$in":SOURCE_MAP.values()}}))
14828 kshitij.so 589
    for item in itemIds:
14833 kshitij.so 590
        print item['_id']
14828 kshitij.so 591
        item['dealFlag'] = 0
592
        item['dealType'] = 0
15266 kshitij.so 593
        item['dealPoints'] = 0
594
        item['manualDealThresholdPrice'] = None
14828 kshitij.so 595
        manualDeals = list(get_mongo_connection().Catalog.ManualDeals.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())},'source_id':item['source_id'], 'sku':item['_id']}))
596
        if len(manualDeals) > 0:
597
            item['dealFlag'] = 1
598
            item['dealType'] =manualDeals[0]['dealType']
15266 kshitij.so 599
            item['dealPoints'] = manualDeals[0]['dealPoints']
600
            item['manualDealThresholdPrice'] = manualDeals[0]['dealThresholdPrice']
14828 kshitij.so 601
        info = returnLatestPrice(item, item['source_id'],False)
602
        print info
603
 
13829 kshitij.so 604
def main():
15956 kshitij.so 605
    print datetime.now()
16428 kshitij.so 606
    print "retuned %s"%(str(getLatestPriceById(67)))
15956 kshitij.so 607
    print datetime.now()
13829 kshitij.so 608
if __name__=='__main__':
13971 kshitij.so 609
    main()
610