Subversion Repositories SmartDukaan

Rev

Rev 13662 | Rev 13690 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 13662 Rev 13680
Line 3... Line 3...
3
 
3
 
4
@author: amit
4
@author: amit
5
'''
5
'''
6
from BeautifulSoup import BeautifulSoup
6
from BeautifulSoup import BeautifulSoup
7
from bson.binary import Binary
7
from bson.binary import Binary
8
from datetime import datetime, date
8
from datetime import datetime, date, timedelta
9
from dtr import main
9
from dtr import main
10
from dtr.dao import AffiliateInfo, Order, SubOrder
10
from dtr.dao import AffiliateInfo, Order, SubOrder
11
from dtr.main import getBrowserObject, ScrapeException, getStore, ParseException, Store as MStore
11
from dtr.main import getBrowserObject, ScrapeException, getStore, ParseException, Store as MStore,\
-
 
12
    ungzipResponse
12
from pprint import pprint
13
from pprint import pprint
13
from pymongo import MongoClient
14
from pymongo import MongoClient
14
import json
15
import json
15
import pymongo
16
import pymongo
16
import re
17
import re
Line 53... Line 54...
53
        br.form['data[User][password]'] = PASSWORD 
54
        br.form['data[User][password]'] = PASSWORD 
54
        br.form['data[User][email]'] = USERNAME
55
        br.form['data[User][email]'] = USERNAME
55
        br.submit()
56
        br.submit()
56
        response = br.open(CONFIG_URL)
57
        response = br.open(CONFIG_URL)
57
        
58
        
58
        token =  re.findall('"session_token":"(.*?)"', ungzipResponse(response, br), re.IGNORECASE)[0]
59
        token =  re.findall('"session_token":"(.*?)"', ungzipResponse(response), re.IGNORECASE)[0]
59
        
60
        
60
        allOffers = self._getAllOffers(br, token)
61
        allOffers = self._getAllOffers(br, token)
61
        
62
        
62
        allPyOffers = []
63
        allPyOffers = []
63
        maxSaleDate = self._getLastSaleDate()
64
        maxSaleDate = self._getLastSaleDate()
64
        newMaxSaleDate = maxSaleDate
65
        newMaxSaleDate = maxSaleDate
65
        for offer in allOffers:
66
        for offer in allOffers:
66
            allPyOffers.append(self.covertToObj(offer).__dict__)
67
            pyOffer = self.covertToObj(offer).__dict__
-
 
68
            allPyOffers.append(pyOffer)
67
            saleDate = datetime.strptime(offer.saleDate,"%Y-%m-%d %H:%M:%S")
69
            saleDate = datetime.strptime(pyOffer['saleDate'],"%Y-%m-%d %H:%M:%S")
68
            if maxSaleDate < saleDate:
70
            if maxSaleDate < saleDate:
69
                self._updateOrdersPayBackStatus(offer.subTagId,offer.saleDate)
71
                self._updateOrdersPayBackStatus(pyOffer['subTagId'],pyOffer['saleDate'])
70
                if newMaxSaleDate < saleDate:
72
                if newMaxSaleDate < saleDate:
71
                    newMaxSaleDate = saleDate
73
                    newMaxSaleDate = saleDate
72
                    
74
                    
73
        self._setLastSaleDate(newMaxSaleDate)
75
        self._setLastSaleDate(newMaxSaleDate)
74
        print allPyOffers
-
 
75
        self._saveToAffiliate(allPyOffers)
76
        self._saveToAffiliate(allPyOffers)
76
    
77
    
77
    def _setLastSaleDate(self, saleDate):
78
    def _setLastSaleDate(self, saleDate):
78
        self.db.lastDaySale.update({'storeId':self.store_id}, {'$set':{'saleDate':saleDate}})
79
        self.db.lastSaleDtate.update({'storeId':self.store_id}, {'$set':{'saleDate':saleDate}})
79
    
80
    
80
    def _updateOrdersPayBackStatus(self, subTagId, saleDate):
81
    def _updateOrdersPayBackStatus(self, subTagId, saleDate):
81
        self.db.merchantOrder.update({"subTagId":subTagId, "placedOn":saleDate, "subOrders.cashbackStatus":MStore.CB_INIT},
82
        self.db.merchantOrder.update({"subTagId":subTagId, "placedOn":saleDate, "subOrders.cashbackStatus":MStore.CB_INIT},
82
                                              { '$set': { "subOrders.$.cashbackStatus" : MStore.CB_PENDING } })
83
                                              { '$set': { "subOrders.$.cashbackStatus" : MStore.CB_PENDING } })
83
                         
84
                         
Line 92... Line 93...
92
    def parseOrderRawHtml(self, orderId, subTagId, userId, rawHtml, orderSuccessUrl):
93
    def parseOrderRawHtml(self, orderId, subTagId, userId, rawHtml, orderSuccessUrl):
93
        try:
94
        try:
94
            br = getBrowserObject()
95
            br = getBrowserObject()
95
            url = ORDER_TRACK_URL + re.findall('.*(\?.*?)$', orderSuccessUrl,re.IGNORECASE)[0]
96
            url = ORDER_TRACK_URL + re.findall('.*(\?.*?)$', orderSuccessUrl,re.IGNORECASE)[0]
96
            response = br.open(url)
97
            response = br.open(url)
