Subversion Repositories SmartDukaan

Rev

Rev 15633 | Rev 16210 | 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):
155
        #get all yesterday's affiliate in pending or cancelled state and update to system
14461 amit.gupta 156
        offers = []
157
        br = getBrowserObject()
158
        br.open(AFFILIATE_URL)
159
        response = br.response()  # copy
160
        token =  re.findall('window.__FK = "(.*?)"', ungzipResponse(response), re.IGNORECASE)[0]
161
        data = {'__FK':token,
162
                'email':'saholic1@gmail.com',
163
                'password':'e8aacf6fc1e3998186a4a8e56e428f66'
164
        }
165
        br.open(AFFILIATE_LOGIN_URL, urllib.urlencode(data))
15539 amit.gupta 166
        for delta in range(1,2):
14461 amit.gupta 167
            yester5date = date.today() - timedelta(delta)
168
            syester5date = yester5date.strftime('%Y-%m-%d')
16209 amit.gupta 169
            for status in [AFF_STATUS_PENDING, AFF_STATUS_CANCELLED, AFF_STATUS_DISAPPROVED,AFF_STATUS_APPROVED]:
15630 amit.gupta 170
                hasPagination=True
15631 amit.gupta 171
                pagination = 0
15630 amit.gupta 172
                while hasPagination:
15631 amit.gupta 173
                    pagination = pagination + 1
15630 amit.gupta 174
                    try:
15631 amit.gupta 175
                        br.open(AFF_REPORT_URL % (status, syester5date, syester5date, pagination))
15630 amit.gupta 176
                    except:
16209 amit.gupta 177
                        tprint("Could not fetch data for Status %s and date %s and pagination %s"%(status, syester5date, pagination))
15630 amit.gupta 178
                    page = ungzipResponse(br.response())
179
                    soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
180
                    soup.table
181
                    try:
182
                        tableElement = soup.findAll('table', {'class':'report-table fixtable'})[1]
183
                    except:
15632 amit.gupta 184
                        break
15630 amit.gupta 185
                    trElements = tableElement.findAll('tr')
186
                    trElements.pop(0)
187
 
188
                    for trElement in trElements:
189
                        tdElements = trElement.findAll('td')
15632 amit.gupta 190
                        if tdElements[0].text.strip()=='No Products to display!':
191
                            hasPagination = False
192
                            continue
15630 amit.gupta 193
                        productCode = re.findall(r'pid=(.*)$', tdElements[0].find('a')['href'])[0]
194
                        quantity =int(tdElements[3].text)
195
                        price = int(float(tdElements[2].text.strip().replace(",","")))
196
                        payOut = int(float(tdElements[6].text.strip().replace(",","")))
197
                        saleAmount = int(float(tdElements[4].text.strip().replace(",","")))
198
                        subTagId = tdElements[7].text.strip()
199
                        category = tdElements[1].text.strip()
200
                        affiliateInfo = FlipkartAffiliateInfo(subTagId, syester5date, productCode, price, quantity, saleAmount, payOut, status, category)
201
                        affiliateInfo.productTitle =  tdElements[0].find('a').text
202
                        #updateMap['subOrders.$.unitPrice'] = price
203
                        #updateMap['subOrders.$.cashBackAmount'], updateMap['subOrders.$.cashBacPercentage'] = self.getCashbackAmount(productCode, price)
204
                        offers.append(affiliateInfo)
16209 amit.gupta 205
                        tprint("Successfully updated fetch data for Status %s and date %s and pagination %s"%(status, syester5date, pagination))
14461 amit.gupta 206
        self._saveToAffiliate(offers)
15539 amit.gupta 207
 
208
        yester5date = date.today() - timedelta(1)
209
        syester5date = yester5date.strftime('%Y-%m-%d')
210
        self.db.flipkartOrderAffiliateInfo.find({"saleDate":syester5date})
211
        for order in self.db.flipkartOrderAffiliateInfo.find({"saleDate":syester5date}):
212
            userId = None
213
            subTagId = None
214
            email = None
215
            subTagId = order.get("subTagId")
216
            if subTagId:
217
                click = session.query(Clicks).filter_by(tag = subTagId).first()
