Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
13569 amit.gupta 1
'''
2
Created on Jan 15, 2015
3
 
4
@author: amit
5
'''
13690 amit.gupta 6
from BeautifulSoup import BeautifulSoup
13721 amit.gupta 7
from datetime import datetime, date, timedelta
13569 amit.gupta 8
from dtr import main
14412 amit.gupta 9
from dtr.dao import AffiliateInfo, Order, SubOrder, FlipkartAffiliateInfo
13690 amit.gupta 10
from dtr.main import getBrowserObject, getStore, ParseException, ungzipResponse, \
14398 amit.gupta 11
    Store as MStore, sourceMap, tprint
15539 amit.gupta 12
from dtr.reports.affiliatereco import getSkuData
13
from dtr.storage.DataService import Clicks, Users, FlipkartOrders
16209 amit.gupta 14
from dtr.utils import utils
15539 amit.gupta 15
from dtr.utils.utils import fetchResponseUsingProxy
16
from elixir import *
13690 amit.gupta 17
from pprint import pprint
18
from pymongo.mongo_client import MongoClient
19
import hashlib
13658 manas 20
import importlib
13690 amit.gupta 21
import json
22
import mechanize
14412 amit.gupta 23
import pymongo
13658 manas 24
import re
14338 amit.gupta 25
import traceback
13658 manas 26
import urllib
27
 
28
USERNAME='saholic1@gmail.com'
29
PASSWORD='spice@2020'
30
ORDER_TRACK_URL='https://m.flipkart.com/order_details'
13679 manas 31
AFFILIATE_URL='https://www.flipkart.com/affiliate/login'
13690 amit.gupta 32
AFFILIATE_LOGIN_URL='https://www.flipkart.com/affiliate/a_login'
15630 amit.gupta 33
AFF_REPORT_URL='http://www.flipkart.com/affiliate/reports/ordersReport?order_status_filter=%s&startdate=%s&enddate=%s&page=%s'
13690 amit.gupta 34
AFF_STATUS_CANCELLED='cancelled'
35
AFF_STATUS_APPROVED='approved'
36
AFF_STATUS_DISAPPROVED='disapproved'
37
AFF_STATUS_PENDING='pending'
16209 amit.gupta 38
statuses = [AFF_STATUS_CANCELLED,AFF_STATUS_APPROVED,AFF_STATUS_DISAPPROVED,AFF_STATUS_PENDING ]
15539 amit.gupta 39
categoryMap = {3:"Mobiles", 5:"Tablets"}
13658 manas 40
 
13679 manas 41
 
13781 amit.gupta 42
class Store(MStore):
13658 manas 43
    OrderStatusMap = {
14679 amit.gupta 44
                      main.Store.ORDER_PLACED : ['approval', 'processing', 'shipping'],
45
                      main.Store.ORDER_DELIVERED : ['your item has been delivered'],
14680 amit.gupta 46
                      main.Store.ORDER_SHIPPED : ['in transit', 'shipment yet to be delivered'],
47
                      main.Store.ORDER_CANCELLED : ['shipment is returned', 'your item has been returned', 'your shipment has been cancelled', 'your shipment has been cancelled.']
13658 manas 48
 
49
                      }
50
    def __init__(self,store_id):
51
        client = MongoClient('mongodb://localhost:27017/')
52
        self.db = client.dtr
53
        super(Store, self).__init__(store_id)
54
 
13569 amit.gupta 55
    def getName(self):
56
        return "flipkart"
57
 
13690 amit.gupta 58
    def scrapeStoreOrders(self,):
59
        orders = self._getActiveOrders()
13721 amit.gupta 60
        for order in orders:
14692 amit.gupta 61
            print "Order", self.store_name, order['orderId']
14398 amit.gupta 62
            try:
63
                closed = True
64
                url = ORDER_TRACK_URL + re.findall('.*(\?.*?)$', order['orderSuccessUrl'],re.IGNORECASE)[0]
14757 amit.gupta 65
                page = fetchResponseUsingProxy(url)
14398 amit.gupta 66
                soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
67
 
68
                sections = soup.findAll("div", {"class":"ui-app-card-body"})
69
                sections.pop(1)
13721 amit.gupta 70
 
14398 amit.gupta 71
                mainOrder = soup.find("ul",{"class":"m-bottom p-cart"})
