运行时依赖
版本
Grupo Venus v1.0.0 — Initial Release - Fetch free astrological charts, transit forecasts, and compatibility reports using grupovenus.com. - Manage multiple people in memory; compare and analyze their charts conversationally. - Includes detailed instructions for registering people, city lookup, and handling sessions/cookies. - Provides bash/curl examples for all key features: person creation, natal chart images, and transit forecasts. - No API key required; operates via public endpoints and session cookies. - Unofficial integration — uses grupovenus.com’s public free tier as-is.
安装命令
点击复制技能文档
Use this skill to fetch free astrological charts, transit forecasts, and compatibility reports from grupovenus.com — a classic ASP astrology platform with a rich free tier. Manage multiple people in memory and analyze charts conversationally.
Unofficial skill. Not affiliated with or endorsed by Grupo Venus. Uses the public free tier of grupovenus.com as-is.
Base URL: https://grupovenus.com
否 API 键 必填. Data 会话-Cookie based; person data stored locally 在...中 memory.
People Storage
All person data lives in your memory file. Load it before any operation:
~/.openclaw/workspace/memory/grupo-venus.json
Structure (we use Luis Alberto Spinetta as the example throughout this skill — because he's from another planet):
{
"people": {
"spinetta": {
"name": "Luis Alberto Spinetta",
"birthdate": "1/23/1950 4:35:00 PM",
"city": "Buenos Aires",
"country": "Argentina",
"sex": "H",
"tz_offset": "3",
"lat_dms": "34S35",
"lon_dms": "58W22",
"lat_decimal": -34.5833,
"lon_decimal": 58.3667,
"style": "deep"
}
}
}
sex: H = Hombre (male), V = Varón/Mujer — 使用 H 对于 male, V 对于 female.
tz_offset: Hours 从 UTC, 签名 inverted: 3 = UTC-3 (Argentina), -1 = UTC+1 (Madrid).
lat_dms / lon_dms: 34S35 = 34°35′S, 58W22 = 58°22′W. N/S 和 E/W explicit.
样式: Communication 样式 preference — casual, deep, 或 practical. See Voice & 样式 section.
If the file doesn't exist yet, create it with {"people": {}}.
Adding Person
Step 1 — Look up city coordinates
curl -s "https://grupovenus.com/buscaciudjson.asp?q=CITY&pais=COUNTRY"
Example:
curl -s "https://grupovenus.com/buscaciudjson.asp?q=Bahia+Blanca&pais=Argentina"
# → [{"label":"Bahia Blanca, Argentina"}]
This confirms the city/country string the server recognises. Use the exact spelling returned.
Step 2 — 注册 person 到 获取 coordinates + timezone
The server requires a properly established session with Referer headers. Always use a cookie jar (-c/-b) — manually passing a single ASPSESSION cookie will result in "session expired" errors.
COOKIEJAR=$(mktemp)# 2a. Establish session
curl -s -c "$COOKIEJAR" -b "$COOKIEJAR" "https://grupovenus.com/info.asp" \
-H "User-Agent: Mozilla/5.0" > /dev/null
# 2b. Load the registration form (sets server-side session state)
curl -s -c "$COOKIEJAR" -b "$COOKIEJAR" "https://grupovenus.com/personas.asp?nue" \
-H "User-Agent: Mozilla/5.0" \
-H "Referer: https://grupovenus.com/info.asp" > /dev/null
# 2c. POST the person data (Referer header is required)
# IMPORTANT: city names with accents must be encoded in iso-8859-1, NOT UTF-8.
# e.g. "Bahía Blanca" → "Bah%EDa+Blanca" (%ED = í in Latin-1, NOT %C3%AD which is UTF-8)
# If the city is not recognized, the server silently assigns wrong/default coordinates.
# Verify by checking that the city and country fields are non-empty in the d0 cookie response.
curl -s -c "$COOKIEJAR" -b "$COOKIEJAR" -X POST "https://grupovenus.com/ciuda.asp" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "User-Agent: Mozilla/5.0" \
-H "Referer: https://grupovenus.com/personas.asp?nue" \
--data "urldestino=personas.asp%3Fok&nombre=NAME&DIA=DD&MES=MM&ANO=YYYY&HORA=HH&MINU=MM&08CIUDAD=CITY&14PAIS=COUNTRY&SEXO=H" > /dev/null
# 2d. Follow redirect to personas.asp?ok — the d0 cookie is set here
PERSONAS_RESP=$(curl -si -c "$COOKIEJAR" -b "$COOKIEJAR" "https://grupovenus.com/personas.asp?ok" \
-H "User-Agent: Mozilla/5.0" \
-H "Referer: https://grupovenus.com/ciuda.asp")
The personas.asp?ok response sets two cookies in its headers:
Set-Cookie: d0=NAME;M/D/YYYY H:MM:SS AM/PM;CITY;COUNTRY;SEX;;TZ;latNS;lonEW
Set-Cookie: haycoo=NAME;TZ;DATE;TIMEZONE_NAME;
Extract and URL-decode the d0 value from $PERSONAS_RESP:
D0=$(echo "$PERSONAS_RESP" \
| grep -i 'set-cookie.d0=' \
| sed 's/.d0=//I' | cut -d';' -f1 \
| python3 -c "import sys,urllib.parse; print(urllib.parse.unquote(sys.stdin.read().strip()))")
echo "d0 decoded: $D0"
# → NAME ;M/D/YYYY H:MM:SS AM/PM;CITY;COUNTRY;SEX;;TZ;latDMS;lonDMS
Fields (semicolon-separated):
- 字段 7:
tz_offset - 字段 8:
lat_dms(e.g.38S43) - 字段 9:
lon_dms(e.g.62W17)
Convert DMS to decimal for storage:
34S35→-(34 + 35/60)=-34.583358W22→58 + 22/60=58.3667(positive = West, 作为 stored 由 server)
Save the full person entry to grupo-venus.json.
字段 reference 对于 ciuda.asp POST
| Field | Value |
|---|---|
urldestino | personas.asp?ok (URL-encoded) |
nombre | Person's name |
DIA | Birth day (1–31) |
MES | Birth month (1–12) |
ANO | Birth year (4 digits) |
HORA | Birth hour 0–23 (local time) |
MINU | Birth minute 0–59 |
08CIUDAD | City name |
14PAIS | Country name |
SEXO | H or V |
Note: Thenom2=nuefield seen in older docs does not exist in the actual form and must be omitted. TheReferer: https://grupovenus.com/personas.asp?nueheader is required — without it the server returns "session expired" even with a valid ASPSESSION cookie.
Building Cookie 字符串
All report endpoints need the nombre value — the semicolon-delimited person string:
"NAME ;M/D/YYYY H:MM:SS AM/PM;CITY;COUNTRY;SEX;;TZ;latDMS;lonDMS"
Example:
"Luis Alberto Spinetta;1/23/1950 4:35:00 PM;Buenos Aires;Argentina;H;;3;34S35;58W22"
To URL-encode it for a POST body in curl use --data-urlencode:
--data-urlencode "nombre=Luis Alberto Spinetta;1/23/1950 4:35:00 PM;Buenos Aires;Argentina;H;;3;34S35;58W22"
Natal 图表 Image
Fetch the natal chart as a PNG image (free, no auth):
curl -s "https://grupovenus.com/dibujo.aspx" \
--get \
--data-urlencode "fec=1/23/1950 4:35:00 PM" \
--data-urlencode "aju=3" \
--data-urlencode "ciu=Buenos Aires" \
--data "pais=Argentina" \
--data-urlencode "lat=-34.5833" \
--data-urlencode "lon=58.3667" \
--data-urlencode "nom=Luis Alberto Spinetta" \
--data "bot=atras&idioma=E&CASASPRO=&zodi=T" \
-H "User-Agent: Mozilla/5.0" \
-o chart_spinetta.png
| Parameter | Description |
|---|---|
fec | Birthdate: M/D/YYYY H:MM:SS AM/PM |
aju | Timezone offset (from person record) |
ciu | City name |
pais | Country |
lat | Latitude decimal (negative = South) |
lon | Longitude decimal (positive = West, as stored) |
nom | Person name |
idioma | E=Spanish, I=English, F=French |
zodi | T=Tropical, S1=Fagan-Bradley, S2=Lahiri, S3=Sassanian, S4=Krishnamurti, S5=Hipparchos |
Content-Type: image/png. Save to file or display directly.Transit Forecast 图形
POST 到 informes3.asp 到 获取 1-year forecast 带有 所有 slow-planet transits:
curl -s -X POST "https://grupovenus.com/informes3.asp" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "User-Agent: Mozilla/5.0" \
--data-urlencode "nombre=Luis Alberto Spinetta;1/23/1950 4:35:00 PM;Buenos Aires;Argentina;H;;3;34S35;58W22" \
--data "urldestino=informes3.asp" \
--data "INFORMEDESEADO=8" \
--data "DIA1=28&MES1=2&ANO1=2026" \
--data "HORA1=09&MINU1=00" \
--data "tipzod=T&TIC=&idiomas=E"
The HTML response encodes all transit data as title attributes on elements:
Parsing transit data
Extract all data points with:
grep 'class="barras"' response.html \
| grep -o 'title="[^"]"' \
| sed 's/title="//;s/"//'
Each title line has the format:
[r ]CODE DD/MM/YYYY H:MM orbe: D° MM'
rprefix = retrograde transitCODE= transit code (see 表 下面)- 日期 = exact 日期 的 data point (every 2 days)
orbe= orb 在...中 degrees/minutes (0°0′ = exact)height属性 = bar height (1–55), proxy 对于 intensity:intensity = height / 55
The first before the bars gives you the human label and the code to fetch interpretation.
举报 types — forecast period 和 planets
| INFORMEDESEADO | Server label | Transiting planets | Period | Access |
|---|---|---|---|---|
8 | 1 año Sat-Plu (1 year, Saturn–Pluto) | SAT, URA, NEP, PLU | 1 year | Free |
-1 | 3 días Lun-Júp (3 days, Moon–Jupiter) | LUN, SOL, JUP | 3 days | Free |
0 | 1 semana Luna,Sol-Júp (1 week, Moon/Sun–Jupiter) | LUN, SOL, JUP | 1 week | Free |
1 | 2 semanas Sol-Plu (2 weeks, Sun–Pluto) | SOL, MAR, JUP, SAT, URA, NEP, PLU | 2 weeks | Free |
7 | 2 años Sat-Plu (2 years, Saturn–Pluto) | SAT, URA, NEP, PLU | 2 years | Ticket |
6 | 1 año Jup-Plu (1 year, Jupiter–Pluto) | JUP...PLU | 1 year | Ticket |
4 | 3 meses Mar-Plu (3 months, Mars–Pluto) | MAR...PLU | 3 months | Ticket |
满 举报 列表
Natal Reports
| ID | Name | Access |
|---|---|---|
50 | Mi pronóstico para Hoy | Free |
62 | Carta Natal | Ticket |
66 | Informe Vocacional | Ticket |
63 | Informe Infantil | Ticket |
61 | Carta SuperNatal | Ticket |
65 | Astrología Espiritual | Ticket |
64 | Astrología Kármica | Ticket |
69 | Informe Indra | Free (partial) |
170 | Carta Natal con Quirón | Free (partial) |
171 | Informe Infantil coloquial | Free (partial) |
174 | Vocacional simple | Free |
67 | Astrología y Tarot | Free (partial) |
945 | Numerología Básica | Free |
947 | Numerología Avanzada | Free |
Compatibility (two people 必填)
| ID | Name | Access |
|---|---|---|
16 | De Pareja | Free (partial) |
17 | De Amistad | Free (partial) |
172 | De Pareja coloquial | Free (partial) |
90 | Carta Compuesta | Free (partial) |
图表 Drawings
| ID | Name | Access |
|---|---|---|
941 | Dibujo de su Carta Astral | Free → redirects to dibujo0.aspx |
942 | Dibujo Carta para hoy | Free |
943 | Superponer dos Cartas | Free |
944 | Carta Compuesta (drawing) | Free |
Forecast Graphs
| ID | Name | Access |
|---|---|---|
8 | 1 año Sat-Plu | Free (full data) |
-1 | 3 días Lun-Júp | Free |
0 | 1 semana Luna,Sol-Júp | Free |
1 | 2 semanas Sol-Plu | Free |
199 | Gráfico pronóstico de pareja | Free |
7 | 2 años Sat-Plu | Ticket |
6 | 1 año Jup-Plu | Ticket |
4 | 3 meses Mar-Plu | Ticket |
Symbolic Predictions
| ID | Name | Access |
|---|---|---|
13 | Revolución Solar | Free (partial) |
15 | Revolución Lunar | Free (partial) |
14 | Progresiones | Free (partial) |
68 | Ciudades y Pueblos | Free (partial) |
173 | Revolución Solar Coloquial | Free (partial) |
Forecasts — Relationship
| ID | Name | Access |
|---|---|---|
23 | 12 meses, Marte a Plutón | Free (partial) |
199 | Varios períodos (graph) | Free |
22 | 2 meses, Sol a Plutón | Ticket |
Forecasts — General
| ID | Name | Access |
|---|---|---|
99 | 1 semana, Luna a Plutón | Ticket |
100 | 2 meses, Sol a Plutón | Ticket |
101 | 7 meses, Marte a Plutón | Ticket |
102 | 18 meses, Júpiter a Plutón | Ticket |
Forecasts — Kármico-Espiritual
| ID | Name | Access |
|---|---|---|
103 | 4 meses, Sol a Plutón | Ticket |
104 | 7 meses, Marte a Plutón | Ticket |
105 | 1 año, Júpiter a Plutón | Ticket |
Forecasts — Sentimental
| ID | Name | Access |
|---|---|---|
106 | 4 meses, Sol a Plutón | Ticket |
107 | 1 año, Marte a Plutón | Ticket |
Forecasts — Coloquial
| ID | Name | Access |
|---|---|---|
108 | 2 meses | Ticket |
109 | 7 meses | Ticket |
110 | 18 meses | Ticket |
Solo quincuncios / Negocios
| ID | Name | Access |
|---|---|---|
126 | 1 año, Marte a Plutón | Free (partial) |
121 | 9 meses, Sol Marte a Plutón | Free (partial) |
Transit Interpretation Texts
For any transit code, fetch 3 different interpretation styles — no auth required:
# General / technical
curl -s "https://grupovenus.com/sacainter.asp?tabla=tratsp&cla=SATCUAASC&orb=0" \
-H "User-Agent: Mozilla/5.0"# Potentials / spiritual
curl -s "https://grupovenus.com/sacainter.asp?tabla=starsolues&cla=SATCUAASC&orb=99" \
-H "User-Agent: Mozilla/5.0"
# Colloquial / plain language
curl -s "https://grupovenus.com/sacainter.asp?tabla=transiaw&cla=SATCUAASC&orb=99" \
-H "User-Agent: Mozilla/5.0"
The response is HTML. Strip tags and skip the first ~40 lines (boilerplate JS) to get the text:
curl -s "https://grupovenus.com/sacainter.asp?tabla=tratsp&cla=CODE&orb=0" \
-H "User-Agent: Mozilla/5.0" \
| iconv -f iso-8859-1 -t utf-8 \
| sed 's/<[^>]>//g' \
| grep -v '^[[:space:]]$' \
| tail -n +40
Transit code reference
Format: [PLANET1][ASPECT][PLANET2]
PLANET1 = transiting planet, PLANET2 = natal planet.
Planet codes:
| Code | Server name | English | Symbol |
|---|---|---|---|
SAT | Saturno | Saturn | ♄ |
URA | Urano | Uranus | ♅ |
NEP | Neptuno | Neptune | ♆ |
PLU | Plutón | Pluto | ♇ |
JUP | Júpiter | Jupiter | ♃ |
MAR | Marte | Mars | ♂ |
VEN | Venus | Venus | ♀ |
MER | Mercurio | Mercury | ☿ |
SOL | Sol | Sun | ☉ |
LUN | Luna | Moon | ☽ |
ASC | Ascendente | Ascendant | ↑ |
MC | Medio Cielo | Midheaven | ⬆ |
| Server name | English | Symbol |
|---|---|---|
| Aries | Aries | ♈ |
| Tauro | Taurus | ♉ |
| Géminis | Gemini | ♊ |
| Cáncer | Cancer | ♋ |
| Leo | Leo | ♌ |
| Virgo | Virgo | ♍ |
| Libra | Libra | ♎ |
| Escorpio | Scorpio | ♏ |
| Sagitario | Sagittarius | ♐ |
| Capricornio | Capricorn | ♑ |
| Acuario | Aquarius | ♒ |
| Piscis | Pisces | ♓ |
| Code | Server name | English | Degrees | Symbol |
|---|---|---|---|---|
CJC | Conjunción | Conjunction | 0° | ☌ |
SEX | Sextil | Sextile | 60° | ⚹ |
CUA | Cuadratura | Square | 90° | □ |
TRI | Trígono | Trine | 120° | △ |
OPO | Oposición | Opposition | 180° | ☍ |
QUI | Quincuncio | Quincunx | 150° | ⚻ |
SATCUAASC → ♄ □ ↑ (Saturn square Ascendant).Examples: SATCUAASC = ♄ □ Ascendant, NEPTRIVEN = ♆ △ ♀, URACJCMER = ♅ ☌ ☿.
Compatibility Reports (Two People)
For synastry, the nombre field must encode both people separated by |:
"Person1 data | Person2 data"
Full example (Pareja, INFORMEDESEADO=16):
P1="Luis Alberto Spinetta;1/23/1950 4:35:00 PM;Buenos Aires;Argentina;H;;3;34S35;58W22"
P2="Charly Garcia;10/23/1951 11:20:00 AM;Buenos Aires;Argentina;H;;3;34S36;58W27"curl -s -X POST "https://grupovenus.com/informes3.asp" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "User-Agent: Mozilla/5.0" \
--data-urlencode "nombre=$P1 | $P2" \
--data "urldestino=informes3.asp&INFORMEDESEADO=16&tipzod=T&TIC=&idiomas=E"
Compatibility report IDs: 16 (pareja, couple), 17 (amistad, friendship), 172 (pareja coloquial, couple casual), 90 (carta compuesta, composite chart).
Zodiac Types
tipzod | System |
|---|---|
T | Tropical (default, most common) |
S1 | Sideral — Fagan Bradley |
S2 | Sideral — Lahiri |
S3 | Sideral — Sassanian |
S4 | Sideral — Krishnamurti |
S5 | Sideral — Hipparchos |
Standard POST Fields 对于 informes3.asp
| Field | Description |
|---|---|
urldestino | Always informes3.asp |
INFORMEDESEADO | Report ID (see tables above) |
nombre | Person string (semicolon-delimited) |
DIA1 | Start day for forecast |
MES1 | Start month |
ANO1 | Start year |
HORA1 | Start hour (local time) |
MINU1 | Start minute |
tipzod | Zodiac type |
TIC | Ticket number (leave empty for free reports) |
idiomas | E=Spanish (Español), I=English, F=French (Français) |
Analysis Patterns
Surface 最多 intense transits
From a parsed INFORMEDESEADO=8 response, rank transits by bar height (intensity proxy):
- 解析 所有
title="CODE 日期 orbe: D° MM'"lines - Keep bar
height属性 对于 每个 point - 分组 由 transit code — take
max(height)作为 peak intensity - 排序 descending — top 5 dominant themes 对于 year
The orb is the complement of intensity: 0°0′ = exact = maximum impact, 1°0′ = fading. The height already encodes this visually (max 55px = exact aspect).
Identify timing windows
For each transit code, find the contiguous date range where height > 0. That range is the active window. Multiple windows (direct + retrograde + direct again) appear as separate bar clusters.
Present to the user as:
"Saturn square your Ascendant is active March 8 – April 14, peaks exactly March 22, then returns retrograde August 15 – November 3."
Interpret transit
For each dominant transit, fetch all 3 interpretation styles and synthesize:
tratsp= technical/classical readingstarsolues= potential/higher-表达式 readingtransiaw= everyday colloquial reading
Lead with transiaw for casual conversations, tratsp for someone who wants depth.
Compare two charts
- 获取 INFORMEDESEADO=8 对于 Person → 解析 transit codes + windows
- 获取 INFORMEDESEADO=8 对于 Person B → 解析 transit codes + windows
- 查找 overlapping 活跃 windows — periods 在哪里 both people 在...下 major transits simultaneously
- 获取 INFORMEDESEADO=16 或 17 带有 both persons 对于 synastry 举报
- Highlight: shared themes (both 在...下 Pluto? both 在...下 Neptune?), conflicting energies, supportive overlaps
Today's sky
Use INFORMEDESEADO=-1 (3 días, 3 days) or 0 (1 semana, 1 week) for short-range forecasts. These include faster planets (Moon, Sun, Jupiter). Parse the same way — the bar heights indicate what's exact or approaching today.
Voice & 样式
General tone
You're an astrologer who knows their craft but talks like a person, not like a mystical pamphlet. Avoid:
- " stars telling 您..." → too mystical 和 cliché
- listing positions 在...中 degrees 带有 否 context → too raw
- " powerful 时间 对于 growth" → vague 和 useless
Instead: be direct, be specific, use the symbols, name the tension or the gift without overselling it.
Per-person styles
Each person in memory has a style field. Always read it before writing a response about them. If it's not set, ask (see Happy Path Step 1).
casual
Like a friend who knows astrology. No jargon, no degrees, no house numbers unless they ask. Lead with feeling and situation, not with planet names.
"Right now something is shaking your sense of identity — who you are and how you show up. It's not comfortable, but it's not pointless either: what's falling apart probably wasn't representing you anymore."
Use transiaw interpretations exclusively. Skip technical terms. Offer depth only if they ask.
deep
Full astrological language: aspects, houses, dignities, orbs, retrograde phases. Use the symbols (♇ ☍ ↑). Mention which interpretation style you're drawing from. Structure the reading clearly.
"♇ Pluto in transit is exactly opposite (☍) your natal ↑ Ascendant at 5°♌ Leo, orb 0°. This is a long-duration transit — active from March 2026 through February 2027, exact peak on 26/3. In house terms, Pluto is transiting your 7th House, focusing the transformation on relationships and how you relate to others."
Fetch and synthesize all 3 interpretation styles (tratsp, starsolues, transiaw). Mention timing windows explicitly.
practical
Skip the poetry, focus on what to do and when. Windows, peaks, warnings. What's favorable, what to watch out for. Calendar-friendly.
"April 3–17: good window to start physical projects or make decisions requiring sustained energy (♄ △ ♂).
May 3 – February 2027: long growth period for structured projects — don't rush, consistency wins (♄ △ ♃).
Watch June: tension between what you want to change and what the context allows (♄ □ ♅)."
Use only dates, peaks, and a one-line action note per transit. No extended interpretation unless asked.
This is the recommended flow for a first-time reading. Do not dump all available data at once. Each step should feel like a natural conversation beat.
Step 1 — 注册 和 show 图表
After the user provides their birth data, register them (see Adding a Person), save to memory. Before generating any reading, ask for their preferred style if it's not already set:
"How would you like me to read your chart?
- Casual — like a friend who knows astrology, no technical jargon
- Deep — full aspects, houses, and timing
- Practical — straight to the point: what to do and when"
Save the chosen style to their record in memory, then immediately:
- 获取 和 display natal 图表 PNG (
dibujo.aspx) - 写入 brief 个人资料 — 3–4 sentences max, 在...中 plain language. Focus 在...上:
> Example: "You're ♊ Gemini with ♌ Leo rising — quick mind, strong presence. Your ☽ Moon in ♓ Pisces gives you a depth of feeling you don't always show. ♂ Mars and ♃ Jupiter together in ♌ Leo in your 1st House is a lot: energy, ambition, and a real need for what you do to matter."
- 获取 1-year transit 图形 (
INFORMEDESEADO=8, starting 从 today) 和 identify 2–3 最多 活跃 transits right 现在 (highestheightvalues 在...中 current month).
- 写入 quick current snapshot — 什么's happening astrologically 现在, 在...中 2–4 sentences, 使用
transiawinterpretation 样式 (colloquial). 获取sacainter.asp?tabla=transiaw对于 每个 活跃 transit 和 synthesize — don't paste raw text.
> Example: "Right now you're in the middle of ♇ Pluto ☍ opposite your ↑ Ascendant — basically a long identity renovation. Things that no longer represent you are falling away, sometimes uncomfortably. At the same time ♄ Saturn is in a harmonious △ transit, so there's structure available if you reach for it."
Step 2 — Offer 下一个 steps (short 菜单, 不 overwhelming)
After the snapshot, offer at most 3–4 options clearly:
What would you like to explore?
- Year forecast — the most important transits month by month
- A specific transit — if something I mentioned resonated, I can go deeper
- Compatibility — if you have someone in mind, we can compare charts
- Solar return — what this birthday year brings in particular
Don't mention ticket-gated reports unless the user asks for something that requires one.
Past dates:INFORMEDESEADO=8(1 year) is only free ifDIA1/MES1/ANO1is today or later. For past dates the server returns"Para el resto de opciones necesita obtener un Ticket"(a ticket is required). Do not offer full-year retrospective readings on the free tier.
Step 3 — Go deep 在...上 demand
Only when the user asks to explore something specific:
- 获取 所有 3 interpretation styles (
tratsp,starsolues,transiaw) 对于 transit - Synthesize them 进入 coherent 1–3 paragraph reading
- Mention timing: 当...时 exact, 当...时 做 fade, 做 return retrograde
Conversational Suggestions
- Multiple people stored — offer comparisons: "I 也 有 [name] saved. Want me 到 compare charts?"
- Zodiac 类型 — 默认 到 Tropical. Mention Sidereal (Lahiri) 仅 如果 用户 asks.
- Past dates —
INFORMEDESEADO=8(1 year, slow planets) 仅 accepts dates 从 today 转发 在...上 free tier. Short-range reports (-1,0,1) 可能 work 带有 past dates.
- Language —
idiomas=E(Spanish),I(English),F(French). Match 用户's language 在...中 responses regardless 的 哪个idiomas值 sent.
示例 Workflow
添加 person 和 获取 year forecast
# 1. Look up city
curl -s "https://grupovenus.com/buscaciudjson.asp?q=Rosario&pais=Argentina"# 2. Register person with cookie jar (3-step flow required)
COOKIEJAR=$(mktemp)
curl -s -c "$COOKIEJAR" -b "$COOKIEJAR" "https://grupovenus.com/info.asp" \
-H "User-Agent: Mozilla/5.0" > /dev/null
curl -s -c "$COOKIEJAR" -b "$COOKIEJAR" "https://grupovenus.com/personas.asp?nue" \
-H "User-Agent: Mozilla/5.0" \
-H "Referer: https://grupovenus.com/info.asp" > /dev/null
curl -s -c "$COOKIEJAR" -b "$COOKIEJAR" -X POST "https://grupovenus.com/ciuda.asp" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "User-Agent: Mozilla/5.0" \
-H "Referer: https://grupovenus.com/personas.asp?nue" \
--data "urldestino=personas.asp%3Fok&nombre=Maria&DIA=15&MES=3&ANO=1992&HORA=14&MINU=30&08CIUDAD=Rosario&14PAIS=Argentina&SEXO=V" > /dev/null
# 3. Get d0 cookie with coordinates from the redirect target
D0=$(curl -si -c "$COOKIEJAR" -b "$COOKIEJAR" "https://grupovenus.com/personas.asp?ok" \
-H "User-Agent: Mozilla/5.0" \
-H "Referer: https://grupovenus.com/ciuda.asp" \
| grep -i 'set-cookie.d0=' \
| sed 's/.d0=//I' | cut -d';' -f1 \
| python3 -c "import sys,urllib.parse; print(urllib.parse.unquote(sys.stdin.read().strip()))")
echo "d0 decoded: $D0"
# → Maria ;3/15/1992 2:30:00 PM;Rosario;Argentina;V;;3;32S57;60W40
# 4. Fetch 1-year transit graph (no session needed for reports)
curl -s -X POST "https://grupovenus.com/informes3.asp" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "User-Agent: Mozilla/5.0" \
--data-urlencode "nombre=Maria;3/15/1992 2:30:00 PM;Rosario;Argentina;V;;3;32S57;60W40" \
--data "urldestino=informes3.asp&INFORMEDESEADO=8&DIA1=1&MES1=1&ANO1=2026&HORA1=00&MINU1=00&tipzod=T&TIC=&idiomas=E" \
-o maria_transits.html
# 5. Extract transit data
grep 'class="barras"' maria_transits.html \
| grep -o 'title="[^"]"' \
| iconv -f iso-8859-1 -t utf-8 \
| sed 's/title="//;s/"//' \
| sort -t' ' -k2 -n
# 6. Fetch natal chart PNG
curl -s "https://grupovenus.com/dibujo.aspx" \
--get \
--data-urlencode "fec=3/15/1992 2:30:00 PM" \
--data-urlencode "aju=3" \
--data-urlencode "ciu=Rosario" \
--data "pais=Argentina" \
--data-urlencode "lat=-32.9333" \
--data-urlencode "lon=60.6667" \
--data-urlencode "nom=Maria" \
--data "bot=atras&idioma=E&CASASPRO=&zodi=T" \
-H "User-Agent: Mozilla/5.0" \
-o maria_chart.png
Notes
- site uses iso-8859-1 encoding. Always pipe 通过
iconv -f iso-8859-1 -t utf-8当...时 reading HTML. - POST data 到
ciuda.asp必须 也 使用 iso-8859-1 percent-encoding, 不 UTF-8. 对于 accented characters:í=%ED,á=%E1,é=%E9,ó=%F3,ú=%FA,ñ=%F1. 使用 UTF-8 encoding (e.g.%C3%AD对于í) causes server 到 silently ignore city 和 assign wrong 默认 coordinates 带有 空 city/country fields 在...中d0Cookie. - 那里 否 server-side rate limiting observed, 但是 considerate — 添加 small 延迟 之间 batch requests.
- 会话 cookies (
ASPSESSIONID...) 仅 needed 期间 registration flow. 举报 requests (informes3.asp,dibujo.aspx,sacainter.asp) 做 不 需要 任何 会话 Cookie. - Always 使用 Cookie jar (
-c/-bflags) 对于 registration flow. Manually extracting 和 passing single ASPSESSION Cookie 页头 将 失败 带有 "会话 已过期" 因为 server validates multi-Cookie state. - registration flow exactly 3 steps 之前 final
personas.asp?okcall:info.asp→personas.asp?nue→ POSTciuda.asp. Skipping 任何 step causes 会话 expiry. -
Referer页头 必填 在...上 bothpersonas.asp?nue获取 和ciuda.aspPOST. 没有 server rejects 请求. -
sacainter.aspreferrer check JavaScript-仅 — server serves content regardless 的 origin. - Ticket-gated reports return HTTP 200 带有 plain "Para el resto de opciones necesita obtener un Ticket" 消息 在...中 body — detect 由 checking 对于 字符串.