I need to build a feature in my app, where i need to show some content based on zip-code. Is there any way to find user location and ultimately find zip code?
I don't know if there is a inbuilt way. But, you can use external API. you can find zip code by Passing a IP Address. This is not a good way. Currently, Roku not Blocking any External API may be in Future like IOS. I hope this is helpful
@chaklasiyanikun Thanks for the reply. This is the same i have tried, but results are not very accurate with ip address.
@Manvendra It depends on API. I tried many API. and Found There is not a single one that gives an accurate result. But, I suggest one API which is better than all other. I'm not sure this is giving accurate result. But better than other API. I hope this is helpful.
This is very doable but as you and another user said, you need an external api and more importantly, one that is reliable in accuracy.
I can only recommend one api that has been flawless in which I use for weather features on the Roku and web apps.
You can see a demo with the response on page load and get a free api at https://ipstack.com/
Now we add a little bit of. code.
deviceInfo = CreateObject("roDeviceInfo") ip = deviceInfo.GetExternalIp() url = "http://api.ipstack.com/" + ip + "?access_key=yourIpStacksApiKey" m.locationData = createObject("roSGNode", "locationDataReader") m.locationData.contenturi = url m.locationData.observeField("content", "locationDataResponse") m.locationData.control = "RUN"
Create a task
<?xml version = "1.0" encoding = "utf-8" ?> <component name = "locationDataReader" extends = "Task" > <interface> <field id = "contenturi" type = "uri" /> <field id = "content" type = "node" /> </interface> <script type = "text/brightscript" > <![CDATA[ sub init() m.top.functionName = "getContent" end sub ' ********************************************** sub getContent() apiurl = m.top.url m.port = CreateObject ("roMessagePort") dataRequest = CreateObject("roUrlTransfer") dataRequest.setURL(apiurl) dataRequest.EnableEncodings(true) https = "https:" if LCase(Left(apiurl, Len(https))) = https dataRequest.SetCertificatesFile ("common:/certs/ca-bundle.crt") 'dataRequest.AddHeader ("X-Roku-Reserved-Dev-Id", "") dataRequest.InitClientCertificates () end if response = dataRequest.getToString()
'the data will returned as json and you can decide to parse or use regex to get the zipcode
zipRegex = CreateObject ("roRegex", "zip.:.(\d+).,.latitude", "")
if zipRegex.isMatch(response)
zipcode = zipRegex.Match(response)
'if the regex returned data
print zipcode
end if
'print the whole json response
print response end sub ]]> </script> </component>
@norcaljohnny Thank you so much. I will try this for sure.
We’re upgrading Roku Community to bring you a faster, more mobile-friendly experience. You may notice limited functionality or read-only access during this time. Read more here.
Planned Downtime:
Community will be unavailable for up to 24–48 hours during the upgrade window during the week of May 19th and you may notice reduced functionality.
In the meantime, for additional assistance, visit our Support Site.
We're sorry for this disruption — we’re excited to share what’s next!