| 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):
|