ebay-ml-lister/rand_revise.py

104 lines
2.7 KiB
Python
Raw Normal View History

import ebaysdk
import json
import requests
import random
from ebaysdk.trading import Connection as Trading
from ebaysdk.finding import Connection as Finding
from ebaysdk.shopping import Connection as Shopping
import concurrent.futures
import config as cfg
2022-01-29 01:05:54 +00:00
import store_ids
import ebay_api
2022-01-29 01:05:54 +00:00
tapi = Trading(config_file='ebay.yaml')
2022-01-29 01:05:54 +00:00
def revised_price(id, original_prices):
percent = (random.randint(95, 105))/100
rev_price = original_prices[id]*percent
rev_price = str(round(rev_price, 2))
return rev_price
def revise_item(id, rev_price):
response = tapi.execute(
'ReviseItem', {
'item': {
'ItemID': id,
'StartPrice':rev_price
}
}
)
def revise_items():
with open('original_prices.txt') as f:
original_prices = json.load(f)
for id in original_prices:
rev_price = revised_price(id, original_prices)
revise_item(id, rev_price)
def get_prices(twenty_id):
'''
Gets raw JSON data from multiple live listings given multiple itemIds
'''
with open('temp_oauth_token.txt') as f:
access_token = json.load(f)
headers = {
"X-EBAY-API-IAF-TOKEN":access_token,
"version":"671",
}
url = "https://open.api.ebay.com/shopping?&callname=GetMultipleItems&responseencoding=JSON&ItemID="+twenty_id
try:
response = requests.get(url, headers=headers,timeout=24)
response.raise_for_status()
response = response.json()
item = response['Item']
except (requests.exceptions.RequestException, KeyError):
print('connection error. IP limit possibly exceeded')
print(response)
return # this returns NoneType. Handled at get_prices_thread
id_price_dict = {item['ItemID']:item['ConvertedCurrentPrice']['Value'] for item in item}
return id_price_dict
def get_prices_thread(twenty_ids_list):
'''
Runs get_prices in multiple threads
'''
id_price_dict = {}
with concurrent.futures.ThreadPoolExecutor() as executor:
for future in executor.map(get_prices, twenty_ids_list):
if future is not None:
id_price_dict.update(future)
else:
print('response is None')
break
return id_price_dict
def main():
with open('ebay_ids.txt') as f:
ids = json.load(f)
twenty_id_list = [','.join(ids[n:n+20]) for n in list(range(0,
len(ids), 20))]
ids = store_ids.main() # gets your store ids for all listings
ebay_api.getAuthToken() # updates your Oauth Token
id_price_dict = get_prices_thread(twenty_id_list)
return id_price_dict
if __name__=="__main__":
main()