72
                fkSubOrders = mainOrder.findAll("li")
73
 
74
                #remove unwanted list
75
                fkSubOrders.pop(-1)
76
 
77
 
78
                bulk = self.db.merchantOrder.initialize_ordered_bulk_op()
79
                #fetching suborders details
80
                for subOrder in fkSubOrders:
81
                    updateMap = {}
82
                    y = subOrder.find("header").findAll("span")
83
                    for suborderId in y:
84
                        if "value emp" in str(suborderId):
85
                            merchantSubOrderId = suborderId.text
86
                            break
14692 amit.gupta 87
                    ul = subOrder.find("ul")
88
                    if ul is None:
89
                        ul = subOrder.findAll("div", recursive=False)[0].div.div
90
                    orderItems = ul.findAll("div", recursive=False)
14398 amit.gupta 91
                    i=0
92
                    for orderItem in orderItems:
93
                        closedStatus = False
94
                        merchantSubOrderId = merchantSubOrderId + str(i)
95
                        subOrder =  self._isSubOrderActive(order, merchantSubOrderId)
96
                        if subOrder is None:
97
                            break
14460 amit.gupta 98
                        elif subOrder['closed']:
99
                            break
14398 amit.gupta 100
                        findMap = {"orderId": order['orderId'], "subOrders.merchantSubOrderId": merchantSubOrderId}
101
                        divs = orderItem.findAll('div', recursive=False)
102
                        orderTracking = divs[2]
103
                        orderTrackingDetDiv = divs[3].find('div',{'class':'c-tabs-content m-top active'})
104
                        orderTrackingDet = orderTrackingDetDiv.find('div',{'class':re.compile('tracking-remark')}).text
105
                        updateMap["subOrders.$.detailedStatus"] = orderTrackingDet
14617 amit.gupta 106
                        status = self._getStatusFromDetailedStatus(orderTrackingDet)
14398 amit.gupta 107
                        tr = orderTracking.findAll("div",{"class":"tap-bullet-area c-tab-trigger"})
108
 
109
                        cashbackStatus = subOrder.get("cashBackStatus") 
110
                        if "approveDetails-complete" in str(tr):
111
                            if "processingDetails-complete" in str(tr):
112
                                if "shippingDetails-complete" in str(tr):
113
                                    if "delivery-complete" in str(tr):
114
                                        status = MStore.ORDER_DELIVERED
115
                                        if cashbackStatus == Store.CB_PENDING:
116
                                            cashbackStatus = Store.CB_APPROVED
117
                                        closedStatus = True
118
                                    else:     
119
                                        status = MStore.ORDER_SHIPPED
120
                                        courierTrackAnchor = orderTrackingDetDiv.find('a')
121
                                        trackingUrl = courierTrackAnchor("href")
122
                                        trackingText = courierTrackAnchor.text
123
                                        courierArr = trackingText.split(' : ')
124
                                        updateMap["subOrders.$.trackingUrl"] = trackingUrl
125
                                        updateMap["subOrders.$.trackingNumber"] = courierArr[1]
126
                                        updateMap["subOrders.$.courierName"] = courierArr[0]
127
                                else:
14692 amit.gupta 128
                                    status = MStore.ORDER_CANCELLED
129
                                    closedStatus = True
130
                                    if cashbackStatus == Store.CB_PENDING:
131
                                        cashbackStatus = Store.CB_CANCELLED
14398 amit.gupta 132
                            else: 
13721 amit.gupta 133
                                status = MStore.ORDER_PLACED
14398 amit.gupta 134
                        elif str(tr) in ["approveDetails-ongoing"]:
135
                            status=MStore.ORDER_PLACED             
14617 amit.gupta 136
                        if "dead" in str(tr) or status==MStore.ORDER_CANCELLED:
14398 amit.gupta 137
                            status = MStore.ORDER_CANCELLED
138
                            closedStatus = True
139
                            if cashbackStatus == Store.CB_PENDING:
140
                                cashbackStatus = Store.CB_CANCELLED
141
 
142
                        updateMap["subOrders.$.cashBackStatus"] = cashbackStatus
143
                        updateMap["subOrders.$.status"] = status
144
                        updateMap["subOrders.$.closed"] = closedStatus
145
                        if closed:
146
                            closed = closedStatus
147
                        bulk.find(findMap).update({'$set' : updateMap})
