Skip to content
Permalink
Browse files
  • Loading branch information
wilsonj12 committed Nov 26, 2021
2 parents e978a07 + d2f3588 commit a5800d5c1fafd6d9176cba2df1abbc95d0a582bf
Showing 1 changed file with 48 additions and 18 deletions.
@@ -1,5 +1,8 @@
import json #PYTHON STANDARD LIBRARY - https://docs.python.org/3/library/json.html
import urllib.error #URLLIB v3.9 - THIRD PARTY LIBRARY - https://github.com/urllib3/urllib3
#PYTHON STANDARD LIBRARY - https://docs.python.org/3/library/json.html - USED TO READ, WRITE JSON FILES STORKING MARKET DATA FROM API
import json
#URLLIB 3.9 - THIRD PARTY LIBRARY - https://github.com/urllib3/urllib3 - USED TO CATCH AND HANDLE HTTP ERRORS/EXCEPTIONS
import urllib.error
#URLLIB 3.9 - THIRD PARTY LIBRARY - https://github.com/urllib3/urllib3 - USED TO REQUEST JSON DATA FROM API URL
from urllib.request import *

release_state = True
@@ -8,27 +11,33 @@ api_key = "x-api-key=9w3MIVAGdu84n6Db"
api_url = "https://tarkov-market.com/api/v1/"


#JSON OBJECT, FILE SCOPE, STORES MARKET DATA FROM API/OFFLINE JSON FILE BACKUP
#PYTHON DICTIONARY, FILE SCOPE, STORES MARKET DATA FROM API/OFFLINE JSON FILE BACKUP
marketData = None


#RETRIEVES MARKET DATA FROM API AS TYPE JSON OBJECT
#RETURNS MARKET DATA AS TYPE JSON OBJECT
#RETRIEVES MARKET DATA FROM API AS TYPE JSON FILE
#RETURNS MARKET DATA AS TYPE PYTHON DICTIONARY
def FetchOnlineMarketData():
try:
'''
REFERENCE (LINE NUMBERS: 32, 33):
ONLINE TUTORIAL - https://www.geeksforgeeks.org/how-to-read-a-json-response-from-a-link-in-python/ - HOW TO OPEN JSON FILE FROM API
YOUTUBE TUTORIAL - https://youtu.be/aj4L7U7alNU?t=159 - HOW TO OPEN JSON FILE AND PARSE TO PYTHON DICTIONARY
'''

#STORES DATA RETURNED FROM API (JSON FILE) USING "urlopen" IN "apiJsonFile"
#LOADS & STORES JSON FILE (apiJsonFile) AS JSON OBJECT (online_marketData)
#LOADS & STORES JSON FILE (apiJsonFile) AS PYTHON DICTIONARY (online_marketData)
print("NOTICE: ATTEMPTING TO CONNECT TO API. . .")
apiJsonFile = urlopen(api_url + "items/all?&" + api_key)
online_marketData = json.load(apiJsonFile)
print("NOTICE: API CONNECTION SUCCESSFUL")

#SAVES JSON OBJECT (CONTAINING LIVE DATA) AS JSON FILE (FOR OFFLINE USE)
SaveOnlineMarketData(online_marketData)

print("\nRelease State = " + str(release_state) + "! API Connected, Market Data Up-To-Date\n")

#RETURNS JSON OBJECT, TO BE STORED IN JSON OBJECT IN FILE SCOPE
#RETURNS PYTHON DICTIONARY, TO BE STORED IN PYTHON DICTIONARY IN FILE SCOPE
return online_marketData

#HANDLES HTTP RELATED ERRORS, "aka. HTTP ERROR 249: TOO MANY REQUEST"
@@ -38,18 +47,26 @@ def FetchOnlineMarketData():
return FetchOfflineMarketData()

#RETRIEVES MARKET DATA FROM SAVED JSON FILE
#REUTRNS MARKET DATA AS JSON OBJECT
#RETURNS MARKET DATA AS PYTHON DICTIONARY
def FetchOfflineMarketData():
print("Release State = " + str(release_state) + "!, API Not Connected, Market Data Outdated\n")