218
                if click is not None:
219
                    userId= click.user_id 
220
                    user = session.query(Users.email).filter_by(id = userId).first()
221
                    if user is not None:
222
                        email = user.email
223
 
224
            flipkartOrder = FlipkartOrders()
225
            flipkartOrder.user_id = userId
226
            flipkartOrder.identifier = order.get("identifier")
227
            flipkartOrder.email = email
228
            flipkartOrder.subtagId = order.get("subTagId")
229
            flipkartOrder.created = datetime.strptime(order.get("saleDate"), "%Y-%m-%d")
230
            flipkartOrder.status = order.get("conversionStatus")
231
            flipkartOrder.title = order.get("productTitle")
232
            flipkartOrder.price = order.get("price")
233
            flipkartOrder.quantity = order.get("quantity")
234
            flipkartOrder.productCode = order.get("productCode")
235
            skuData = getSkuData(2, order.get("productCode"))
236
            if skuData is not None:
237
                flipkartOrder.catalogId = skuData.get("skuBundleId")
238
                flipkartOrder.brand = skuData.get("brand")
239
                flipkartOrder.model = skuData.get("model_name")
240
                flipkartOrder.category = categoryMap.get(skuData.get("category_id"))
241
                flipkartOrder.title =skuData.get("source_product_name")
242
 
243
        session.commit()
13721 amit.gupta 244
 
14412 amit.gupta 245
    def _saveToAffiliate(self, offers):
246
        collection = self.db.flipkartOrderAffiliateInfo
14460 amit.gupta 247
        mcollection = self.db.merchantOrder
248
        for offer in offers:
249
            result1 = collection.update({"subTagId":offer.subTagId, "price":offer.price, "quantity":offer.quantity, "saleDate":offer.saleDate, "productCode":offer.productCode},{"$set":todict(offer)}, upsert=True)
250
            if result1.get("upserted") is not None:
251
                result2 = mcollection.update({"subTagId":offer.subTagId, "storeId":self.store_id, "subOrders.missingAff":True, "subOrders.productCode":offer.productCode}, {"$set":{"subOrders.$.missingAff":False}}, multi=True)
252
                if result2.get("updatedExisting") is True:
253
                    mcollection.update({"_id":result1.get("upserted")}, {"missingOrders":False})
254
 
14412 amit.gupta 255
 
256
 
13658 manas 257
    def parseOrderRawHtml(self, orderId, subTagId, userId, rawHtml, orderSuccessUrl):
13796 amit.gupta 258
        resp= {}
13781 amit.gupta 259
        try:
260
            br = getBrowserObject()
261
            url = ORDER_TRACK_URL + re.findall('.*(\?.*?)$', orderSuccessUrl,re.IGNORECASE)[0]
262
 
263
            response = br.open(url)
264
            page = ungzipResponse(response)
265
 
266
            merchantOrderId = re.findall('reference_id=(.*?)&', orderSuccessUrl,re.IGNORECASE)[0]
267
            print merchantOrderId
268
 
269
            soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
270
 
271
            sections = soup.findAll("div", {"class":"ui-app-card-body"})
272
            sections.pop(1)
273
 
274
            merchantOrder = Order(orderId, userId, subTagId, self.store_id, orderSuccessUrl)
14145 amit.gupta 275
            merchantOrder.orderTrackingUrl = url
13781 amit.gupta 276
            for data in sections:
277
                name = data.findAll("span")
278
                i=0
279
                while i< len(name):
280
                    if "key" in str(name[i]):
281
                        if "Grand Total" in str(name[i]):
282
                            #Total Amount
283
                            merchantOrder.paidAmount = int(re.findall(r'\d+', name[i+1].text)[0])
284
                        elif "Order Date" in str(name[i]):
285
                            merchantOrder.placedOn = name[i+1].text 
286
                    i=i+1    
287
 
288
            merchantOrder.merchantOrderId = merchantOrderId
289
 
290
            mainOrder = soup.find("ul",{"class":"m-bottom p-cart"})
291
            fkSubOrders = mainOrder.findAll("li")
292
            #remove unwanted list
