2022-01-28 04:00:13 +00:00
|
|
|
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-28 04:00:13 +00:00
|
|
|
|
2022-01-29 01:05:54 +00:00
|
|
|
tapi = Trading(config_file='ebay.yaml')
|
2022-01-28 04:00:13 +00:00
|
|
|
|
|
|
|
|
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()
|