14692 amit.gupta 148
                bulk.find({'orderId': order['orderId']}).update({'$set':{'closed': closed, 'parseError':False}})
14398 amit.gupta 149
                bulk.execute()            
150
            except:
14692 amit.gupta 151
                self.db.merchantOrder.update({"orderId":order['orderId']}, {"$set":{"parseError":True}})
14847 amit.gupta 152
                tprint("Could not update " + str(order['orderId']) + ' for store ' + self.getName())
14398 amit.gupta 153
                traceback.print_exc()
13721 amit.gupta 154
    def scrapeAffiliate(self, startDate=None, endDate=None):
16705 amit.gupta 155
        if startDate==None:
156
            startDate=2
13721 amit.gupta 157
        #get all yesterday's affiliate in pending or cancelled state and update to system
14461 amit.gupta 158
        offers = []
159
        br = getBrowserObject()
160
        br.open(AFFILIATE_URL)
161
        response = br.response()  # copy
162
        token =  re.findall('window.__FK = "(.*?)"', ungzipResponse(response), re.IGNORECASE)[0]
163
        data = {'__FK':token,
164
                'email':'saholic1@gmail.com',
165
                'password':'e8aacf6fc1e3998186a4a8e56e428f66'
166
        }
167
        br.open(AFFILIATE_LOGIN_URL, urllib.urlencode(data))
16705 amit.gupta 168
        for delta in range(1,startDate):
14461 amit.gupta 169
            yester5date = date.today() - timedelta(delta)
170
            syester5date = yester5date.strftime('%Y-%m-%d')
16705 amit.gupta 171
            #print "syester5date", syester5date
16209 amit.gupta 172
            for status in [AFF_STATUS_PENDING, AFF_STATUS_CANCELLED, AFF_STATUS_DISAPPROVED,AFF_STATUS_APPROVED]:
16705 amit.gupta 173
                #print "status", status
15630 amit.gupta 174
                hasPagination=True
15631 amit.gupta 175
                pagination = 0
15630 amit.gupta 176
                while hasPagination:
15631 amit.gupta 177
                    pagination = pagination + 1
15630 amit.gupta 178
                    try:
15631 amit.gupta 179
                        br.open(AFF_REPORT_URL % (status, syester5date, syester5date, pagination))
15630 amit.gupta 180
                    except:
16209 amit.gupta 181
                        tprint("Could not fetch data for Status %s and date %s and pagination %s"%(status, syester5date, pagination))
16211 amit.gupta 182
                        continue
15630 amit.gupta 183
                    page = ungzipResponse(br.response())
184
                    soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
16705 amit.gupta 185
                    #print "Soup", soup.table
15630 amit.gupta 186
                    try:
187
                        tableElement = soup.findAll('table', {'class':'report-table fixtable'})[1]
188
                    except:
15632 amit.gupta 189
                        break
15630 amit.gupta 190
                    trElements = tableElement.findAll('tr')
191
                    trElements.pop(0)
192
                    for trElement in trElements:
193
                        tdElements = trElement.findAll('td')
15632 amit.gupta 194
                        if tdElements[0].text.strip()=='No Products to display!':
195
                            hasPagination = False
196
                            continue
15630 amit.gupta 197
                        productCode = re.findall(r'pid=(.*)$', tdElements[0].find('a')['href'])[0]
198
                        quantity =int(tdElements[3].text)
199
                        price = int(float(tdElements[2].text.strip().replace(",","")))
200
                        payOut = int(float(tdElements[6].text.strip().replace(",","")))
201
                        saleAmount = int(float(tdElements[4].text.strip().replace(",","")))
202
                        subTagId = tdElements[7].text.strip()
203
                        category = tdElements[1].text.strip()
204
                        affiliateInfo = FlipkartAffiliateInfo(subTagId, syester5date, productCode, price, quantity, saleAmount, payOut, status, category)
205
                        affiliateInfo.productTitle =  tdElements[0].find('a').text
206
                        #updateMap['subOrders.$.unitPrice'] = price
207
                        #updateMap['subOrders.$.cashBackAmount'], updateMap['subOrders.$.cashBacPercentage'] = self.getCashbackAmount(productCode, price)
208
                        offers.append(affiliateInfo)
16210 amit.gupta 209
                self._saveToAffiliate(offers)