293
            fkSubOrders.pop(-1)
294
            subOrders = []
295
            merchantOrder.subOrders = subOrders
296
 
297
            #fetching suborders details
298
            for subOrder in fkSubOrders:
299
                y = subOrder.find("header").findAll("span")
300
                for suborderId in y:
301
                    if "value emp" in str(suborderId):
302
                        merchantSubOrderId = suborderId.text
303
                        break
304
                orderItems = subOrder.find("ul").findAll("div", recursive=False)
305
                i=0
306
                for orderItem in orderItems:
307
                    merchantOrder.placedOn
308
                    merchantSubOrderId = merchantSubOrderId + str(i)
309
                    divs = orderItem.findAll('div', recursive=False)
310
                    content = divs[0]
311
                    orderTracking = divs[2]
312
                    orderTrackingDet = divs[3]
313
 
314
 
315
                    imgUrl = content.find('img')['src']
316
                    lineDet = content.find("div",{"class":"product-info"})
317
                    productTitle = lineDet.find("a",{"class":"product-title"}).text
318
                    productUrl =  str(lineDet.find("a")['href'])
319
 
320
                    start='pid='
321
                    s=str(lineDet.find("a")['href'])
14339 amit.gupta 322
                    productCode = re.findall(re.escape(start)+"(.*)",s)[0].strip()
13781 amit.gupta 323
                    mname = lineDet.findAll("span")
324
                    k=0
325
                    while k<len(mname):
326
                        if "note" in str(mname[k]):
327
                            if "Color:" in str(mname[k]):
328
                                productTitle = productTitle + " " + mname[k+1].text
329
 
330
                            elif "Qty:" in str(mname[k]):
331
                                quantity = int(mname[k+1].text)
332
                            elif "Subtotal:" in str(mname[k]):
14343 amit.gupta 333
                                amountPaid = int(re.findall(r'\d+', mname[k+1].text)[0])
13781 amit.gupta 334
                            elif "Delivery:" in str(mname[k]):
335
                                #Delivery Date for sub order
336
                                print "Delivery Date " +mname[k+1].text
337
                        k=k+1
14343 amit.gupta 338
                    merchantsubOrder = SubOrder(productTitle, productUrl, merchantOrder.placedOn, amountPaid,MStore.ORDER_PLACED, quantity)
13781 amit.gupta 339
                    merchantsubOrder.imgUrl  = imgUrl
340
                    merchantsubOrder.productCode = productCode
341
                    merchantsubOrder.merchantSubOrderId = merchantSubOrderId
14337 amit.gupta 342
                    print "productCode", productCode
14340 amit.gupta 343
                    print "amountPaid", amountPaid
14336 amit.gupta 344
                    cashbackAmount, cashbackPercent = self.getCashbackAmount(productCode, amountPaid)
13781 amit.gupta 345
                    cashbackStatus = Store.CB_PENDING
346
                    if cashbackAmount <= 0:
347
                        cashbackStatus = Store.CB_NA
348
                    merchantsubOrder.cashBackAmount = cashbackAmount
349
                    merchantsubOrder.cashBackStatus = cashbackStatus      
350
                    merchantsubOrder.cashBackPercentage = cashbackPercent      
351
 
352
                    subOrders.append(merchantsubOrder)
353
                    #To track shipping details         
354
                    status=-1    
355
                    tr = orderTracking.findAll("div",{"class":"tap-bullet-area c-tab-trigger"})
356
                    if "approveDetails-complete" in str(tr):
357
                        if "processingDetails-complete" in str(tr):
358
                            if "shippingDetails-complete" in str(tr):
359
                                if "delivery-complete" in str(tr):
360
                                    status = MStore.ORDER_DELIVERED
361
                                else:     
362
                                    status = MStore.ORDER_SHIPPED
363
                                    orderTracking.find('div', {'class':'tracking-remark active'})
364
                            else:
365
                                status = MStore.ORDER_PLACED
366
                        else: 
13690 amit.gupta 367
                            status = MStore.ORDER_PLACED
13781 amit.gupta 368
                    elif str(tr) in ["approveDetails-ongoing"]:
369
                        status=MStore.ORDER_PLACED             
