def EndItems(Items): api = Connection(config_file='user.yaml', domain="api.ebay.com") temp_data = '{"EndItemRequestContainer":[' #request =json.loads("{}") #res = Items.split(",") i = 1 for iid in Items: temp_data = temp_data + '{"MessageID":' + "\"" + str( i ) + "\"" + ',"EndingReason":"NotAvailable","ItemID": \"' + iid + '\" }' if (len(Items) > i): temp_data = temp_data + ',' i = i + 1 temp_data = temp_data + ']}' #print(temp_data) #request = eval(temp_data) request = json.loads(temp_data) print(request) response = api.execute('EndItems', request) print(f"{response.reply.Ack}")
def __init__( self, domain='api.ebay.com', appid='ZhouPeng-3242-4cc7-88fd-310f513fcd71', devid='df3f2898-65b1-4e15-afd5-172b989903aa', certid='a0e19cf9-9b2b-457f-b6f1-87f3f600ca63', # token='AgAAAA**AQAAAA**aAAAAA**cJyLVQ**nY+sHZ2PrBmdj6wVnY+sEZ2PrA2dj6wMkoqiC5mHoQmdj6x9nY+seQ**N+QCAA**AAMAAA**nLCwNt4AQt1TRtd2ydNIMuZ2JYnQZKVVYarn41QQfBSqccEDld22ltKr+C/HJTN8AKD4+jn/nIEqtjNMkmh9sxTIa6jVVLAH5sN/93X7gTCmTkOsE/Av612U90nRoyQJ5bX1+NO25tMDZs9U0aTJIwVVu1BAB8/nsjL0pTCWw7KZACJ+a/aQ6swXLvSvOCWIBjFyCaWibKZseT2LoJMvJQmC2QpIuDsQ8cTYozLUYZqC88uKAjo7DNWIvaPVCdwkp/Vux3arR1Asin4ewX1l+LWCamWsXeBiVyaYq/oEUXABgknieVAPEpaFAfSzlrcTNmTWLBDDRwRGI/8hJCwK6/eJWexGrLk7U7p0kRltktNseTckAKT7g1ED4C5gUeQ4/nTHsNQBejUPTzTlwBWTJpwRaBFD7dAlbagH+TKaEJK41Esf/ZpL2599LUMolsO8tBgo0BhtCF/bYtdUUfopksIKNUwPXikadUxx6TurknnTtR1WDD229uUJIIf9BCS68WB56OfDTdXcZ8rdPZ0zdHuw5+BRxrumpFUzTQb5fJeHRDLPtQbLdX5rFPrS+NPJl6Qzi7bWNxUCydNQcIzKv7xLquIPoPx8bD1PRCoQbzjTQsOqhe9PBvLtcJ0Ggve78YjQKb5nDt6YThZ6D+1EOKdcthU03VizDfBKBLJ/NPqktDTx74tsS3l4feAjblGDoQ2RZXefJ9Jk3t+Qc4khlvl4mKpjZ4sCakh4qPWr9H6t3CN80hz5MO1Y7uHPUY61', token='AgAAAA**AQAAAA**aAAAAA**aCRbWA**nY+sHZ2PrBmdj6wVnY+sEZ2PrA2dj6wDmYShCJCHogmdj6x9nY+seQ**N+QCAA**AAMAAA**ktFg8zDYputToOiGDvTfZku93pjbVq3rGn7AR53h1eWAByiTLP+Gd8uKuDof0BQ0prvskMARI/nHxkjFYUp7IUsQkZ6sH/E2UmmvRRwqDHZ/XsXt0+meLqS6ZHMjw7v/CpISJqnZjGChDSYPFRe6RboawkjPi8ial5wEXojlvNWvHl02yT92ih6dTYj44g2xprmmyOSyTYC8l8oG+YLKZ+FPzOj5zxO3Qm8rhVtQwc1KGGtHnthz2ZwHwbeFDh8cVp1qaFQmCaHc27ftM8/to2U22mccon5zRk6yf59EiN88WPzag/ii0XpkwELXWRsHKBfl/9pepWUqWZvgjhQ9jcGQsrYyQfS6T54dLcaJ7a2IrCxOvpdkv4Z26T7CpTpUBbYzG4olJI42jFMZBu5quqOanio2qbHNFov5Jq85jMR9Zx51KlKezNaauIW16upj7P2gvCwDt+E7xCQMoqKDrIyx7J0g0KLHKhSavzeC0vnrF0H9NAfqxVEdYtLUgbR9A8JQagPAYp+vPuMpSEbhc5/fTLBfD6YFSoJ+izMzx0n6Gj2df5n77hS3X1850eLzqzCREtUClZfJ7tcTMR+oU8i0aB75rWDr/sFKsfgW/rAe8hcuMzYBms+rsL4i7ddt5KWfCieMksAfabdUrPF5Owfr/24en/omwHXtBrb39u/oMKTfGZOS2JKyXdbpmpV1YWsJ8eDzxNIN0hJfG6wqrjdEJAUX5dkg4j5L5UXE6deogb9MUYHJgkP3nch5yPfS', # timeout=3 ): self.idomain = domain self.iappid = appid self.idevid = devid self.icertid = certid self.itoken = token # self.timeout= self.mycon = Connection( domain=self.idomain, appid=self.iappid, devid=self.idevid, certid=self.icertid, token=self.itoken, timeout=15, config_file=None, #proxy_host='127.0.0.1', #proxy_port='1080' )
def upload_images(self): for filename in glob.glob('{}*.jpg'.format(self.img_dir)): try: api = Connection(config_file=config.yaml_location, domain="api.ebay.com", debug=config.debug, siteid=config.site_id) # pass in an open file # the Requests module will close the file files = {'file': ('EbayImage', open(filename, 'rb'))} picture_data = { "WarningLevel": "High", "PictureName": "Item_img" } res = api.execute('UploadSiteHostedPictures', picture_data, files=files).dict() self.image_url_arr.append( res["SiteHostedPictureDetails"]["FullURL"]) except ConnectionError as e: print(e) print(e.response.dict())
def test_get_user(item): api = Connection(config_file='ebay.yaml') details_dict = dict() try: response = api.execute('GetUser', { "UserID": item, "DetailLevel": "ReturnAll" }) details = response.reply print details except Exception as e: print e
def GetSessionID(): api = Connection(config_file='ebay.yaml', domain="api.ebay.com") with open("config.yaml") as file: cfg = yaml.load(file) runam = cfg['runame'] request = {'RuName': runam} response = api.execute('GetSessionID', request) webbrowser.open("https://signin.ebay.com/ws/eBayISAPI.dll?SignIn&runame=" + runam + "&SessID=" + response.reply.SessionID) return response.reply.SessionID
def test_get_item(item): api = Connection(config_file='ebay.yaml') details_dict = dict() try: response = api.execute('GetItem', { "ItemID": item, "OutputSelector": "Seller", "DetailLevel": "ReturnAll" }) details = response.reply.Item print details except Exception as e: print e
def query(self, *args): try: api = Connection( config_file=None, appid=settings.EBAY_APP_ID, devid=settings.EBAY_DEV_ID, certid=settings.EBAY_CERT_ID, token=self.user.profile.ebay_token, ) response = api.execute(*args) return response.dict() except ConnectionError as e: return e.response.dict()
def GetActiveItemsbyDay(ddays): api = Connection(config_file='user.yaml', domain="api.ebay.com") currentDT = datetime.datetime.now() startDT = datetime.datetime.now() - datetime.timedelta(days=100) a_bool = True pgnum = 1 EndItemStr = [] while a_bool: request = { 'ErrorLanguage': 'en_US', 'WarningLevel': "High", #'StartTimeFrom':"2020-05-01T00:00:00", 'StartTimeFrom': startDT.strftime("%Y-%m-%dT%H:%M:%S"), 'StartTimeTo': currentDT.strftime("%Y-%m-%dT%H:%M:%S"), 'GranularityLevel': 'Medium', 'Pagination': { 'EntriesPerPage': 200, 'PageNumber': pgnum, } } response = api.execute('GetSellerList', request) if (pgnum < int(response.reply.PaginationResult.TotalNumberOfPages)): pgnum = pgnum + 1 else: a_bool = False if (int(response.reply.ReturnedItemCountActual) > 1): for Item in response.reply.ItemArray.Item: if (Item.SellingStatus.ListingStatus == "Active" and (currentDT - Item.ListingDetails.StartTime).days >= int(ddays)): print( f"Title:{Item.Title}, Price:{Item.SellingStatus.CurrentPrice}, Status:{Item.SellingStatus.ListingStatus},ID:{Item.ItemID}\n" ) EndItemStr.append(Item.ItemID) elif (int(response.reply.ReturnedItemCountActual) > 0): if (response.reply.ItemArray.Item.SellingStatus.ListingStatus == "Active" and (currentDT - Item.ListingDetails.StartTime).days >= int(ddays)): print( f"Title:{Item.Title}, Price:{Item.SellingStatus.CurrentPrice}, Status:{Item.SellingStatus.ListingStatus},ID:{Item.ItemID}\n" ) EndItemStr.append(Item.ItemID) if (a_bool == False): return EndItemStr
def get_user(username, output): """Get info on a user from eBay :param username: user name / id of user we get info on :param output: the file path which contains the info, JSON formatted """ api = Connection(config_file=EBAY_API) response = api.execute('GetUser', {'UserID': username}) user_response_data_object = response.reply.User items_list = convert_rdo_to_dict(user_response_data_object) json.dump(items_list, open(output, 'w')) pprint(items_list)
def list_item(item, images): api = Connection(config_file=config.yaml_location, domain="api.sandbox.ebay.com", debug=config.debug, siteid=config.site_id) request = { "Item": { "Title": "{}".format(item.title), "Country": "GB", "Location": "England", "Site": "UK", # This is new, used, etc 3000 is 'used' # TODO add an option to specify this for parts etc "ConditionID": "3000", "PaymentMethods": "PayPal", "PayPalEmailAddress": "*****@*****.**", "PrimaryCategory": { "CategoryID": "{}".format(item.category_id), }, "Description": "{}".format(item.desc), "ListingDuration": "Days_10", "StartPrice": "{}".format(item.price), "Currency": "GBP", "ReturnPolicy": { "ReturnsAcceptedOption": "ReturnsNotAccepted", }, "PictureDetails": { "PictureURL": [] }, "ShippingDetails": { "ShippingServiceOptions": { "FreeShipping": "True", "ShippingService": "UK_RoyalMailSecondClassStandard" } }, "DispatchTimeMax": "3" } } for img in item.image_url_arr: request["Item"]["PictureDetails"]["PictureURL"].append(img) # If debug mode then only use verify add item else use real add item api call if config.debug: api.execute("AddItem", request) else: api.execute("AddItem", request)
def GetActiveItems(): api = Connection(config_file='user.yaml', domain="api.ebay.com") currentDT = datetime.datetime.now() a_bool = True pgnum = 1 #print(currentDT.strftime("%Y-%m-%dT%H:%M:%S")) while a_bool: request = { 'ErrorLanguage': 'en_US', 'WarningLevel': "High", 'StartTimeFrom': "2020-05-01T00:00:00", 'StartTimeTo': currentDT.strftime("%Y-%m-%dT%H:%M:%S"), 'GranularityLevel': 'Medium', 'Pagination': { 'EntriesPerPage': 200, 'PageNumber': pgnum, } } response = api.execute('GetSellerList', request) if (pgnum < int(response.reply.PaginationResult.TotalNumberOfPages)): pgnum = pgnum + 1 else: a_bool = False if (int(response.reply.ReturnedItemCountActual) > 1): for Item in response.reply.ItemArray.Item: if (Item.SellingStatus.ListingStatus == "Active"): print( f"Title:{Item.Title}, Price:{Item.SellingStatus.CurrentPrice}, Status:{Item.SellingStatus.ListingStatus},ID:{Item.ItemID}, Quantity:: {Item.Quantity}\n" ) else: if (response.reply.ItemArray.Item.SellingStatus.ListingStatus == "Active"): print( f"Title:{Item.Title}, Price:{Item.SellingStatus.CurrentPrice}, Status:{Item.SellingStatus.ListingStatus}, ID:{Item.ItemID}, Quantity: : {Item.Quantity}\n" )
def FetchToken(SessionID): api = Connection(config_file='ebay.yaml', domain="api.ebay.com") request = {'SessionID': SessionID} response = api.execute('FetchToken', request) with open("ebay.yaml") as file: cfg = yaml.load(file) dict_file = { 'name': 'ebay_api_config', 'api.ebay.com': { 'compatability': cfg["api.ebay.com"]["compatability"], 'appid': cfg["api.ebay.com"]["appid"], 'certid': cfg["api.ebay.com"]["certid"], 'devid': cfg["api.ebay.com"]["devid"], 'token': response.reply.eBayAuthToken } } with open('user.yaml', 'w') as file: documents = yaml.dump(dict_file, file, default_flow_style=False) return response.reply.eBayAuthToken
def get_item(item): api = Connection(config_file='ebay.yaml') details_dict = dict() try: response = api.execute('GetItem', {"ItemID": item}) details = response.reply.Item details_dict['itemid'] = item details_dict['userid'] = details.Seller.UserID details_dict['quantitysold'] = details.SellingStatus.QuantitySold details_dict['starttime'] = details.ListingDetails.StartTime details_dict['currentprice'] = details.SellingStatus.CurrentPrice.value try: details_dict[ 'shippingcost'] = details.ShippingDetails.ShippingServiceOptions[ 0].ShippingServiceCost.value except: details_dict['shippingcost'] = 0 details_dict['location'] = details.Location details_dict['hitcount'] = 0 details_dict['categoryname'] = details.PrimaryCategory.CategoryName except Exception as e: print e return details_dict
from ebaysdk.trading import Connection from ebaysdk.exception import ConnectionError from datetime import date import datetime import json, time api = Connection(config_file="ebay.yaml") def user_info(): try: response = api.execute('GetUser', {}) response = json.loads(json.dumps(response.dict())) email = response['User']['Email'] feedback_score = response['User']['FeedbackScore'] registration_date = response['User']['RegistrationDate'] year = int(registration_date.split("-")[0]) month = int(registration_date.split("-")[1]) day = int(registration_date.split("-")[2].split("T")[0]) today = datetime.date.today() register_date = datetime.date(year, month, day) registered = today - register_date registered = str(registered).split(",")[0] return { "Email": email, "Feedback": feedback_score, "Registered": registered } except ConnectionError as e: print(e)
from ebaysdk.trading import Connection import sys sys.path.append("/itemhut/pyebay/common/") from common import * from pprint import pprint api = Connection(config_file='/itemhut/pyebay/ebay.yaml') def verifyAddItem(): """http://www.utilities-online.info/xmltojson/#.UXli2it4avc """ myitem = { "Item": { "Title": "Harry Potter and the Philosopher's Stone", "Description": "This is the first book in the Harry Potter series. In excellent condition!", "PrimaryCategory": { "CategoryID": "377" }, "StartPrice": "10000.0", "CategoryMappingAllowed": "true", "Country": "US", "ConditionID": "3000", "Currency": "USD", "DispatchTimeMax": "3", "ListingDuration": "Days_7", "ListingType": "Chinese", "PaymentMethods": "PayPal",
from ebaysdk.trading import Connection if __name__ == '__main__': try: api = Connection(config_file='ebay.yaml') except ConnectionError as e: print(e) print(e.response.dict()) log.error('Attempting to get an API object failed with %s', e) acitvelist = api.execute('GetMyeBaySelling', { 'ActiveList': True, 'DetailLevel': 'ReturnAll', 'PageNumber': 1 }) print(acitvelist)
def get_connection(instance): print "Constructing eBay API instance for '{}'".format(instance) if instance == 'test': return Connection(domain='api.sandbox.ebay.com') else: raise ValueError("Don't recognise instance '{}'".format(instance))
from item import Item from utilities import b_colors import config from ebaysdk.trading import Connection API = Connection(config_file=config.yaml_location, debug=config.debug, siteid=config.site_id) def start(): print("\nFound {} possible listings\n".format(len(config.subfolders))) for x in config.subfolders: print(" + " + x) print("") for from_file in config.subfolders: create_item(from_file) def create_item(from_file): title = str(raw_input("Enter title for listing: [{}]: ".format(from_file)) or from_file) desc = str( raw_input("Enter description for listing: [{}...] ".format(config.default_desc[:20])) or config.default_desc) price = str(raw_input("Enter price: ")) category = get_categories(title) images = config.parent_directory + "/" + from_file item = Item(title=title, desc=desc, price=price, category_id=category, img_dir=images, posted=False) if item.save() is not None: print("Successfully added item to local database.") else: raise Exception("Something went wrong when adding to the database")
from sqlalchemy.orm import sessionmaker from schema import Base, Link, UPC from secrets import (ACCESS_KEY, SECRET_KEY, ASSOCIATE_TAG, DEVID, PRODUCTION_APPID, PRODUCTION_CERTID, PRODUCTION_TOKEN, SANDBOX_APPID, SANDBOX_CERTID, SANDBOX_TOKEN) engine = create_engine('sqlite:///sqlite3.db') Base.metadata.bind = engine DBSession = sessionmaker(bind=engine) session = DBSession() amazon = AmazonAPI(ACCESS_KEY, SECRET_KEY, ASSOCIATE_TAG) production = Connection(devid=DEVID, appid=PRODUCTION_APPID, certid=PRODUCTION_CERTID, token=PRODUCTION_TOKEN, config_file=None) sandbox = Connection(domain='api.sandbox.ebay.com', devid=DEVID, appid=SANDBOX_APPID, certid=SANDBOX_CERTID, token=SANDBOX_TOKEN, config_file=None) SEARCH_INDEX = [ 'All', 'UnboxVideo', 'Appliances', 'MobileApps', 'ArtsAndCrafts', 'Automotive', 'Baby', 'Beauty', 'Books', 'Music', 'Wireless', 'Fashion' 'FashionBaby', 'FashionBoys', 'FashionGirls', 'FashionMen', 'FashionWomen' 'Collectibles', 'PCHardware', 'MP3Downloads', 'Electronics', 'GiftCards', 'Grocery', 'HealthPersonalCare', 'Industrial', 'KindleStore', 'Luggage',
def AddFixedPriceItemShoe(shoe_info_class, post_debug=True, ebay_debug=True): Variation_list = [] for size in shoe_info_class.SIZES: Variation_list.append({ "Quantity": "1", "StartPrice": str(shoe_info_class.PRICE), "VariationSpecifics": { "NameValueList": { "Name": "US Shoe Size (Men's)", "Value": str(size) } } }) api = Connection(config_file="ebay.yaml", debug=True) request = { "Item": { "BuyerRequirementDetails": { "ShipToRegistrationCountry": True }, "Title": str(shoe_info_class.BRAND + str(" ") + shoe_info_class.MODEL), "Country": "US", "Location": "USA", "Site": "US", "ConditionID": "1000", "PaymentMethods": "PayPal", "PictureDetails": { "PictureURL": shoe_info_class.PICTURES }, "PayPalEmailAddress": "*****@*****.**", "PrimaryCategory": { "CategoryID": "24087" }, "ProductListingDetails": { "BrandMPN": { "Brand": str(shoe_info_class.BRAND), "MPN": str(shoe_info_class.SKU) } }, "Description": html_description(shoe_info_class), "ListingDuration": "Days_10", "StartPrice": str(shoe_info_class.PRICE), "Currency": "USD", "ReturnPolicy": { "ReturnsAcceptedOption": "ReturnsNotAccepted" }, "ShippingDetails": { "ShippingServiceOptions": { "FreeShipping": "True", "ShippingService": "USPSMedia" }, "ExcludeShipToLocation": "none" }, "ItemSpecifics": { "NameValueList": [{ "Name": "Brand", "Value": str(shoe_info_class.BRAND) }, { "Name": "Style", "Value": "Fashion Shoe" }] }, "Variations": { "VariationSpecificsSet": { "NameValueList": { "Name": "US Shoe Size (Men's)", "Value": [ 6.0, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5, 10.0, 10.5, 11.0, 11.5, 12.0, 12.5, 13.0, 13.5, 14.0, 14.5, 15.0, 15.5, 16.0 ], } }, "Variation": Variation_list }, "DispatchTimeMax": '5', } } output = api.execute("AddFixedPriceItem", request) ItemID = output.reply.ItemID if post_debug: display_info(shoe_info_class) return ItemID
def connect_and_execute(self): '''''' self.api = Connection(config_file='ebay.yaml', domain='api.sandbox.ebay.com', debug=False)
# "FreeShipping": "True", # "ShippingService": "USPSMedia" # } # }, # "DispatchTimeMax": "3" # } # } # # api.execute("AddItem", request) #!/usr/bin/env python3 from ebaysdk.trading import Connection if __name__ == '__main__': api = Connection(config_file="ebay.yaml", domain="api.sandbox.ebay.com", debug=True) request = { "Item": { # geography "Country": "JP", "Location": "Tokyo", "Site": "US", # payments "AutoPay": "True", "BestOfferDetails": { "BestOfferEnabled": "True", }, # "CrossBorderTrade": "UK", # This costs $0.50: https://www.ebay.com/help/selling/fees-credits-invoices/selling-fees?id=4364 "Currency": "USD",