97
            page = ungzipResponse(response, br)
98
            page = ungzipResponse(response)
98
            #page=page.decode("utf-8")
99
            #page=page.decode("utf-8")
99
            soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
100
            soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
100
            #orderHead = soup.find(name, attrs, recursive, text)
101
            #orderHead = soup.find(name, attrs, recursive, text)
101
            sections = soup.findAll("section")
102
            sections = soup.findAll("section")
102
            
103
            
Line 226... Line 227...
226
        orders = self._getActiveOrders()
227
        orders = self._getActiveOrders()
227
        br = getBrowserObject()
228
        br = getBrowserObject()
228
        for order in orders:
229
        for order in orders:
229
            url = ORDER_TRACK_URL + re.findall('.*(\?.*?)$', order['orderSuccessUrl'],re.IGNORECASE)[0]
230
            url = ORDER_TRACK_URL + re.findall('.*(\?.*?)$', order['orderSuccessUrl'],re.IGNORECASE)[0]
230
            response = br.open(url)
231
            response = br.open(url)
231
            page = ungzipResponse(response, br)
232
            page = ungzipResponse(response)
232
            #page=page.decode("utf-8")
233
            #page=page.decode("utf-8")
233
            soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
234
            soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)
234
            sections = soup.findAll("section")
235
            sections = soup.findAll("section")
235
            sections.pop(0)
236
            sections.pop(0)
236
            sections.pop(0)
237
            sections.pop(0)
Line 318... Line 319...
318
        allOffers = []
319
        allOffers = []
319
        nextPage = 1  
320
        nextPage = 1  
320
        while True:
321
        while True:
321
            data = getPostData(token, nextPage)
322
            data = getPostData(token, nextPage)
322
            response = br.open(POST_URL, data)
323
            response = br.open(POST_URL, data)
323
            rmap = json.loads(ungzipResponse(response, br))
324
            rmap = json.loads(ungzipResponse(response))
324
            if rmap is not None:
325
            if rmap is not None:
325
                rmap = rmap['response']
326
                rmap = rmap['response']
326
                if rmap is not None and len(rmap['errors'])==0:
327
                if rmap is not None and len(rmap['errors'])==0:
327
                    allOffers += rmap['data']['data']
328
                    allOffers += rmap['data']['data']
328
            nextPage += 1
329
            nextPage += 1
Line 333... Line 334...
333
    
334
    
334
    def covertToObj(self,offer):
335
    def covertToObj(self,offer):
335
        offerData = offer['Stat']
336
        offerData = offer['Stat']
336
        offer1 = AffiliateInfo(offerData['affiliate_info1'], self.store_id, offerData['conversion_status'], offerData['ad_id'], 
337
        offer1 = AffiliateInfo(offerData['affiliate_info1'], self.store_id, offerData['conversion_status'], offerData['ad_id'], 
337
                              offerData['datetime'], offerData['payout'], offer['Offer']['name'], offerData['ip'], offerData['conversion_sale_amount'])
338
                              offerData['datetime'], offerData['payout'], offer['Offer']['name'], offerData['ip'], offerData['conversion_sale_amount'])
-
 
339
        
338
        return offer1
340
        return offer1
339
def getPostData(token, page = 1, limit= 20, startDate=None, endDate=None):
341
def getPostData(token, page = 1, limit= 20, startDate=None, endDate=None):
340
    endDate=date.today() + datetime.timedelta(days=1)
342
    endDate=date.today() + timedelta(days=1)
341
    startDate=endDate - datetime.timedelta(days=31)
343
    startDate=endDate - timedelta(days=31)
342
 
344
 
343
    parameters = (
345
    parameters = (
344
        ("page",str(page)),
346
        ("page",str(page)),
345
        ("limit",str(limit)),
347
        ("limit",str(limit)),
346
        ("fields[]","Stat.offer_id"),
348
        ("fields[]","Stat.offer_id"),
Line 370... Line 372...
370
    store = getStore(3)
372
    store = getStore(3)
371
    #store._isSubOrderActive(8, "5970688907")
373
    #store._isSubOrderActive(8, "5970688907")
372
    store.scrapeAffiliate()
374
    store.scrapeAffiliate()
373
    #store.parseOrderRawHtml(12345, "subtagId", 122323,  "html", 'https://m.snapdeal.com/purchaseMobileComplete?code=1f4166d13ea799b65aa9dea68b3e9e70&order=4509499363')
375
    #store.parseOrderRawHtml(12345, "subtagId", 122323,  "html", 'https://m.snapdeal.com/purchaseMobileComplete?code=1f4166d13ea799b65aa9dea68b3e9e70&order=4509499363')
374
 
376
 
375
def ungzipResponse(r,b):
-
 
376
    headers = r.info()
-
 
377
    if headers['Content-Encoding']=='gzip':
-
 
378
        import gzip
-
 
379
        print "********************"
-
 
380
        print "Deflating gzip response"
-
 
381
        print "********************"
-
 
382
        gz = gzip.GzipFile(fileobj=r, mode='rb')
-
 
383
        html = gz.read()
-
 
384
        gz.close()
-
 
385
        return html
-
 
386
 
377
 
387
if __name__ == '__main__':
378
if __name__ == '__main__':
388
    main()
379
    main()
389
 
380
 
390
def todict(obj, classkey=None):
381
def todict(obj, classkey=None):