14692 amit.gupta 370
                    if "dead" in str(tr) or "shippingDetails-returnOngoing" in str(tr) or "shippingDetails-return" in str(tr):
13781 amit.gupta 371
                        status = MStore.ORDER_CANCELLED    
372
                    print "Sub Order Status " + str(status)                      
373
 
374
                    trackingDetailsActive = orderTrackingDet.find("div",{"class":"c-tabs-content m-top active"})
375
                    print "Sub order tracking description " + trackingDetailsActive.text
14312 amit.gupta 376
            if self._saveToOrder(todict(merchantOrder)):
377
                resp['result'] = 'ORDER_CREATED'
378
            else:
379
                resp['result'] = 'ORDER_ALREADY_CREATED_IGNORED'
380
 
13796 amit.gupta 381
            return resp 
13781 amit.gupta 382
        except:
14338 amit.gupta 383
            traceback.print_exc()
14312 amit.gupta 384
            resp['result'] = 'ORDER_NOT_CREATED'
13796 amit.gupta 385
            return resp 
13781 amit.gupta 386
 
14617 amit.gupta 387
    def _getStatusFromDetailedStatus(self, detailedStatus):
388
        for key, value in Store.OrderStatusMap.iteritems():
14626 amit.gupta 389
            if detailedStatus.lower() in value:
14617 amit.gupta 390
                return key
14676 amit.gupta 391
        print "Detailed Status need to be mapped", detailedStatus, "Store:", self.store_name
14617 amit.gupta 392
        raise ParseException("_getStatusFromDetailedStatus", "Found new order status" + detailedStatus)
13658 manas 393
 
394
    def flipkartOrderTracking(self, orderId, subTagId, userId, rawHtml, orderSuccessUrl):
395
        br = getBrowserObject()
396
        url = ORDER_TRACK_URL + re.findall('.*(\?.*?)$', orderSuccessUrl,re.IGNORECASE)[0]
397
 
398
        response = br.open(url)
399
        page = ungzipResponse(response, br)
400
 
401
 
402
        soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
403
 
404
 
405
        mainOrder = soup.findAll("ul",{"class":"m-bottom p-cart"})
406
        #fetching suborders details
407
        for subOrder in mainOrder:
408
            subOrd = subOrder.findAll("li")
409
 
410
            subOrd.pop(len(subOrd)-1)
411
            for productInfo in subOrd:
412
                status=-1    
413
                #To track shipping details         
414
                n = productInfo.findAll("div",{"class":"tracking-progress grid-row cf"})
415
                for trackingStatus in n:
416
                    tr = trackingStatus.findAll("div",{"class":"tap-bullet-area c-tab-trigger"})
417
                    if "approveDetails-complete" in str(tr):
13679 manas 418
                        print "Here"
13658 manas 419
                        if "processingDetails-complete" in str(tr):
13679 manas 420
                            print "There"
13658 manas 421
                            if "shippingDetails-complete" in str(tr):
13679 manas 422
                                print "Share"
13658 manas 423
                                if "delivery-complete" in str(tr):
13679 manas 424
                                    print "Last"
13658 manas 425
                                    status = 3
426
                                else:     
427
                                    status = 2
428
                            else:
429
                                status = 1 
430
                        else: 
431
                            status = 0     
432
                    if "dead" in str(tr):
433
                        status = 4    
434
                print status                      
435
 
436
 
437
def _saveToOrderFlipkart(self, order):
438
        collection = self.db.merchantOrder
439
        order = collection.insert(order)
440
 
13690 amit.gupta 441
 
442
 
443
def hex_md5(password):
444
    m = hashlib.md5()
445
    print(m.digest())
446
 
13658 manas 447
def main():
16209 amit.gupta 448
    requestDownload()
449
 
450
 
451
 
452
 
453
    #store = getStore(2)
454
    #store.scrapeAffiliate()
15630 amit.gupta 455
    #store.scrapeStoreOrders()
13658 manas 456
    #store.parseOrderRawHtml(12346, "subtagId", 122324,  "html", 'https://m.flipkart.com/orderresponse?reference_id=OD3016502908102575&token=0db4c692bacbfbfc158b52358ac9e91e&src=or&pr=1')
