alibabacloud-iqs-weather-query について
Alibaba Cloud IQS のウェブ検索とページ読み取りで、都市の7日間予報を取得するスキルです。対応サイトは構造化データにし、未対応サイトはエージェントが解釈できるテキストで返します。
主な機能
- 01都市の7日間予報
- 02IQS による検索とページ読み取り
- 03対応サイトの構造化解析
- 04未対応サイトの生テキスト返却
- 05拡張可能なサイト解析レジストリ
活用シーン
- 01都市の週間予報の確認
- 02対応サイトからの天気情報取得
- 03解析器のない天気ページの解釈
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ aliyun/ alibabacloud-aiops-skills --skill alibabacloud-iqs-weather-queryインストール後、Claude Code で/alibabacloud-iqs-weather-queryを入力して読み込まれたか確認します。
同梱ファイルscripts/weather.mjs
詳細
IQS Weather Query - 7日間の天気予報
Alibaba Cloud IQS のウェブ検索(UnifiedSearch)およびページ読み取り(ReadPageBasic)機能を使用して、任意の都市の7日間の天気予報を検索します。
基盤サービス: alibabacloud-iqs-search
ハイブリッド解析戦略:
- 対応済みサイト(weather.cma.cn、weather.com.cn):専用パーサーが構造化 JSON を抽出 →
parseMode: "structured" - 未対応サイト:ReadPage がメインコンテンツを抽出(readabilityMode: article)し、抽出のヒントを含む未加工のテキストを返します →
parseMode: "raw"。エージェント(LLM)が直接解釈します
| 出力フィールド | 説明 |
|---|---|
| parseMode | "structured"(解析済み JSON)または "raw"(エージェント向けテキスト) |
| weather | 天気(晴れ、曇り、雨など) |
| temperature | 気温の範囲 |
| windSpeed | 風速/風力 |
| windDirection | 風向 |
環境設定
事前確認:ALIYUN_IQS_API_KEY が必要です
if [ -z "$ALIYUN_IQS_API_KEY" ]; then echo "API Key 未配置"; else echo "API Key 已配置(已脱敏)"; fi出力が「API Key 未配置」の場合、API Key は設定されていません。
ALIYUN_IQS_API_KEY の取得方法: Aliyun IQS Documentation を参照してください。
環境変数の設定(いずれかを選択):
オプション 1:一時的(現在のターミナルセッションのみ)
export ALIYUN_IQS_API_KEY="your-api-key-here"オプション 2:永続的(推奨)
~/.zshrc または ~/.bashrc に追加します:
export ALIYUN_IQS_API_KEY="your-api-key-here"
source ~/.zshrcまたはsource ~/.bashrcを実行して反映します。別の方法: API Key を
~/.alibabacloud/iqs/envファイルに配置します:ALIYUN_IQS_API_KEY=your-api-key-here
ワークフロー
User Input (city name)
│
▼
┌─────────────────────────┐
│ Step 1: UnifiedSearch │ Search: "{city} 天气预报 未来7天"
│ (Web Search) │ Priority: weather.cma.cn > weather.com.cn
└──────────┬──────────────┘
│ Best weather URL
▼
┌─────────────────────────┐
│ Step 2: ReadPageBasic │ Known site → readabilityMode: normal
│ (Page Reading) │ Unknown site → readabilityMode: article
└──────────┬──────────────┘
│ Page content
▼
Known site?
╱ ╲
YES NO
│ │
▼ ▼
Parser Return rawText
Router + hint for agent
│ (parseMode: raw)
▼
Structured JSON
(parseMode: structured)
使用方法
前提条件
- Node.js >= 18(ネイティブの
fetchサポートが必要です) - 追加の npm 依存関係は不要です
クエリの実行
node scripts/weather.mjs <city>
例:
node scripts/weather.mjs 北京
node scripts/weather.mjs 上海
node scripts/weather.mjs 杭州
node scripts/weather.mjs Tokyo
出力形式
構造化モード(対応済みサイト — 正常に解析):
{
"success": true,
"data": {
"city": "北京",
"parseMode": "structured",
"queryTime": "2026-03-26T10:00:00.000Z",
"forecastDays": 7,
"forecast": [
{
"date": "3月26日",
"weather": "晴",
"temperature": "5°C ~ 18°C",
"windDirection": "北风",
"windSpeed": "3-4级"
}
],
"source": "https://weather.cma.cn/..."
}
}
未加工モード(未対応サイト — エージェントがテキストを解釈):
{
"success": true,
"data": {
"city": "北京",
"parseMode": "raw",
"hint": "以下是北京天气网页的正文内容,请从中提取未来7天的天气预报信息...",
"rawText": "北京天气预报\n今天 晴 18°C/5°C ...",
"evolveHint": "[持续进化] 当前站点 \"example.com\" 没有匹配的解析器...",
"source": "https://example.com/weather/beijing"
}
}
使用する IQS API
| API | エンドポイント | 目的 | ドキュメント |
|---|---|---|---|
| UnifiedSearch | cloud-iqs.aliyuncs.com/search/unified | 天気ページのウェブ検索 | Doc |
| ReadPageBasic | cloud-iqs.aliyuncs.com/readpage/scrape | 天気ウェブページの読み取りと解析 | Doc |
検索優先サイト(専用パーサーあり):
- weather.cma.cn(中国気象局)—
parseCmaWeather→ readabilityMode:normal - baidu.weather.com.cn / sq.weather.com.cn(中国天気網モバイル版)—
parseBaiduWeatherComCn→ readabilityMode:normal - weather.com.cn(中国天気網、その他すべてのサブドメイン)—
parseWeatherComCn→ readabilityMode:normal - その他のサイト — パーサーなし。未加工のテキストを返します → readabilityMode:
article(本文をより明確に抽出)
エラー処理
| エラーコード | 説明 | 解決方法 |
|---|---|---|
| CREDENTIALS_MISSING | API Key が設定されていません | ALIYUN_IQS_API_KEY 環境変数を設定してください |
| NO_RESULTS | 天気情報が見つかりませんでした | 都市名が正しいことを確認してください |
| QUERY_FAILED | API 呼び出しに失敗しました | ネットワークを確認し、認証情報を検証してください |
| PARSE_FAILED | ウェブページから天気データを解析できませんでした | 対象サイトのページ構造が変更された可能性があります。該当するパーサーを更新するか、新しいパーサーを追加してください(「拡張」セクションを参照) |
ベストプラクティス
- 国内の天気を検索する場合は中国の都市名を使用してください。精度が向上します。
- Node.js >= 18 が必要です。ネイティブの
fetchAPI を使用するため、npm のインストールは不要です。 - キャッシュに関する注意。ReadPage では
maxAgeが設定されていないため、常に最新のデータを取得します。 - 拡張可能なパーサー。天気サイトごとに専用のパーサーがあります。新しいサイトを追加するには、
PARSER_REGISTRYに登録してください。
継続的な進化
このスキルは、時間の経過とともに自己改善するように設計されています。スクリプトが未知のサイト形式(該当するパーサーがない形式)を検出すると、evolveHint フィールドを含む parseMode: "raw" を返します。
parseMode が "raw" の場合のエージェントの動作:
- まず、ユーザーに回答します — LLM の理解力を使って
rawTextから天気情報を抽出し、すぐにユーザーに回答します。 - 次に、機能を進化させます —
evolveHintを読み取り、rawTextの形式パターンを分析して、新しいパーサー関数を作成し、PARSER_REGISTRYに登録します(下記の「拡張」セクションを参照)。これにより、次回同じサイト形式に遭遇した際には、直接structuredモードで処理されるようになります。
First query for unknown site:
search → readpage → no parser match → raw mode → agent answers user
→ agent writes new parser ← evolveHint
Subsequent queries for same site:
search → readpage → parser match → structured mode → direct JSON output
ポイント: 新しい都市を検索するたびに、このスキルは賢くなります。raw モードでの遭遇は、新しいパーサーを追加して、より多くのサイト形式に順次対応していく機会です。
拡張:新しい天気サイトのパーサーを追加する
スクリプトでは、パーサーレジストリパターンを使用しています。天気サイトごとに専用のパーサー関数があり、ルーターは URL に基づいて自動的に振り分けます。新しいサイトへの対応を追加するには、次の 3 つの手順に従ってください。
手順 1:パーサー関数を作成する
weather.mjs の scripts に新しいパーサー関数を追加します。関数は (content, city) を受け取り、次の標準形式を返す必要があります。
function parseMyNewSite(content, city) {
const forecast = [];
// Parse the text content from ReadPage for this specific site
// Extract: date, weather, temperature, windDirection, windSpeed
// ...your parsing logic here...
return {
city,
queryTime: new Date().toISOString(),
forecastDays: Math.min(forecast.length, 7),
forecast: forecast.slice(0, 7),
raw: forecast.length === 0 ? content.substring(0, 2000) : undefined,
};
}
各予報項目の戻り値の形式:
| フィールド | 型 | 例 |
|---|---|---|
| date | string | "04/07 星期二" |
| weather | string | "晴转多云" |
| temperature | string | "5°C ~ 18°C" |
| windDirection | string | "北风" |
| windSpeed | string | "3-4级" |
手順 2:PARSER_REGISTRY に登録する
weather.mjs の先頭にあるレジストリ配列にパーサーを追加します。順序が重要です。上にあるほど優先度が高くなります。
const PARSER_REGISTRY = [
{ pattern: 'weather.cma.cn', parser: parseCmaWeather },
{ pattern: 'baidu.weather.com.cn', parser: parseBaiduWeatherComCn },
{ pattern: 'sq.weather.com.cn', parser: parseBaiduWeatherComCn },
{ pattern: 'weather.com.cn', parser: parseWeatherComCn },
{ pattern: 'mynewsite.com', parser: parseMyNewSite }, // ← Add here
];
手順 3:検索優先度に追加する(任意)
検索結果で新しいサイトを優先したい場合は、PREFERRED_WEATHER_SITES に追加してください。
const PREFERRED_WEATHER_SITES = [
'weather.cma.cn',
'weather.com.cn',
'mynewsite.com', // ← Add here
];
ルーターの仕組み
parseWeatherData(content, city, url)
│
├─ URL contains "weather.cma.cn"? → parseCmaWeather(content, city)
├─ URL contains "baidu.weather.com.cn"? → parseBaiduWeatherComCn(content, city)
├─ URL contains "sq.weather.com.cn"? → parseBaiduWeatherComCn(content, city)
├─ URL contains "weather.com.cn"? → parseWeatherComCn(content, city)
├─ URL contains "mynewsite.com"? → parseMyNewSite(content, city)
│
└─ No match or result < 3 days? → return rawText + hint (agent interprets)
ヒント: パーサーを書く前に、
node -e "..."と ReadPage API を使って、新しいサイトのテキスト形式を取得して確認してください。既存のパーサー(parseCmaWeather、parseWeatherComCn)を参考実装としてご覧ください。