Ubtech Alpha 1 Bluetooth icon Ubtech Alpha 1 Bluetooth Bluetooth control for UBTech Alpha1 servos via ARC: map Vx to servo IDs, enable servos, and integrate with ARC movement & LEDs. Try it →
Asked
GetRSS 403 and empty arrays on Six

Getrss 403 And Empty Arrays On Six

Running a Six Hexapod (EZ-B v4 over WiFi in client mode) from ARC on Windows, I added the GetRSS robot skill to have Six read a few headlines while doing a small Auto Position animation; I’m triggering the control with a script, then checking $RSSSuccess and, if true, speaking the first three $RSSTitles, but I’m seeing inconsistent results depending on the feed and sometimes timing issues where the arrays aren’t populated yet. For example, https://feeds.npr.org/1001/rss.xml usually works and fills $RSSTitles/$RSSDescriptions as expected, but https://feeds.bbci.co.uk/news/rss.xml fails immediately with $RSSSuccess=0 and $RSSErrorMsg="The remote server returned an error: (403) Forbidden", and https://w1.weather.gov/xml/current_obs/KSEA.rss sometimes throws $RSSErrorMsg about "Could not create SSL/TLS secure channel"; I’ve tried http vs https where available, multiple networks, disabling Windows firewall, moving the GetRSS skill up in the project, validating the feeds (they’re valid RSS, not Atom), and adding a Sleep after sending the ControlCommand, but even when $RSSSuccess flips to 1 the arrays can occasionally still be empty if read too soon, which makes Six either say nothing or speak the previous feed’s data. Is there a way to set or override the User-Agent/TLS settings that GetRSS uses to avoid 403/TLS errors, and what is the recommended pattern in ARC (EZ-Script or JavaScript) to deterministically wait until $RSSTitles/$RSSDescriptions are populated before using them?



Related Hardware (view all EZB hardware)
Six Hexapod by EZ-Robot
Six hexapod robot kit: Canadian-designed, customizable WiFi 6-legged platform with 12 servos/12 DOF for dynamic motion. Available at EZ-Robot.
Wi-Fi / USB
Servos 24
Camera
Audio
UART 3
I2C
ADC 8
Digital 24

Related Robot Skill (view all robot skills)
Getrss by Synthiam
Fetch RSS via GetRSS command; populates $RSSSuccess, $RSSErrorMsg and arrays $RSSTitles, $RSSDescriptions, $RSSLinks, $RSSDates for scripts.

ARC Pro

Upgrade to ARC Pro

With ARC Pro, your robot is not just a machine; it's your creative partner in the journey of technological exploration.

Author Avatar
PRO
Canada
Twitter YouTube GitHub
#1  

Yes - what you’re seeing is consistent with feed-side restrictions plus a bit of async timing in ARC.

Why this happens

1) 403 Forbidden

Some RSS providers block requests that look like generic bot traffic or require a browser-like User-Agent header. If GetRSS doesn’t send a UA the server likes, you can get 403 even though the feed is valid.

2) TLS / secure channel error

That usually means the feed’s HTTPS setup requires a TLS version/cipher that your current Windows/.NET environment isn’t negotiating successfully.

3) Empty arrays / stale data

ControlCommand("GetRSS", "get", ...) starts the request, but the population of:

  • $RSSSuccess
  • $RSSErrorMsg
  • $RSSTitles
  • $RSSDescriptions
  • $RSSLinks
  • $RSSDates

happens after the request completes. If you read them too soon, you can catch the previous values or an empty state.


Can you override User-Agent or TLS in GetRSS?

Not directly in the GetRSS skill UI.
There isn’t a built-in setting in the skill to customize the request headers or TLS behavior.

Practical options

  • Use a feed endpoint that allows generic clients
  • Use an intermediary script/service that fetches the feed and exposes it in a friendlier format
  • If you need full control, create a custom robot skill that performs the HTTP request with your own headers/TLS handling

If you want that route, ARC supports creating custom robot skills here:
https://synthiam.com/Support/Create-Robot-Skill/Overview


The safest approach is:

  1. Trigger the GetRSS command
  2. Wait until $RSSSuccess is no longer -1/unset and the skill has finished
  3. Confirm the array has items
  4. Only then speak the values

Since ARC scripting is synchronous, a simple sleep() loop is usually the most reliable.

JavaScript example

ControlCommand("GetRSS", "get", "https://feeds.npr.org/1001/rss.xml";);

let tries = 0;
while (tries < 50) {
  let success = getVar("$RSSSuccess", "");
  let title0 = getVar("$RSSTitles[0]", "");

  if (success == "1" && title0 != "") {
    break;
  }

  if (success == "0") {
    print(getVar("$RSSErrorMsg"));
    break;
  }

  sleep(200);
  tries++;
}

if (getVar("$RSSSuccess") == "1") {
  let title1 = getVar("$RSSTitles[0]", "");
  let title2 = getVar("$RSSTitles[1]", "");
  let title3 = getVar("$RSSTitles[2]", "");

  if (title1 != "") Audio.say(title1);
  if (title2 != "") Audio.say(title2);
  if (title3 != "") Audio.say(title3);
} else {
  Audio.say("RSS failed.");
}

Even better: use an explicit "data ready" check

Because some feeds may succeed but still return no usable items, check both:

  • $RSSSuccess == 1
  • $RSSTitles[0] != ""

That prevents speaking stale or empty results.


If you want to avoid stale previous values

Before requesting a new feed, clear or overwrite your own tracking variable, for example:

setVar("$MyRSSReady", "0");
ControlCommand("GetRSS", "get", "https://feeds.npr.org/1001/rss.xml";);

Then set your flag only when the arrays are populated.


Why bbc.co.uk is failing

BBC and some government/weather sources often add:

  • anti-bot filtering
  • stricter TLS requirements
  • redirects or headers that generic request libraries don’t always like

So this is usually feed-policy related, not a Six or WiFi issue.


Best recommendation for your use case

For Six doing a small animation while reading headlines, I’d suggest:

  • Use a feed that is known to work consistently
  • Wrap the RSS call in a wait loop
  • Only speak when $RSSTitles[0] exists
  • Keep the RSS request and animation in separate steps so the speech doesn’t start early

If you need more control

If your goal is to reliably pull feeds with custom headers, I’d strongly consider a small custom robot skill or a tiny local web service that ARC calls. That gives you control over:

  • User-Agent
  • redirects
  • TLS behavior
  • parsing/cleanup before ARC speaks it

And if you’re already writing script logic, the ARC AI Assistant can be handy for rewriting the wait logic or converting your current EZ-Script into JavaScript directly inside ARC:
https://synthiam.com/Products/AI-Assistant

If you want, I can help you write a robust JavaScript helper for ARC that:

  1. fetches RSS,
  2. waits deterministically,
  3. retries on failure,
  4. and speaks the first 3 headlines without using stale data.
I am a customer support AI and still learning. Please verify important answers in our support documentation. For advanced AI features, use the AI Script Agent built into ARC.