Rev 13569 | Rev 13679 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
'''Created on Jan 15, 2015@author: amit'''from dtr import mainimport importlibfrom dtr.main import getBrowserObject, getStore, ParseExceptionfrom dtr.main import sourceMapfrom pymongo.mongo_client import MongoClientfrom BeautifulSoup import BeautifulSoupimport refrom dtr.dao import AffiliateInfo, Order, SubOrderimport urllibfrom pprint import pprintUSERNAME='saholic1@gmail.com'PASSWORD='spice@2020'ORDER_TRACK_URL='https://m.flipkart.com/order_details'class Store(main.Store):OrderStatusMap = {main.Store.ORDER_PLACED : ['In Progress','N/A'],main.Store.ORDER_DELIVERED : ['Delivered'],main.Store.ORDER_SHIPPED : ['In Transit'],main.Store.ORDER_CANCELLED : ['Closed For Vendor Reallocation']}def __init__(self,store_id):client = MongoClient('mongodb://localhost:27017/')self.db = client.dtrsuper(Store, self).__init__(store_id)def getName(self):return "flipkart"def parseOrderRawHtml(self, orderId, subTagId, userId, rawHtml, orderSuccessUrl):br = getBrowserObject()url = ORDER_TRACK_URL + re.findall('.*(\?.*?)$', orderSuccessUrl,re.IGNORECASE)[0]response = br.open(url)page = ungzipResponse(response, br)soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)sections = soup.findAll("div", {"class":"ui-app-card-body"})mainOrder = soup.findAll("ul",{"class":"m-bottom p-cart"})sections.pop(1)#fetching summary of the productsfor data in sections:name = data.findAll("span")i=0print "Summary Details of Flipkart"while i< len(name):if "key" in str(name[i]):if "Grand Total" in str(name[i]):#Total Amountprint "Total Amount " + name[i+1].textelif "Status" in str(name[i]):print "Summary Status " + name[i+1].textelif "Order ID" in str(name[i]):j=i+1while j < i+5:if "value" in str(name[j]):print "Order ID " + str(j-i) + " " +name[j].textj=j+1else:breakelif "Order Date" in str(name[i]):print "Order Date " + name[i+1].texti=i+1print "Details of Sub Orders"#fetching suborders detailsfor subOrder in mainOrder:subOrd = subOrder.findAll("li")subOrd.pop(len(subOrd)-1)for productInfo in subOrd:y = productInfo.findAll("span")for suborderId in y:if "value emp" in str(suborderId):#Sub Order IDprint "Sub Order ID" + suborderId.textx = productInfo.findAll("div",{"class":"product-info"})for maik in x:#Product titleprint maik.find("a",{"class":"product-title"}).textmname = maik.findAll("span")k=0while k<len(mname):if "note" in str(mname[k]):if "Color:" in str(mname[k]):#Colorprint "Color " + mname[k+1].textelif "Qty:" in str(mname[k]):#Quantity of sub itemprint "Quantity "+mname[k+1].textelif "Subtotal:" in str(mname[k]):#SubTotal for the itemprint "Sub Total"+mname[k+1].textelif "Delivery:" in str(mname[k]):#Delivery Date for sub orderprint "Delivery Date " +mname[k+1].textk=k+1status=-1#To track shipping detailsn = productInfo.findAll("div",{"class":"tracking-progress grid-row cf"})for trackingStatus in n:tr = trackingStatus.findAll("div",{"class":"tap-bullet-area c-tab-trigger"})if "approveDetails-complete" in str(tr):if "processingDetails-complete" in str(tr):if "shippingDetails-complete" in str(tr):if "delivery-complete" in str(tr):status = 3else:status = 2else:status = 1else:status = 0if "dead" in str(tr):status = 4print "Sub Order Status " + str(status)f = productInfo.findAll("div",{"class":"c-tabs-content m-top active"})for trackingDetailsActive in f:print "Sub order tracking description " + trackingDetailsActive.textdef flipkartOrderTracking(self, orderId, subTagId, userId, rawHtml, orderSuccessUrl):br = getBrowserObject()url = ORDER_TRACK_URL + re.findall('.*(\?.*?)$', orderSuccessUrl,re.IGNORECASE)[0]response = br.open(url)page = ungzipResponse(response, br)soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)mainOrder = soup.findAll("ul",{"class":"m-bottom p-cart"})#fetching suborders detailsfor subOrder in mainOrder:subOrd = subOrder.findAll("li")subOrd.pop(len(subOrd)-1)for productInfo in subOrd:status=-1#To track shipping detailsn = productInfo.findAll("div",{"class":"tracking-progress grid-row cf"})for trackingStatus in n:tr = trackingStatus.findAll("div",{"class":"tap-bullet-area c-tab-trigger"})if "approveDetails-complete" in str(tr):if "processingDetails-complete" in str(tr):if "shippingDetails-complete" in str(tr):if "delivery-complete" in str(tr):status = 3else:status = 2else:status = 1else:status = 0if "dead" in str(tr):status = 4print statusdef _saveToOrderFlipkart(self, order):collection = self.db.merchantOrderorder = collection.insert(order)def main():store = getStore(2)#store.parseOrderRawHtml(12346, "subtagId", 122324, "html", 'https://m.flipkart.com/orderresponse?reference_id=OD3016502908102575&token=0db4c692bacbfbfc158b52358ac9e91e&src=or&pr=1')#store.parseOrderRawHtml(12346, "subtagId", 122324, "html", 'https://m.flipkart.com/orderresponse?reference_id=OD3018701137253850&token=f7402ddcf2b63b37cc6bc528cc115d2f&src=or&pr=1')store.parseOrderRawHtml(12346, "subtagId", 122324, "html", 'https://m.flipkart.com/orderresponse?reference_id=OD0019279584515727&token=7d85d8c24d36b5a1efc8008634390c7e&src=or&pr=1')#store.flipkartOrderTracking(12346, "subtagId", 122324, "html", 'https://m.flipkart.com/orderresponse?reference_id=OD0019279584515727&token=7d85d8c24d36b5a1efc8008634390c7e&src=or&pr=1')def ungzipResponse(r,b):headers = r.info()if headers['Content-Encoding']=='gzip':import gzipprint "********************"print "Deflating gzip response"print "********************"gz = gzip.GzipFile(fileobj=r, mode='rb')html = gz.read()gz.close()return htmlif __name__ == '__main__':main()def todict(obj, classkey=None):if isinstance(obj, dict):data = {}for (k, v) in obj.items():data[k] = todict(v, classkey)return dataelif hasattr(obj, "_ast"):return todict(obj._ast())elif hasattr(obj, "__iter__"):return [todict(v, classkey) for v in obj]elif hasattr(obj, "__dict__"):data = dict([(key, todict(value, classkey))for key, value in obj.__dict__.iteritems()if not callable(value) and not key.startswith('_')])if classkey is not None and hasattr(obj, "__class__"):data[classkey] = obj.__class__.__name__return dataelse:return obj