I have pasted some of my code below. I am using threads.
How can I save the values
getSellerCountry(html)
Run
and
sellerId
Run
in a global, thread-safe variable (table), so that I can later when the threads
have finished, write the results into a database? Must I use channels?
proc getSellerCountry(html: string): string =
let xml = parseHTML(html)
let element =
xml.querySelectorAll("div.a-row.a-spacing-none.indent-left > span")
return element[element.high].innerText.strip
proc getContent(sellerId: string, url: string, ip: string, user: string, i:
int, userAgent: string) {.thread.} =
let headers = setHeader("https://www.google.fr", userAgent)
var myProxy = newProxy(ip, user)
var client = newHttpClient(proxy=myProxy, headers=headers)
let r = client.request(url).body
let html = uncompress(r)
try:
echo getSellerCountry(html), sellerId
except Exception as e:
echo e.msg
echo "Error ", sellerId
for sellerId in sellerIds:
let ua = fk.UserAgent()
url = "https://www.amazon.fr/sp?ie=UTF8&seller=" & sellerId &
"&ref_=dp_merchant_link"
spawn getContent(sellerId, url, "http://" & ip[i], userPass[i], i,
ua.random.to(string))
i += 1
sync()
Run