| Line 4... |
Line 4... |
| 4 |
|
4 |
|
| 5 |
@author: amit
|
5 |
@author: amit
|
| 6 |
'''
|
6 |
'''
|
| 7 |
from base64 import encode
|
7 |
from base64 import encode
|
| 8 |
from bs4 import BeautifulSoup
|
8 |
from bs4 import BeautifulSoup
|
| 9 |
from datetime import datetime
|
9 |
from datetime import datetime, timedelta
|
| 10 |
from dtr.dao import Order, SubOrder
|
10 |
from dtr.dao import Order, SubOrder, AmazonAffiliateInfo
|
| 11 |
from dtr.main import getStore, Store as MStore, ParseException, getBrowserObject, \
|
11 |
from dtr.main import getStore, Store as MStore, ParseException, getBrowserObject, \
|
| 12 |
ungzipResponse, tprint
|
12 |
ungzipResponse, tprint
|
| 13 |
from dtr.sources.flipkart import todict
|
13 |
from dtr.sources.flipkart import todict, AFF_REPORT_URL
|
| 14 |
from paramiko import sftp
|
14 |
from paramiko import sftp
|
| 15 |
from paramiko.client import SSHClient
|
15 |
from paramiko.client import SSHClient
|
| 16 |
from paramiko.sftp_client import SFTPClient
|
16 |
from paramiko.sftp_client import SFTPClient
|
| - |
|
17 |
import base64
|
| - |
|
18 |
import gzip
|
| 17 |
import mechanize
|
19 |
import mechanize
|
| 18 |
import os.path
|
20 |
import os.path
|
| 19 |
import paramiko
|
21 |
import paramiko
|
| 20 |
import re
|
22 |
import re
|
| 21 |
import time
|
23 |
import time
|
| 22 |
import traceback
|
24 |
import traceback
|
| - |
|
25 |
import urllib2
|
| 23 |
|
26 |
|
| 24 |
ORDER_REDIRECT_URL = 'https://www.amazon.in/gp/css/summary/edit.html?orderID=%s'
|
27 |
ORDER_REDIRECT_URL = 'https://www.amazon.in/gp/css/summary/edit.html?orderID=%s'
|
| 25 |
ORDER_SUCCESS_URL = 'https://www.amazon.in/gp/buy/spc/handlers/static-submit-decoupled.html'
|
28 |
ORDER_SUCCESS_URL = 'https://www.amazon.in/gp/buy/spc/handlers/static-submit-decoupled.html'
|
| 26 |
THANKYOU_URL = 'https://www.amazon.in/gp/buy/thankyou/handlers/display.html'
|
29 |
THANKYOU_URL = 'https://www.amazon.in/gp/buy/thankyou/handlers/display.html'
|
| 27 |
AMAZON_AFF_URL = 'https://assoc-datafeeds-eu.amazon.com/datafeed/listReports'
|
30 |
AMAZON_AFF_URL = 'https://assoc-datafeeds-eu.amazon.com/datafeed/listReports'
|
| - |
|
31 |
AMAZON_AFF_FILE_URL = 'https://assoc-datafeeds-eu.amazon.com/datafeed/getReport?filename=saholic-21-orders-report-%s.tsv.gz'
|
| 28 |
class Store(MStore):
|
32 |
class Store(MStore):
|
| 29 |
|
33 |
|
| 30 |
orderStatusRegexMap = { MStore.ORDER_PLACED : ['ordered from', 'not yet dispatched','dispatching now', 'preparing for dispatch'],
|
34 |
orderStatusRegexMap = { MStore.ORDER_PLACED : ['ordered from', 'not yet dispatched','dispatching now', 'preparing for dispatch'],
|
| 31 |
MStore.ORDER_SHIPPED : ['dispatched on','dispatched', 'on the way', 'out for delivery', 'Out for delivery'],
|
35 |
MStore.ORDER_SHIPPED : ['dispatched on','dispatched', 'on the way', 'out for delivery', 'Out for delivery'],
|
| 32 |
MStore.ORDER_CANCELLED : ['return complete', 'refunded', 'cancelled'],
|
36 |
MStore.ORDER_CANCELLED : ['return complete', 'refunded', 'cancelled'],
|
| Line 417... |
Line 421... |
| 417 |
|
421 |
|
| 418 |
print "Detailed Status need to be mapped"
|
422 |
print "Detailed Status need to be mapped"
|
| 419 |
print "Found new order status", detailedStatus
|
423 |
print "Found new order status", detailedStatus
|
| 420 |
raise ParseException("_getStatusFromDetailedStatus", "Found new order status" + detailedStatus)
|
424 |
raise ParseException("_getStatusFromDetailedStatus", "Found new order status" + detailedStatus)
|
| 421 |
def scrapeAffiliate(self, startDate=None, endDate=None):
|
425 |
def scrapeAffiliate(self, startDate=None, endDate=None):
|
| - |
|
426 |
br = getBrowserObject()
|
| - |
|
427 |
br.add_password('https://assoc-datafeeds-eu.amazon.com', 'Saholic', 'Fnubyvp')
|
| - |
|
428 |
url = AMAZON_AFF_URL
|
| - |
|
429 |
response = br.open(url)
|
| - |
|
430 |
#get data for past 40 days and store it to mongo
|
| - |
|
431 |
dt = datetime.now()
|
| - |
|
432 |
dtprevious = dt - timedelta(days=41)
|
| - |
|
433 |
for i in xrange(40):
|
| - |
|
434 |
dat = dtprevious + timedelta(days=i)
|
| - |
|
435 |
url = AMAZON_AFF_FILE_URL%(datetime.strftime(dat, "%Y%m%d"))
|
| - |
|
436 |
response = br.open(url)
|
| - |
|
437 |
page = gzip.GzipFile(fileobj=response, mode='rb').read()
|
| 422 |
pass
|
438 |
j=-1
|
| - |
|
439 |
for row in page.split("\n"):
|
| - |
|
440 |
j += 1
|
| - |
|
441 |
if j== 0 or j==1:
|
| - |
|
442 |
continue
|
| - |
|
443 |
fields = row.split("\t")
|
| - |
|
444 |
if len(fields)>1:
|
| - |
|
445 |
print fields
|
| - |
|
446 |
amazonAffiliate = AmazonAffiliateInfo(fields[0], fields[1], fields[2], fields[3], fields[4], fields[5], fields[6], fields[7], fields[8], fields[9])
|
| - |
|
447 |
print amazonAffiliate
|
| - |
|
448 |
self.db.amazonAffiliateInfo.insert(todict(amazonAffiliate))
|
| - |
|
449 |
else:
|
| - |
|
450 |
break
|
| 423 |
|
451 |
|
| 424 |
|
452 |
|
| 425 |
def parseTrackingUrl(self, br, trackingUrl):
|
453 |
def parseTrackingUrl(self, br, trackingUrl):
|
| 426 |
subOrder = {}
|
454 |
subOrder = {}
|
| 427 |
response = br.open(trackingUrl)
|
455 |
response = br.open(trackingUrl)
|
| 428 |
page = ungzipResponse(response)
|
456 |
page = ungzipResponse(response)
|
| Line 456... |
Line 484... |
| 456 |
|
484 |
|
| 457 |
|
485 |
|
| 458 |
|
486 |
|
| 459 |
def main():
|
487 |
def main():
|
| 460 |
store = getStore(1)
|
488 |
store = getStore(1)
|
| 461 |
br = mechanize.Browser()
|
489 |
# br = mechanize.Browser()
|
| 462 |
br.addheaders = [('User-agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'),
|
490 |
# br.addheaders = [('User-agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'),
|
| 463 |
('Accept', 'text/html,application/xhtml+xml,application/json,application/xml;q=0.9,*/*;q=0.8'),
|
491 |
# ('Accept', 'text/html,application/xhtml+xml,application/json,application/xml;q=0.9,*/*;q=0.8'),
|
| 464 |
('Accept-Encoding', 'gzip,deflate,sdch'),
|
492 |
# ('Accept-Encoding', 'gzip,deflate,sdch'),
|
| 465 |
('Accept-Language', 'en-US,en;q=0.8'),
|
493 |
# ('Accept-Language', 'en-US,en;q=0.8'),
|
| 466 |
('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.3')]
|
494 |
# ('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.3')]
|
| 467 |
store.scrapeStoreOrders()
|
495 |
# store.scrapeStoreOrders()
|
| 468 |
#store.parseOrderRawHtml(2121, "13232", 14, readSSh("/home/amit/917.html"), "https://www.amazon.in/gp/buy/spc/handlers/static-submit-decoupled.html/ref=ox_spc_place_order?ie=UTF8&hasWorkingJavascript=")
|
496 |
#store.parseOrderRawHtml(2121, "13232", 14, readSSh("/home/amit/917.html"), "https://www.amazon.in/gp/bOy/spc/handlers/static-submit-decoupled.html/ref=ox_spc_place_order?ie=UTF8&hasWorkingJavascript=")
|
| - |
|
497 |
#readSSh("/tmp/User157/*")
|
| - |
|
498 |
store.scrapeAffiliate()
|
| 469 |
def readSSh(fileName):
|
499 |
def readSSh(fileName):
|
| 470 |
try:
|
500 |
try:
|
| 471 |
str1 = open(fileName).read()
|
501 |
str1 = open(fileName).read()
|
| 472 |
return str1
|
502 |
return str1
|
| 473 |
except:
|
503 |
except:
|