Skill: xiewxx/maxhub-instagram (version 3.5.0)

--- name: maxhub-instagram description: "Instagram 全场景数据查询助手。支持V1/V2/V3三个版本API，覆盖用户信息、帖子、Reels、Stories、评论、搜索、话题、地点等全功能。" license: MIT-0 metadata: author: maxhub version: "3.5.0" openclaw: emoji: "📸" primaryEnv: MAXHUB_API_KEY requires: env: - MAXHUB_API_KEY bins: - curl env: - name: MAXHUB_API_KEY description: "API key for MaxHub data APIs. Get one at https://www.aconfig.cn" required: true sensitive: true network: - https://www.aconfig.cn hermes: tags: ["instagram", "ins", "帖子", "用户分析", "图片社交", "关键词搜索", "评论采集", "故事", "网红分析", "品牌营销", "视觉内容", "海外社媒", "数据采集"] category: productivity --- # Instagram 数据助手 **Get started:** Sign up and get your API key at https://www.aconfig.cn You are a Instagram Data Assistant. Help users query data via the MaxHub API at https://www.aconfig.cn. **Data disclaimer:** Data obtained through third-party APIs is for reference only. **API coverage:** 68 active endpoints **first message** and maintain it throughout the conversation. | User language | Response language | Number format | Example output | |---|---|---|---| | 中文 | 中文 | 万/亿 (e.g. 1.2亿) | "共找到 1,234 条结果" | | English | English | K/M/B (e.g. 120M) | "Found 1,234 results" | ## API Access Base URL: `https://www.aconfig.cn` Use the configured `MAXHUB_API_KEY` value as the `Authorization: Bearer` request header. ```bash maxhub_auth_header="Authorization: Bearer ${MAXHUB_API_KEY}" # GET example curl -s "https://www.aconfig.cn/api/v1/instagram/{endpoint}?{params}" \ -H "$maxhub_auth_header" # POST example curl -s -X POST "https://www.aconfig.cn/api/v1/instagram/{endpoint}" \ -H "$maxhub_auth_header" \ -H "Content-Type: application/json" \ -d '{...}' ``` ## Interaction Flow ### Step 1: Check API Key ```bash [ -n "${MAXHUB_API_KEY:-}" ] && echo "ok" || echo "missing" ``` #### If missing — show setup guide Chinese user: > 🔑 需要先配置 MaxHub API Key 才能使用： > > 1. 打开 https://www.aconfig.cn 注册账号 > 2. 登录后在控制台找到 API Keys，创建一个 Key > 3. 选择一种方式配置： > - OpenClaw/ClawHub：`openclaw config set skills.entries.maxhub-instagram.apiKey "你的_API_KEY"` > - 通用环境变量：`export MAXHUB_API_KEY="你的_API_KEY"` > 4. 配置完成后重新发起查询 ✅ English user: > 🔑 You need a MaxHub API Key to get started: > > 1. Go to https://www.aconfig.cn and sign up > 2. Find API Keys in your dashboard and create one > 3. Choose one setup method: > - OpenClaw/ClawHub: `openclaw config set skills.entries.maxhub-instagram.apiKey "YOUR_API_KEY"` > - Generic: `export MAXHUB_API_KEY="YOUR_API_KEY"` > 4. Run your query again after setup ✅ ### Step 1.5: Complexity Classification | Complexity | Criteria | Path | |---|---|---| | **Simple** | Exactly 1 API call | Skill handles directly | | **Deep** | 2+ API calls; analysis, comparison | Multi-endpoint orchestration | ### Step 2: Route — Classify Intent & Load Reference | Intent Group | Trigger signals | Reference file | Key endpoints | |---|---|---|---| | **User Data** | 用户, 资料, 粉丝, 关注, 帖子, Reels, Stories, 精选, 标记, 简介, 曾用名, user, profile, follower, following, posts, reels, stories, highlights, tagged, about, former, brief, info, id, username, similar, related, reposts | `references/api-user.md` | fetch_search, fetch_user_info_by_id, fetch_location_info, fetch_user_reels, fetch_related_profiles, search_reels, search_users, user_id_to_username, fetch_user_reels, fetch_user_info, fetch_user_following, fetch_user_stories, fetch_user_followers, fetch_user_highlights, fetch_similar_users, search_users, get_recommended_reels, get_user_reels, get_user_stories, get_user_profile, get_user_former_usernames, get_user_highlights, get_user_about, get_user_id_by_username | | **Post Data** | 帖子, 详情, 评论, 点赞, oembed, 子评论, post, detail, comment, like, oembed, reply, shortcode, media_id, url, translate, bulk | `references/api-post.md` | fetch_music_posts, fetch_section_posts, fetch_location_posts, fetch_post_comments_v2, fetch_user_posts_v2, fetch_user_posts, fetch_user_tagged_posts, fetch_user_reposts, fetch_comment_replies, fetch_hashtag_posts, fetch_post_by_id, fetch_post_by_url_v2, fetch_post_by_url, media_id_to_shortcode, shortcode_to_media_id, fetch_location_posts, fetch_post_likes, fetch_post_comments, fetch_post_info, fetch_user_posts, fetch_user_tagged_posts, fetch_highlight_stories, fetch_comment_replies, fetch_hashtag_posts, fetch_music_posts, get_highlight_stories, get_post_oembed, get_post_comments, get_post_info_by_code, get_post_info, get_user_posts, get_user_brief, get_user_tagged_posts, get_comment_replies | | **Search & Explore** | 搜索, 话题, 地点, 音乐, 探索, 发现, 推荐, search, hashtag, location, music, explore, discover, recommend, nearby, section, city, country, coordinate, general, pagination | `references/api-search.md` | fetch_cities, fetch_locations, fetch_explore_sections, search_locations, search_hashtags, search_music, search_by_coordinates, general_search, search_hashtags, general_search | | **Tools & Utilities** | 转换, 短码, 媒体ID, 提取, convert, shortcode, media_id, extract, url | `references/api-tools.md` | | | **Deep Dive** | 全面分析, 深度分析, 综合报告, full analysis | Multiple files | Multi-endpoint orchestration | **Rules:** - If uncertain, default to **User Data**. - For **Deep Dive**, read reference files incrementally. ### Step 3: Classify Action Mode | Mode | Signal | Behavior | |---|---|---| | **Browse** | "搜", "找", "看看", "search", "find", "show me" | Single query, return results + summary | | **Analyze** | "分析", "趋势", "why", "analyze", "trend" | Query + structured analysis | | **Compare** | "对比", "vs", "区别", "compare" | Multiple queries, side-by-side comparison | ### Step 4: Plan & Execute #### Pattern A: "分析Instagram用户" 1. 搜索用户 → search_users → 找到目标用户 2. 获取资料 → fetch_user_info → 用户详细信息 3. 获取帖子 → fetch_user_posts → 帖子列表 #### Pattern B: "分析帖子互动" 1. 获取详情 → fetch_post_info → 帖子详情 2. 获取评论 → fetch_post_comments → 评论列表 3. 获取点赞 → fetch_post_likes → 点赞列表 **Execution rules:** - Execute all planned queries autonomously. - Run independent queries in parallel when possible. - If a step fails with 403, skip it and note the limitation. - If a step fails with 502, retry once. - If a step returns empty data, say so honestly. ### Step 5: Output Results #### Browse Mode Present results concisely with key fields. #### Analyze Mode Tables for rankings, bullet points for insights. End with **Key findings**. #### Compare Mode Side-by-side table + differential insights. ### Step 6: Follow-up Handling | Follow-up | Action | |---|---| | "next page" / "下一页" | Same params, page/cursor +1 | | "analyze" / "分析一下" | Switch to analyze mode | | "compare with X" / "和X对比" | Add X as second query | ## Output Guidelines 1. **Language consistency** — ALL output matches user's detected language. 2. **Markdown links** — All URLs in `[text](url)` format. 3. **Humanize numbers** — English: K/M/B. Chinese: 万/亿. 4. **End with next-step hints** — Contextual suggestions. 5. **Data-driven** — Base conclusions on actual API data. 6. **Credential handling** — Keep API key values out of output. 7. **Strip HTML tags** — API may return HTML in name fields. ## 🎯 适配场景 ### 场景一：品牌社媒监测 - **应用环境**：品牌方监控Instagram上的品牌提及和用户内容 - **用户需求**：追踪品牌标签下的用户生成内容和互动数据 - **使用流程**：搜索品牌标签 → 获取相关帖子 → 分析互动数据 → 评估传播效果 - **预期效果**：实时掌握品牌在Instagram上的声量和用户反馈 ### 场景二：网红营销分析 - **应用环境**：营销团队评估Instagram网红的合作价值 - **用户需求**：分析网红粉丝质量、内容表现和商业合作历史 - **使用流程**：搜索目标网红 → 获取用户详情 → 分析帖子数据 → 评估互动率 - **预期效果**：筛选出高ROI的网红合作对象 ### 场景三：视觉内容灵感 - **应用环境**：内容创作者寻找Instagram上的创意灵感 - **用户需求**：发现热门视觉内容和创作趋势 - **使用流程**：搜索目标主题 → 获取高互动帖子 → 分析内容特征 → 提取创意元素 - **预期效果**：为内容创作提供数据驱动的灵感参考 ## Error Handling | Error | Response | |---|---| | 400 Bad Request | "参数错误 / Bad request parameters" | | 401 Unauthorized | "API Key 无效 / API Key is invalid" | | 403 Forbidden | "权限不足 / Insufficient permissions" | | 404 Not Found | "接口地址错误或已下线，请检查调用路径是否与文档一致 / Endpoint not found — verify URL matches documentation" | | 429 Rate Limit | "请求过快 / Too many requests" | | 500 Server Error | "服务器不可用 / Server unavailable" | | Empty results | ### 404 错误专项处理 当 API 调用返回 **404 Not Found** 时，按以下流程处理： 1. **验证调用地址**：检查实际调用的 URL 路径是否与 references 文档中 `<!-- Full path: -->` 标注的路径**完全一致** 2. **常见 404 原因**： - ❌ 自行拼接或猜测接口路径（如将 `app_v2` 写成 `app`，或遗漏版本号） - ❌ 使用了已废弃/下线的接口路径 - ❌ 路径中缺少必要的子路径段（如 [REDACTED_SECRET] 误写为 [REDACTED_SECRET]） 3. **处理方式**： - 如果地址与文档不一致 → 修正为文档中的正确地址后重新调用 - 如果地址与文档一致但仍 404 → 该接口可能已下线，按「接口降级策略」切换到替代版本 - 如果所有替代版本均 404 → 向用户说明该功能暂时不可用 ### 接口降级与自动切换策略 当按照文档正确传参后，接口仍返回错误时，按以下策略自动切换到替代接口： #### 降级触发条件 | 错误码 | 是否触发降级 | 说明 | |--------|-------------|------| | 400 Bad Request | ❌ 不降级 | 参数格式错误，需修正参数 | | 401 Unauthorized | ❌ 不降级 | API Key 无效，需检查配置 | | 403 Forbidden | ❌ 不降级 | 权限不足 | | 404 Not Found | ✅ **触发降级** | 接口可能已下线，切换到替代版本 | | 422 Unprocessable | ❌ 不降级 | 参数验证失败，需修正参数格式 | | 429 Rate Limit | ❌ 不降级 | 延迟 5 秒后重试同一接口，最多 1 次 | | 500 Server Error | ✅ **触发降级** | 服务器故障，切换到替代版本 | | 410 Gone | ✅ **触发降级** | 接口已废弃，切换到替代版本 | #### 降级执行流程 ``` 1. 调用接口 A（最高优先级版本） ↓ 失败（404/500/410） 2. 查找功能相同的替代接口 B（下一优先级版本） ↓ 按替代接口的参数格式重新构造请求 3. 调用接口 B ↓ 成功 → 返回结果 ↓ 失败 → 继续降级到接口 C 4. 所有替代接口均失败 → 向用户报告： "该功能当前不可用，已尝试 X 个替代接口均失败。 最后一次错误：[错误信息]。 建议：[替代方案或稍后重试]" ``` #### 降级注意事项 - 切换接口时，**必须**按新接口的参数格式重新构造请求，不同版本的参数名可能不同 - 降级调用前，先读取替代接口的 references 文档确认参数 - 最多降级 3 次（即最多尝试 4 个不同版本的接口） - 降级调用成功后，在响应中标注实际使用的接口版本 "未找到数据，建议放宽条件 / No data, try broader params" |

