Example #1
0
File: api.py Project: snoe/ebay
def send_request(headers, body, rurl=config.serverUrl, rdir=config.serverDir):
    # specify the connection to the eBay Sandbox environment
    if rurl.startswith("open"):
        connection = httplib.HTTPConnection(rurl)
    else:
        connection = httplib.HTTPSConnection(rurl)

    # specify a POST with the results of generateHeaders and generateRequest
    connection.request("POST", rdir, body, headers)
    response = connection.getresponse()

    # if response was unsuccessful, output message
    data = response.read()
    if response.status != 200:
        raise Exception("%s %s %s: %s %s" % (rurl, rdir, response.status, response.reason, data))

    # store the response data and close the connection
    connection.close()

    # check for any Errors
    root = ET.fromstring(data)
    errors = findall(root, "Errors")
    error_list = []
    for error in errors:
        d = ApiErrorData(error)
        error_list.append("%s: %s\n\t%s" % (d.code, d.short, d.detail))

    if error_list:
        raise Exception("\n".join(error_list))

    if not rurl.startswith("open"):
        try:
            f = open("out.txt", "wb")
            f.write(data)
            f.close()
        except IOError:
            pass

    return root
Example #2
0
def list_to_ship(sdate, edate):
    import api
    page_number = 1
    total_pages = 1

    addresses = {}
    item_to_address = {}
    item_address_to_quantity = {}

    total_transactions = 0
    total_outstanding = 0
    
    # get items sold
    while page_number <= total_pages:
        print 'getting page', page_number

        response = api.GetSellerTransactions(sdate,edate,page_number)
        total_pages = int(get_text(response, 'TotalNumberOfPages'))

        transactions = findall(response, 'Transaction')
        for i, transaction in enumerate(transactions):
            item_id = get_text(transaction, 'ItemID')
            paid = get_text(transaction, 'PaidTime')
            shipped = get_text(transaction, 'ShippedTime')
            print i, paid, shipped, 'search.ebay.com/%s' % item_id, 
            buyer = find(transaction, 'BuyerInfo')
            shipping = find(buyer, 'ShippingAddress')
            address = Address(shipping)
            if paid and not shipped:
                item_to_address.setdefault(item_id,[]).append(str(address))
                item_address_to_quantity[(item_id, str(address))] = get_text(transaction, 'QuantityPurchased')
                total_outstanding += 1
                print "added"
            else:
                print "not added"
            total_transactions += 1
            
        page_number += 1
    

    # get item titles
    item_responses = api.GetMultipleItems(item_to_address.keys())
    for item_response in item_responses:
        items = findall(item_response, 'Item')
        for item in items:
            item_id = get_text(item, 'ItemID')
            title = get_text(item, 'Title')
            print item_id, title
            addresslist = item_to_address[item_id]
            for address in addresslist:
                quantity = int(item_address_to_quantity[(item_id, address)])
                for x in range(quantity):
                    addresses.setdefault(address, []).append(title)

    """
    # get item titles the slow way
    for i, item_id in enumerate(item_to_address):
        print "looking up item", i
        iresp = api.GetItem(item_id)
        title = get_text(iresp, 'Title')
        address = item_to_address[item_id]
        addresses.setdefault(address, []).append(title)
    """

    #item_response = api.VerifyRelistItem(190172364325)
    #items = findall(item_response, 'Item')
    #for item in items:
    #      print item
    
    return addresses, total_transactions, total_outstanding