Subversion Repositories SmartDukaan

Rev

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