Graqr / Threshr

java sdk for target's grocery api
GNU General Public License v3.0
1 stars 2 forks source link

introduce Target Store location queries #26

Closed Jonathan-Zollinger closed 4 months ago

Jonathan-Zollinger commented 8 months ago

Summary

I want to be able to query what target stores are available by meaningful parameters as well as by ID.

Proposed Solution

Alternative

a whole new tool could be dedicated to this, but I dont think that's necessary since this could also be re-used when wanting to include target store locations as an option in a products summary query.

Additional Context

I saw this api call when on target's site. I've formatted it as a PowerShell call:

$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$session.Cookies.Add((New-Object System.Net.Cookie("visitorId", "0187CE61782B0201A47AAD8525AD73D8", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("UserLocation", "90000|-34.53981781|-56.24217987|Canelones|", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("refreshToken", "TGT.6e9e9a5079764af485c3c84e290db42e-l", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("fiatsCookie", "DSI_1750|DSN_Centerville|DSZ_84014", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("3YCzT93n", "A80lm86HAQAAZCxVaAqvwuzmKaYUSliXTW2t_vIG7iImRX1fmGRSj4n6d_KzARgLRYScuBZ2wH8AAEB3AAAAAA|1|1|db7ab3fc8963112a3c533f13eade5fa7b216934b", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("crl8.fpcuid", "1a14e6a6-217f-4fa4-8702-fde328bf34e0", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("TealeafAkaSid", "OQgukEOtAgRaveFAHjfORF48s-dAMrcj", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("sapphire", "1", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("mid", "1557340908", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("_ga_845PXTZEFH", "GS1.1.1698521732.3.0.1698521732.0.0.0", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("_ga", "GA1.1.1571384370.1697591313", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("_ga_22RJ205MYX", "GS1.1.dc81d81b-0809-5a41-b429-2d715613fd06.3.1.1699637026.0.0.0", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("ESTN", "1", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("cio", "4om7ynsVU/d087Ggy+Kq94/Buh95gHmFo3UjK2uM8Vk=", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("_ga_MDF55NMH0F", "GS1.1.1698519859.1.1.1698520217.0.0.0", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("isdc", "e77ee525-6cf1-4a23-90c9-7500b85f3935", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("_ga_N15GRPKXME", "GS1.1.1699636615.2.1.1699637037.49.0.0", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("_gcl_au", "1.1.1777356993.1699312525", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("sfmc", "", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("ffsession", "{`"sessionHash`":`"1b3c06ba9fc33b1698087130912`",`"prevPageName`":`"home page`",`"prevPageType`":`"home page`",`"prevPageUrl`":`"https://www.target.com/`",`"sessionHit`":152,`"prevSearchTerm`":`" our generation doll `",`"lnkClickContent`":null,`"lnkClickList`":null,`"lnkClickNav`":null,`"lnkPromotions`":null,`"lnkClickRecommendation`":null}", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("accessToken", "eyJraWQiOiJlYXMyIiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiIxNTU3MzQwOTA4IiwiaXNzIjoiTUk2IiwiZXhwIjoxNjk5NzIyOTI2LCJpYXQiOjE2OTk2MzY1MjYsImp0aSI6IlRHVC42ZTllOWE1MDc5NzY0YWY0ODVjM2M4NGUyOTBkYjQyZS1sIiwic2t5IjoiZWFzMiIsInN1dCI6IlIiLCJkaWQiOiI0YTg4Njg5Yjg0MGRjODMyOWU5OGUzNDc4NWJjMGI4ZmZhZDQ5MzdkZDlmMjRlNjVhZGM2MGM0ZWJjZDA1Y2VlIiwiZWlkIjoiY291cnRuZXkuaG5zbkBnbWFpbC5jb20iLCJzY28iOiJlY29tLmxvdyxvcGVuaWQiLCJjbGkiOiJlY29tLXdlYi0xLjAuMCIsInR2MSI6IjcwMDI1MjQ5IiwiYXNsIjoiTCJ9.r14wGTh6NIUzcXy2xhTX-QFteOOAmoNPlji_NCkOJGR9GQaq9J_cGVMHW3gc_cTiz2gne-WVt64r2C2eE50I66uy5f7yLaV2v_okXVms0onQAceNJRtTJZvJern61EaqrFPRPmtAYkU1pQTSv-CkODo1Y2iSFjs-uGoSNAp46EXBjMTIB20e3FZVD_KGgOaKJL16LytlpKEUFiLgXpzc8KNwPKYcJ2uMLJJ5TCsA-MmkWU48VvwgTwOnvM_M16q6UHaQsaNnLjKymdNdGQrmbLmyXDTs25G5xQcOx7OdmgLoa_5D-TV620PLckJTFNvHSZtU6K1UrqaW6BJu4C_qKg", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("idToken", "eyJhbGciOiJub25lIn0.eyJzdWIiOiIxNTU3MzQwOTA4IiwiaXNzIjoiTUk2IiwiZXhwIjoxNjk5NzIyOTI2LCJpYXQiOjE2OTk2MzY1MjYsImFzcyI6IkwiLCJzdXQiOiJSIiwiY2xpIjoiZWNvbS13ZWItMS4wLjAiLCJwcm8iOnsiZm4iOiJKb25hdGhhbiIsImVtIjoiY291KioqQCoqKiIsInBoIjp0cnVlLCJsZWQiOm51bGwsImx0eSI6dHJ1ZX19.", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("usprivacy", "1NN-", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("stateprivacycontrols", "N", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("hasApp", "true", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("loyaltyid", "tly.6aa1fd1f0a884c2a9ce7cee9872fc5b1", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("mystate", "1698094527488", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("login-session", "YS7xQzDEmbcVxkdSBiOh_TaJm6-hqlpnwN4vMFvCoDVCrvkrqChTQJkBPur0HEwG", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("IR_gbd", "target.com", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("IR_10925", "1698519918824|0|1698519853500||", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("sessionId", "118e0e728571911698701505357", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("sddStore", "DSI_2123|DSN_South Jordan|DSZ_84096", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("_mitata", "NDllODE5YjM2OGYxOWNmNWFlZTkwZDg3M2RjYjIxOWUxZjM5ZmRlOTFmZGE5YTJmYTczMWE2ODhiMTA1MWYyNA==_/@#/1699645389_/@#/c4CY6dZ5TGyHj5Dx_/@#/NGMxOWY0YjkyMGRiMTY0ZTc4NDFhNWM5NTg4ZjY3YjhiZWY5YzBjZmQwNGQ3MzdkMDU4ZDNhZDBhNmNiMjczNA==_/@#/000", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("ci_pixmgr", "other", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("_ce.s", "v~994f5b7890a5f6fd820b3cb99f32a5c8d7e8f65f~lcw~1699637074715~lva~1699636615421~vpv~0~v11.fhb~1699636616165~v11.lhb~1699637026789~v11.cs~316943~v11.s~f30b0860-7fec-11ee-b6df-796e859b0d08~v11.sla~1699637074840~v11.send~1699637074715~lcw~1699637074841", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("_ce.irv", "false", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("cebs", "1", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("_ce.clock_event", "1", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("_ce.clock_data", "22,73.63.66.230,1,74df78701189cc7205ee6a2acdc2e292", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("cebsp_", "9", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("_uetsid", "af29a4f07fed11eea290cbc8edd276b6", "/", "redsky.target.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("_uetvid", "d656f930e6bf11edbcba39b95b3a0674", "/", "redsky.target.com")))
Invoke-WebRequest -UseBasicParsing -Uri "https://redsky.target.com/redsky_aggregations/v1/web/nearby_stores_v1?limit=20&within=100&place=84096&key=8df66ea1e1fc070a6ea99e942431c9cd67a80f02&channel=WEB&page=%2Fs%2F" `
-WebSession $session `
-UserAgent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0" `
-Headers @{
"Accept" = "application/json"
  "Accept-Language" = "en-US,en;q=0.5"
  "Accept-Encoding" = "gzip, deflate, br"
  "Referer" = "https://www.target.com/store-locator/find-stores"
  "Origin" = "https://www.target.com"
  "Sec-Fetch-Dest" = "empty"
  "Sec-Fetch-Mode" = "cors"
  "Sec-Fetch-Site" = "same-site"
  "Pragma" = "no-cache"
  "Cache-Control" = "no-cache"
  "TE" = "trailers"
}

Requirements

Code of Conduct

Jonathan-Zollinger commented 5 months ago
Jonathan-Zollinger commented 4 months ago

addressed with #68