path: README.md
content: # Instagram Data Assistant

[中文文档](README_CN.md)

Instagram data assistant supporting V1/V2/V3 APIs for user info, posts, Reels, Stories, comments, search, hashtags, and locations.

## Features

- **User Data** — fetch_user_info, fetch_user_posts, fetch_user_followers, fetch_user_following, fetch_user_stories, fetch_user_reels, fetch_user_highlights, fetch_user_tagged_posts, fetch_user_about, fetch_user_brief_info, fetch_user_former_usernames
- **Post & Media** — fetch_post_info, fetch_post_comments, fetch_comment_replies, fetch_post_likes, fetch_highlight_stories, fetch_post_oembed
- **Search & Explore** — search_users, search_hashtags, search_locations, general_search, fetch_explore_feed, fetch_hashtag_posts, fetch_location_posts, fetch_location_info, fetch_nearby_content
- **Content Tools** — convert_media_id_shortcode, extract_shortcode, translate_comment, bulk_translate_comments, fetch_reels_feed, fetch_user_id_by_username

## Install

```bash
npx clawhub install maxhub-instagram
```

## Setup

1. Go to [www.aconfig.cn](https://www.aconfig.cn) to register and get your API Key
2. Configure: `openclaw config set skills.entries.maxhub-instagram.apiKey "<your-key>"` or `export MAXHUB_API_KEY="<your-key>"`

## Usage Examples

| Category | Example prompts |
|----------|----------------|
| User Data | 用户, 资料 |
| Post & Media | 帖子, 帖文 |
| Search & Explore | 搜索, 搜 |
| Content Tools | 翻译, 短码 |

Supports both **English** and **Chinese**.

## Links

- Website: [www.aconfig.cn](https://www.aconfig.cn)

---

Powered by [MaxHub](https://www.aconfig.cn)


path: README_CN.md
content: # Instagram 数据助手

[English](README.md)

Instagram 全场景数据查询助手。支持V1/V2/V3三个版本API，覆盖用户信息、帖子、Reels、Stories、评论、搜索、话题、地点等全功能。

## 功能

- **用户数据** — fetch_user_info, fetch_user_posts, fetch_user_followers, fetch_user_following, fetch_user_stories, fetch_user_reels, fetch_user_highlights, fetch_user_tagged_posts, fetch_user_about, fetch_user_brief_info, fetch_user_former_usernames
- **帖子与媒体** — fetch_post_info, fetch_post_comments, fetch_comment_replies, fetch_post_likes, fetch_highlight_stories, fetch_post_oembed
- **搜索与发现** — search_users, search_hashtags, search_locations, general_search, fetch_explore_feed, fetch_hashtag_posts, fetch_location_posts, fetch_location_info, fetch_nearby_content
- **内容工具** — convert_media_id_shortcode, extract_shortcode, translate_comment, bulk_translate_comments, fetch_reels_feed, fetch_user_id_by_username

## 安装

```bash
npx clawhub install maxhub-instagram
```

## 配置

1. 前往 [www.aconfig.cn](https://www.aconfig.cn) 注册并获取 API Key
2. 配置：`openclaw config set skills.entries.maxhub-instagram.apiKey "<你的-key>"` 或 `export MAXHUB_API_KEY="<你的-key>"`

## 使用示例

| 分类 | 示例指令 |
|------|----------|
| 用户数据 | 用户，资料 |
| 帖子与媒体 | 帖子，帖文 |
| 搜索与发现 | 搜索，搜 |
| 内容工具 | 翻译，短码 |

支持 **中文** 和 **英文** 双语。

## 链接

- 官网：[www.aconfig.cn](https://www.aconfig.cn)

---

由 [MaxHub](https://www.aconfig.cn) 提供技术支持


path: _meta.json
content: ownerId: maxhub-skills
slug: maxhub-instagram
version: 3.5.0
publishedAt: 0
homepage: https://www.aconfig.cn
repository: https://github.com/XieWxx/maxhub-api-skills

path: references/api-search.md
content: # Search & Explore API / 搜索与发现接口

Base URL: `https://www.aconfig.cn`
Auth: `Authorization: Bearer $MAXHUB_API_KEY`

---
## fetch_cities

`GET /api/v1/instagram/v1/fetch_cities`

<!-- Full path: /api/v1/instagram/v1/fetch_cities -->

### Parameters

| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
| country_code | string | ✅ | 国家代码（如US、CN、JP）/Country code (e.g. US, CN, JP) | US |
| page | integer |  | 页码/Page number (default: 1) |  |

### Response

Standard MaxHub response: `{code, message, message_zh, data, cache_url}`

### Description

### 用途:
- 获取指定国家的城市/地区列表
### 参数:
- country_code: 国家代码，如US、CN、JP
- page: 页码，默认1
### 返回:
- `country_info`: 国家信息
- `city_list`: 城市列表
- `next_page`: 下一页页码

## fetch_explore_sections

`GET /api/v1/instagram/v1/fetch_explore_sections`

<!-- Full path: /api/v1/instagram/v1/fetch_explore_sections -->

### Parameters

No parameters required.

### Response

Standard MaxHub response: `{code, message, message_zh, data, cache_url}`

### Description

### 用途:
 - 获取Instagram探索页面的所有分类和子分类
 ### 返回:
 - `sections`: 分类列表，包含分类名称、子分类和推荐内容

## fetch_locations

`GET /api/v1/instagram/v1/fetch_locations`

<!-- Full path: /api/v1/instagram/v1/fetch_locations -->

### Parameters

| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
| city_id | string | ✅ | 城市ID（从fetch_cities获取）/City ID (from fetch_cities) | c2791472 |
| page | integer |  | 页码/Page number (default: 1) |  |

### Response

Standard MaxHub response: `{code, message, message_zh, data, cache_url}`

### Description

### 用途:
- 获取指定城市下的Instagram地点列表
### 参数:
- city_id: 城市ID（可从fetch_cities接口获取）
- page: 页码，默认1
### 返回:
- `country_info`: 国家信息
- `city_info`: 城市信息
- `location_list`: 地点列表
- `next_page`: 下一页页码

## general_search

`GET /api/v1/instagram/v2/general_search`

<!-- Full path: /api/v1/instagram/v2/general_search -->

### Parameters

| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
| keyword | string | ✅ | 搜索关键词/Search keyword | cat |
| pagination_token | string |  | 分页token/Pagination token |  |

### Response

Standard MaxHub response: `{code, message, message_zh, data, cache_url}`

### Description

### 用途:
 - 根据关键词进行Instagram综合搜索
 - 支持分页获取
 ### 参数:
 - keyword: 搜索关键词
 - pagination_token: 分页token，从上一次响应获取
 ### 返回:
 - `data.items`: 综合搜索结果列表，包含用户、帖子、Reels等
 - `pagination_token`: 下一页token

## general_search

`GET /api/v1/instagram/v2/general_search`

<!-- Full path: /api/v1/instagram/v3/general_search -->

### Parameters

| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
| query | string | ✅ | 搜索关键词/Search keyword | justin |
| next_max_id | string |  | >- |  |
| rank_token | string |  | >- |  |
| enable_metadata | boolean |  | 是否启用元数据/Enable metadata (default: true) |  |

### Response

Standard MaxHub response: `{code, message, message_zh, data, cache_url}`

### Description

### 用途:
 - Instagram综合搜索接口（支持分页）
 - 支持通过 next_max_id 分页获取大量搜索结果
 - 返回用户、话题标签、地点等综合结果
 ### 参数:
 - query: 搜索关键词
 - next_max_id: 分页ID，首次请求不传，从上一次响应的 `data.next_max_id` 获取
 - rank_token: 排序token，首次请求不传，从上一次响应的 `data.rank_token` 获取
 - enable_metadata: 是否启用元数据
 ### 返回:
 - `data.num_results`: 结果数量
 - `data.users`: 用户搜索结果列表
 - `data.places`: 地点搜索结果列表
 - `data.hashtags`: 话题标签搜索结果列表
 - `data.next_max_id`: 下一页分页ID（传给下次请求的next_max_id参数）
 - `data.rank_token`: 排序token（传给下次请求的rank_token参数）
 - `data.has_more`: 是否有更多结果
 ### 注意事项:
 - ⚠️ **已知问题**: 综合搜索结果可能存在重复数据，这是 Instagram API 的已知行为
 - 搜索话题标签时，query 需要带上 `#` 前缀，例如搜索 fashion 话题应传入 `#fashion`
 - `#` 符号在 URL 中需要进行 URL 编码为 `%23`，例如: `?query=%23fashion`
 - 如果使用 HTTP 客户端库（如 requests/httpx），直接传入 `#fashion` 即可，库会自动处理编码
 ### 分页使用方法:
 1. 首次请求：只传 `query` 参数
 2. 获取响应中的 `next_max_id` 和 `rank_token`
 3. 下次请求：传入 `query`、`next_max_id` 和 `rank_token`
 4. 重复步骤 2-3 直到 `has_more` 为 false

## search_by_coordinates

`GET /api/v1/instagram/v2/search_by_coordinates`

<!-- Full path: /api/v1/instagram/v2/search_by_coordinates -->

### Parameters

| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
| latitude | number | ✅ | 纬度/Latitude | 40.7 |
| longitude | number | ✅ | 经度/Longitude | -74 |

### Response

Standard MaxHub response: `{code, message, message_zh, data, cache_url}`

### Description

### 用途:
 - 根据GPS坐标搜索附近的Instagram地点
 ### 参数:
 - latitude: 纬度
 - longitude: 经度
 ### 返回:
 - `data.items`: 附近地点列表，包含名称、地址、分类等

## search_hashtags

`GET /api/v1/instagram/v2/search_hashtags`

<!-- Full path: /api/v1/instagram/v2/search_hashtags -->

### Parameters

| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
| keyword | string | ✅ | 搜索关键词/Search keyword | cat |

### Response

Standard MaxHub response: `{code, message, message_zh, data, cache_url}`

### Description

### 用途:
- 根据关键词搜索Instagram话题标签
### 参数:
- keyword: 搜索关键词
### 返回:
- `data.items`: 话题标签列表，包含名称、帖子数量等

## search_hashtags

`GET /api/v1/instagram/v2/search_hashtags`

<!-- Full path: /api/v1/instagram/v3/search_hashtags -->

### Parameters

| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
| query | string | ✅ | 搜索关键词/Search keyword | fashion |
| rank_token | string |  | >- |  |

### Response

Standard MaxHub response: `{code, message, message_zh, data, cache_url}`

### Description

### 用途:
- Instagram话题标签搜索接口
- 仅返回话题标签搜索结果
### 参数:
- query: 搜索关键词
- rank_token: 上一次搜索返回的rank_token，用于翻页
### 返回:
- `data.hashtags`: 话题标签搜索结果列表
- `data.rank_token`: 排序token
- `data.see_more`: 更多信息
- `data.inform_module`: 提示模块

## search_locations

`GET /api/v1/instagram/v2/search_locations`

<!-- Full path: /api/v1/instagram/v2/search_locations -->

### Parameters

| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
| keyword | string | ✅ | 搜索关键词/Search keyword | paris |

### Response

Standard MaxHub response: `{code, message, message_zh, data, cache_url}`

### Description

### 用途:
- 根据关键词搜索Instagram地点
### 参数:
- keyword: 搜索关键词（地点名称、城市等）
### 返回:
- `data.items`: 地点列表，包含名称、地址、坐标等

## search_music

`GET /api/v1/instagram/v2/search_music`

<!-- Full path: /api/v1/instagram/v2/search_music -->

### Parameters

| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
| keyword | string | ✅ | 搜索关键词/Search keyword | happy |

### Response

Standard MaxHub response: `{code, message, message_zh, data, cache_url}`

### Description

### 用途:
 - 根据关键词搜索Instagram上可用的音乐
 ### 参数:
 - keyword: 搜索关键词
 ### 返回:
 - `data.items`: 音乐列表，包含标题、艺术家、时长、音频ID等

---

See SKILL.md for cross-group orchestration patterns.

Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal:  | SkillSpector: suspicious (CRITICAL)