457
    #store.parseOrderRawHtml(12346, "subtagId", 122324,  "html", 'https://m.flipkart.com/orderresponse?reference_id=OD3018701137253850&token=f7402ddcf2b63b37cc6bc528cc115d2f&src=or&pr=1')
13679 manas 458
    #store.parseOrderRawHtml(12346, "subtagId", 122324,  "html", 'https://m.flipkart.com/orderresponse?reference_id=OD0019279584515727&token=7d85d8c24d36b5a1efc8008634390c7e&src=or&pr=1')
13658 manas 459
    #store.flipkartOrderTracking(12346, "subtagId", 122324,  "html", 'https://m.flipkart.com/orderresponse?reference_id=OD0019279584515727&token=7d85d8c24d36b5a1efc8008634390c7e&src=or&pr=1')
13679 manas 460
    #store.parseOrderRawHtml(12346, "subtagId", 122324,  "html", 'https://m.flipkart.com/orderresponse?reference_id=OD0019365336126533&token=dbce2bd4dc4023295b436a7d3c7986c9&src=or&pr=1')
461
    #store.parseOrderRawHtml(12346, "subtagId", 122324,  "html", 'https://dl.flipkart.com/orderresponse?reference_id=OD1019453634552336&token=e8e04871ad65b532aa53fa82bb34b901&src=or&pr=1')
13690 amit.gupta 462
    #hex_md5('spice@2020')
14351 amit.gupta 463
    #store.getCashbackAmount('MOBDVHC6XKKPZ3GZ', 5999)
13679 manas 464
 
13690 amit.gupta 465
 
13658 manas 466
 
13690 amit.gupta 467
 
16209 amit.gupta 468
def requestDownload():
469
    requestReportUrl = "http://www.flipkart.com/affiliate/download/request"
470
    br = getBrowserObject()
471
    br.set_debug_responses(True)
472
    br.open(AFFILIATE_URL)
473
    response = br.response()  # copy
474
    token =  re.findall('window.__FK = "(.*?)"', utils.ungzipResponse(response), re.IGNORECASE)[0]
475
    data = {'__FK':token,
476
            'email':'saholic1@gmail.com',
477
            'password':'e8aacf6fc1e3998186a4a8e56e428f66'
478
    }
479
    br.open(AFFILIATE_LOGIN_URL, urllib.urlencode(data))
480
    till = date.today()
481
    start = date.today() - timedelta(2)
482
    target = open("dowloadreportids", 'w')
483
    target.truncate() 
484
    for status in statuses:
485
        data = getRequestDownloadData(token, start, till, status)
486
        response = utils.ungzipResponse(br.open(requestReportUrl, urllib.urlencode(data)))
487
        target.write(response)
488
 
489
    target.close()
13690 amit.gupta 490
 
16209 amit.gupta 491
 
492
def getRequestDownloadData(token, start, till, status):
493
    return (
494
            ('__FK',token),
495
            ('parameters[from]', start),
496
            ('parameters[till]', till),
497
            ('parameters[filter]', status),
498
            ('type','OrdersReport'),
499
            )
500
 
13690 amit.gupta 501
 
13658 manas 502
def todict(obj, classkey=None):
503
    if isinstance(obj, dict):
504
        data = {}
505
        for (k, v) in obj.items():
506
            data[k] = todict(v, classkey)
507
        return data
508
    elif hasattr(obj, "_ast"):
509
        return todict(obj._ast())
510
    elif hasattr(obj, "__iter__"):
511
        return [todict(v, classkey) for v in obj]
512
    elif hasattr(obj, "__dict__"):
513
        data = dict([(key, todict(value, classkey)) 
514
            for key, value in obj.__dict__.iteritems() 
515
            if not callable(value) and not key.startswith('_')])
516
        if classkey is not None and hasattr(obj, "__class__"):
517
            data[classkey] = obj.__class__.__name__
518
        return data
519
    else:
13690 amit.gupta 520
        return obj
521
 
16209 amit.gupta 522
if __name__ == '__main__':
523
        main()
14145 amit.gupta 524