15539 amit.gupta 210
 
211
        yester5date = date.today() - timedelta(1)
212
        syester5date = yester5date.strftime('%Y-%m-%d')
213
        self.db.flipkartOrderAffiliateInfo.find({"saleDate":syester5date})
16212 amit.gupta 214
        for order in self.db.flipkartOrderAffiliateInfo.find({"saleDate":syester5date}):
15539 amit.gupta 215
            userId = None
216
            subTagId = None
217
            email = None
218
            subTagId = order.get("subTagId")
219
            if subTagId:
220
                click = session.query(Clicks).filter_by(tag = subTagId).first()
221
                if click is not None:
222
                    userId= click.user_id 
223
                    user = session.query(Users.email).filter_by(id = userId).first()
224
                    if user is not None:
225
                        email = user.email
226
 
227
            flipkartOrder = FlipkartOrders()
228
            flipkartOrder.user_id = userId
229
            flipkartOrder.identifier = order.get("identifier")
230
            flipkartOrder.email = email
231
            flipkartOrder.subtagId = order.get("subTagId")
232
            flipkartOrder.created = datetime.strptime(order.get("saleDate"), "%Y-%m-%d")
233
            flipkartOrder.status = order.get("conversionStatus")
234
            flipkartOrder.title = order.get("productTitle")
235
            flipkartOrder.price = order.get("price")
236
            flipkartOrder.quantity = order.get("quantity")
237
            flipkartOrder.productCode = order.get("productCode")
238
            skuData = getSkuData(2, order.get("productCode"))
239
            if skuData is not None:
240
                flipkartOrder.catalogId = skuData.get("skuBundleId")
241
                flipkartOrder.brand = skuData.get("brand")
242
                flipkartOrder.model = skuData.get("model_name")
243
                flipkartOrder.category = categoryMap.get(skuData.get("category_id"))
244
                flipkartOrder.title =skuData.get("source_product_name")
245
 
246
        session.commit()
13721 amit.gupta 247
 
14412 amit.gupta 248
    def _saveToAffiliate(self, offers):
249
        collection = self.db.flipkartOrderAffiliateInfo
14460 amit.gupta 250
        mcollection = self.db.merchantOrder
251
        for offer in offers:
252
            result1 = collection.update({"subTagId":offer.subTagId, "price":offer.price, "quantity":offer.quantity, "saleDate":offer.saleDate, "productCode":offer.productCode},{"$set":todict(offer)}, upsert=True)
253
            if result1.get("upserted") is not None:
254
                result2 = mcollection.update({"subTagId":offer.subTagId, "storeId":self.store_id, "subOrders.missingAff":True, "subOrders.productCode":offer.productCode}, {"$set":{"subOrders.$.missingAff":False}}, multi=True)
255
                if result2.get("updatedExisting") is True:
256
                    mcollection.update({"_id":result1.get("upserted")}, {"missingOrders":False})
257
 
14412 amit.gupta 258
 
259
 
13658 manas 260
    def parseOrderRawHtml(self, orderId, subTagId, userId, rawHtml, orderSuccessUrl):
13796 amit.gupta 261
        resp= {}
13781 amit.gupta 262
        try:
263
            br = getBrowserObject()
264
            url = ORDER_TRACK_URL + re.findall('.*(\?.*?)$', orderSuccessUrl,re.IGNORECASE)[0]
265
 
266
            response = br.open(url)
267
            page = ungzipResponse(response)
268
 
269
            merchantOrderId = re.findall('reference_id=(.*?)&', orderSuccessUrl,re.IGNORECASE)[0]
270
            print merchantOrderId
271
 
272
            soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
273
 
274
            sections = soup.findAll("div", {"class":"ui-app-card-body"})
275
            sections.pop(1)
276
 
277
            merchantOrder = Order(orderId, userId, subTagId, self.store_id, orderSuccessUrl)
14145 amit.gupta 278
            merchantOrder.orderTrackingUrl = url
13781 amit.gupta 279
            for data in sections:
280
                name = data.findAll("span")
281
                i=0
282
                while i< len(name):
283
                    if "key" in str(name[i]):
284
                        if "Grand Total" in str(name[i]):
285
                            #Total Amount
286
                            merchantOrder.paidAmount = int(re.findall(r'\d+', name[i+1].text)[0])