#LOADS JSON FILE, RETURNS IT AS A JSON OBJECT TO BE STORED IN JSON OBJECT IN FILE SCOPE
#LOADS JSON FILE, RETURNS IT AS A PYTHON DICTIONARY TO BE STORED IN PYTHON DICTIONARY IN FILE SCOPE
offlineMarketData_Json_File = open("offlineMarketData.json", encoding="utf-8")
return json.load(offlineMarketData_Json_File)

#TAKES MARKET DATA FROM API AS TYPE JSON OBJECT
#SAVES JSON OBJECT AS JSON FILE (FOR USE WHEN API CONNECTION FAILS)
#TAKES MARKET DATA FROM API AS TYPE PYTHON DICTIONARY
#SAVES PYTHON DICTIONARY AS JSON FILE (FOR USE WHEN API CONNECTION FAILS)
def SaveOnlineMarketData(updatedMarketData):
try:
'''
REFERENCE (LINE NUMBERS: 70, 71):
ONLINE TUTORIAL - https://stackoverflow.com/questions/12309269/how-do-i-write-json-data-to-a-file - HOW TO SAVE PYTHON DICTIONARY AS JSON FILE
MODIFIED CODE:
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
'''
offlineMarketData_Json_File = open("offlineMarketData.json", "w", encoding="utf-8")
json.dump(updatedMarketData, offlineMarketData_Json_File, ensure_ascii = False)
print("NOTICE: OFFLINE MARKET DATA UPDATED & SAVED")
@@ -68,17 +85,30 @@ else:

#TAKES ITEM NAME AS TYPE str AND A USERS MESSAGE AS TYPE str
#RETURNS WETHER THE ITEM NAME IS IN THE USER MESSAGE AS TYPE bool
def marketItem_In_userMessage(p_marketItemShortName, p_userMessage):
if (p_marketItemShortName.replace("-", "").replace(" ", "").lower() in p_userMessage.replace("-", "").replace(" ", "").lower()):
def MarketItem_In_userMessage(p_marketItemShortName, p_userMessage):
if (p_marketItemShortName.replace("-", "").lower() in p_userMessage.replace("-", "").lower()):
return True
return False

#TAKES ITEM NAME AS TYPE str
#RETURNS WETHER THE ITEM TAG CORRESPONDS TO PREVALIDATED TAGS (PROGRAM ONLY HANDLES CERTAIN ITEMS) AS TYPE bool
def MarketItemTagValid(p_marketItemShortName):
validTags = ["Weapon", "Ammo", "Armor_vests"]
for marketItem in marketData:
if (p_marketItemShortName == marketItem["shortName"]):
for tag in validTags:
if (tag in marketItem["tags"]):
return True
return False


#TAKES A USERS MESSAGES AS TYPE str
#RETURNS WETHER AN ITEM NAME (STORED IN THE API DATA) IS PRESENT IN THE USERS MESSAGE AS TYPE bool
def isItemNamePresent(p_userMessage):
for marketItem in marketData:
if (marketItem_In_userMessage(marketItem["shortName"], p_userMessage)):
return True
if (MarketItem_In_userMessage(marketItem["shortName"], p_userMessage)):
if (MarketItemTagValid(marketItem["shortName"])):
return True

#ITEM NAME NOT PRESENT
return False
@@ -87,7 +117,7 @@ def isItemNamePresent(p_userMessage):
#RETURNS ITEM NAME (AS IT APPEARS IN API DATA) AS TYPE str OR bool = False
def getItemName(p_userMessage):
for marketItem in marketData:
if (marketItem_In_userMessage(marketItem["shortName"], p_userMessage)):
if (MarketItem_In_userMessage(marketItem["shortName"], p_userMessage)):
return marketItem["shortName"]

#ITEM NAME NOT PRESENT
@@ -117,4 +147,4 @@ def getItemTraderName(p_itemName):
return marketItem["traderName"]

#ITEM NAME NOT FOUND
return False
return False

0 comments on commit a5800d5

Please sign in to comment.