Subversion Repositories SmartDukaan

Rev

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