287
                        elif "Order Date" in str(name[i]):
288
                            merchantOrder.placedOn = name[i+1].text 
289
                    i=i+1    
290
 
291
            merchantOrder.merchantOrderId = merchantOrderId
292
 
293
            mainOrder = soup.find("ul",{"class":"m-bottom p-cart"})
294
            fkSubOrders = mainOrder.findAll("li")
295
            #remove unwanted list
296
            fkSubOrders.pop(-1)
297
            subOrders = []
298
            merchantOrder.subOrders = subOrders
299
 
300
            #fetching suborders details
301
            for subOrder in fkSubOrders:
302
                y = subOrder.find("header").findAll("span")
303
                for suborderId in y:
304
                    if "value emp" in str(suborderId):
305
                        merchantSubOrderId = suborderId.text
306
                        break
307
                orderItems = subOrder.find("ul").findAll("div", recursive=False)
308
                i=0
309
                for orderItem in orderItems:
310
                    merchantOrder.placedOn
311
                    merchantSubOrderId = merchantSubOrderId + str(i)
312
                    divs = orderItem.findAll('div', recursive=False)
313
                    content = divs[0]
314
                    orderTracking = divs[2]
315
                    orderTrackingDet = divs[3]
316
 
317
 
318
                    imgUrl = content.find('img')['src']
319
                    lineDet = content.find("div",{"class":"product-info"})
320
                    productTitle = lineDet.find("a",{"class":"product-title"}).text
321
                    productUrl =  str(lineDet.find("a")['href'])
322
 
323
                    start='pid='
324
                    s=str(lineDet.find("a")['href'])
14339 amit.gupta 325
                    productCode = re.findall(re.escape(start)+"(.*)",s)[0].strip()
13781 amit.gupta 326
                    mname = lineDet.findAll("span")
327
                    k=0
328
                    while k<len(mname):
329
                        if "note" in str(mname[k]):
330
                            if "Color:" in str(mname[k]):
331
                                productTitle = productTitle + " " + mname[k+1].text
332
 
333
                            elif "Qty:" in str(mname[k]):
334
                                quantity = int(mname[k+1].text)
335
                            elif "Subtotal:" in str(mname[k]):
14343 amit.gupta 336
                                amountPaid = int(re.findall(r'\d+', mname[k+1].text)[0])
13781 amit.gupta 337
                            elif "Delivery:" in str(mname[k]):
338
                                #Delivery Date for sub order
339
                                print "Delivery Date " +mname[k+1].text
340
                        k=k+1
14343 amit.gupta 341
                    merchantsubOrder = SubOrder(productTitle, productUrl, merchantOrder.placedOn, amountPaid,MStore.ORDER_PLACED, quantity)
13781 amit.gupta 342
                    merchantsubOrder.imgUrl  = imgUrl
343
                    merchantsubOrder.productCode = productCode
344
                    merchantsubOrder.merchantSubOrderId = merchantSubOrderId
14337 amit.gupta 345
                    print "productCode", productCode
14340 amit.gupta 346
                    print "amountPaid", amountPaid
14336 amit.gupta 347
                    cashbackAmount, cashbackPercent = self.getCashbackAmount(productCode, amountPaid)
13781 amit.gupta 348
                    cashbackStatus = Store.CB_PENDING
349
                    if cashbackAmount <= 0:
350
                        cashbackStatus = Store.CB_NA
351
                    merchantsubOrder.cashBackAmount = cashbackAmount
352
                    merchantsubOrder.cashBackStatus = cashbackStatus      
353
                    merchantsubOrder.cashBackPercentage = cashbackPercent      
354
 
355
                    subOrders.append(merchantsubOrder)
356
                    #To track shipping details         
357
                    status=-1    
358
                    tr = orderTracking.findAll("div",{"class":"tap-bullet-area c-tab-trigger"})
359
                    if "approveDetails-complete" in str(tr):
360
                        if "processingDetails-complete" in str(tr):
361
                            if "shippingDetails-complete" in str(tr):
362
                                if "delivery-complete" in str(tr):
363
                                    status = MStore.ORDER_DELIVERED
364
                                else:     
365
                                    status = MStore.ORDER_SHIPPED
366
                                    orderTracking.find('div', {'class':'tracking-remark active'})
367
                            else:
368
                                status = MStore.ORDER_PLACED
369
                        else: 
13690 amit.gupta 370
                            status = MStore.ORDER_PLACED
13781 amit.gupta 371
                    elif str(tr) in ["approveDetails-ongoing"]:
372
                        status=MStore.ORDER_PLACED             
14692 amit.gupta 373
                    if "dead" in str(tr) or "shippingDetails-returnOngoing" in str(tr) or "shippingDetails-return" in str(tr):
13781 amit.gupta 374
                        status = MStore.ORDER_CANCELLED    
375
                    print "Sub Order Status " + str(status)                      
376
 
377
                    trackingDetailsActive = orderTrackingDet.find("div",{"class":"c-tabs-content m-top active"})
378
                    print "Sub order tracking description " + trackingDetailsActive.text
14312 amit.gupta 379
            if self._saveToOrder(todict(merchantOrder)):
380
                resp['result'] = 'ORDER_CREATED'
381
            else:
382
                resp['result'] = 'ORDER_ALREADY_CREATED_IGNORED'
383
 
13796 amit.gupta 384
            return resp 
13781 amit.gupta 385
        except:
14338 amit.gupta 386
            traceback.print_exc()
14312 amit.gupta 387
            resp['result'] = 'ORDER_NOT_CREATED'
13796 amit.gupta 388
            return resp 
13781 amit.gupta 389
 
14617 amit.gupta 390
    def _getStatusFromDetailedStatus(self, detailedStatus):
391
        for key, value in Store.OrderStatusMap.iteritems():
14626 amit.gupta 392
            if detailedStatus.lower() in value:
14617 amit.gupta 393
                return key
14676 amit.gupta 394
        print "Detailed Status need to be mapped", detailedStatus, "Store:", self.store_name
14617 amit.gupta 395
        raise ParseException("_getStatusFromDetailedStatus", "Found new order status" + detailedStatus)
13658 manas 396
 
397
    def flipkartOrderTracking(self, orderId, subTagId, userId, rawHtml, orderSuccessUrl):
398
        br = getBrowserObject()
399
        url = ORDER_TRACK_URL + re.findall('.*(\?.*?)$', orderSuccessUrl,re.IGNORECASE)[0]
400
 
401
        response = br.open(url)
402
        page = ungzipResponse(response, br)
403
 
404
 
405
        soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
406
 
407
 
408
        mainOrder = soup.findAll("ul",{"class":"m-bottom p-cart"})
409
        #fetching suborders details
410
        for subOrder in mainOrder:
411
            subOrd = subOrder.findAll("li")
412
 
413
            subOrd.pop(len(subOrd)-1)
414
            for productInfo in subOrd:
415
                status=-1    
416
                #To track shipping details         
417
                n = productInfo.findAll("div",{"class":"tracking-progress grid-row cf"})
418
                for trackingStatus in n:
419
                    tr = trackingStatus.findAll("div",{"class":"tap-bullet-area c-tab-trigger"})
420
                    if "approveDetails-complete" in str(tr):
13679 manas 421
                        print "Here"
13658 manas 422
                        if "processingDetails-complete" in str(tr):
13679 manas 423
                            print "There"
13658 manas 424
                            if "shippingDetails-complete" in str(tr):
13679 manas 425
                                print "Share"
13658 manas 426
                                if "delivery-complete" in str(tr):
13679 manas 427
                                    print "Last"
13658 manas 428
                                    status = 3
429
                                else:     
430
                                    status = 2
431
                            else:
432
                                status = 1 
433
                        else: 
434
                            status = 0     
435
                    if "dead" in str(tr):
436
                        status = 4    
437
                print status                      
438
 
439
 
440
def _saveToOrderFlipkart(self, order):
441
        collection = self.db.merchantOrder
442
        order = collection.insert(order)
443
 
13690 amit.gupta 444
 
445
 
446
def hex_md5(password):
447
    m = hashlib.md5()
448
    print(m.digest())
449
 
13658 manas 450
def main():
16210 amit.gupta 451
    #requestDownload()
16209 amit.gupta 452
 
453
 
454
 
455
 
16210 amit.gupta 456
    store = getStore(2)
16705 amit.gupta 457
    #store.scrapeAffiliate(60)
16210 amit.gupta 458
    store.scrapeAffiliate()
15630 amit.gupta 459
    #store.scrapeStoreOrders()
13658 manas 460
    #store.parseOrderRawHtml(12346, "subtagId", 122324,  "html", 'https://m.flipkart.com/orderresponse?reference_id=OD3016502908102575&token=0db4c692bacbfbfc158b52358ac9e91e&src=or&pr=1')
461
    #store.parseOrderRawHtml(12346, "subtagId", 122324,  "html", 'https://m.flipkart.com/orderresponse?reference_id=OD3018701137253850&token=f7402ddcf2b63b37cc6bc528cc115d2f&src=or&pr=1')
13679 manas 462
    #store.parseOrderRawHtml(12346, "subtagId", 122324,  "html", 'https://m.flipkart.com/orderresponse?reference_id=OD0019279584515727&token=7d85d8c24d36b5a1efc8008634390c7e&src=or&pr=1')
13658 manas 463
    #store.flipkartOrderTracking(12346, "subtagId", 122324,  "html", 'https://m.flipkart.com/orderresponse?reference_id=OD0019279584515727&token=7d85d8c24d36b5a1efc8008634390c7e&src=or&pr=1')
13679 manas 464
    #store.parseOrderRawHtml(12346, "subtagId", 122324,  "html", 'https://m.flipkart.com/orderresponse?reference_id=OD0019365336126533&token=dbce2bd4dc4023295b436a7d3c7986c9&src=or&pr=1')
465
    #store.parseOrderRawHtml(12346, "subtagId", 122324,  "html", 'https://dl.flipkart.com/orderresponse?reference_id=OD1019453634552336&token=e8e04871ad65b532aa53fa82bb34b901&src=or&pr=1')
13690 amit.gupta 466
    #hex_md5('spice@2020')
14351 amit.gupta 467
    #store.getCashbackAmount('MOBDVHC6XKKPZ3GZ', 5999)
13679 manas 468
 
13690 amit.gupta 469
 
13658 manas 470
 
13690 amit.gupta 471
 
16209 amit.gupta 472
def requestDownload():
473
    requestReportUrl = "http://www.flipkart.com/affiliate/download/request"
474
    br = getBrowserObject()
475
    br.set_debug_responses(True)
476
    br.open(AFFILIATE_URL)
477
    response = br.response()  # copy
478
    token =  re.findall('window.__FK = "(.*?)"', utils.ungzipResponse(response), re.IGNORECASE)[0]
479
    data = {'__FK':token,
480
            'email':'saholic1@gmail.com',
481
            'password':'e8aacf6fc1e3998186a4a8e56e428f66'
482
    }
483
    br.open(AFFILIATE_LOGIN_URL, urllib.urlencode(data))
484
    till = date.today()
485
    start = date.today() - timedelta(2)
486
    target = open("dowloadreportids", 'w')
487
    target.truncate() 
488
    for status in statuses:
489
        data = getRequestDownloadData(token, start, till, status)
490
        response = utils.ungzipResponse(br.open(requestReportUrl, urllib.urlencode(data)))
491
        target.write(response)
492
 
493
    target.close()
13690 amit.gupta 494
 
16209 amit.gupta 495
 
496
def getRequestDownloadData(token, start, till, status):
497
    return (
498
            ('__FK',token),
499
            ('parameters[from]', start),
500
            ('parameters[till]', till),
501
            ('parameters[filter]', status),
502
            ('type','OrdersReport'),
503
            )
504
 
13690 amit.gupta 505
 
13658 manas 506
def todict(obj, classkey=None):
507
    if isinstance(obj, dict):
508
        data = {}
509
        for (k, v) in obj.items():
510
            data[k] = todict(v, classkey)
511
        return data
512
    elif hasattr(obj, "_ast"):
513
        return todict(obj._ast())
514
    elif hasattr(obj, "__iter__"):
515
        return [todict(v, classkey) for v in obj]
516
    elif hasattr(obj, "__dict__"):
517
        data = dict([(key, todict(value, classkey)) 
518
            for key, value in obj.__dict__.iteritems() 
519
            if not callable(value) and not key.startswith('_')])
520
        if classkey is not None and hasattr(obj, "__class__"):
521
            data[classkey] = obj.__class__.__name__
522
        return data
523
    else:
13690 amit.gupta 524
        return obj
525
 
16209 amit.gupta 526
if __name__ == '__main__':
527
        main()
14145 amit.gupta 528