mcpField
A
alibabacloud-iqs-weather-query

alibabacloud-iqs-weather-query

github.com/aliyunその他28179 回インストール1 日前に更新
リポジトリ

alibabacloud-iqs-weather-query について

Alibaba Cloud IQS のウェブ検索とページ読み取りで、都市の7日間予報を取得するスキルです。対応サイトは構造化データにし、未対応サイトはエージェントが解釈できるテキストで返します。

主な機能

  1. 01都市の7日間予報
  2. 02IQS による検索とページ読み取り
  3. 03対応サイトの構造化解析
  4. 04未対応サイトの生テキスト返却
  5. 05拡張可能なサイト解析レジストリ

活用シーン

  1. 01都市の週間予報の確認
  2. 02対応サイトからの天気情報取得
  3. 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エンドポイント目的ドキュメント
UnifiedSearchcloud-iqs.aliyuncs.com/search/unified天気ページのウェブ検索Doc
ReadPageBasiccloud-iqs.aliyuncs.com/readpage/scrape天気ウェブページの読み取りと解析Doc

検索優先サイト(専用パーサーあり):

  1. weather.cma.cn(中国気象局)— parseCmaWeather → readabilityMode: normal
  2. baidu.weather.com.cn / sq.weather.com.cn(中国天気網モバイル版)— parseBaiduWeatherComCn → readabilityMode: normal
  3. weather.com.cn(中国天気網、その他すべてのサブドメイン)— parseWeatherComCn → readabilityMode: normal
  4. その他のサイト — パーサーなし。未加工のテキストを返します → readabilityMode: article(本文をより明確に抽出)

エラー処理

エラーコード説明解決方法
CREDENTIALS_MISSINGAPI Key が設定されていませんALIYUN_IQS_API_KEY 環境変数を設定してください
NO_RESULTS天気情報が見つかりませんでした都市名が正しいことを確認してください
QUERY_FAILEDAPI 呼び出しに失敗しましたネットワークを確認し、認証情報を検証してください
PARSE_FAILEDウェブページから天気データを解析できませんでした対象サイトのページ構造が変更された可能性があります。該当するパーサーを更新するか、新しいパーサーを追加してください(「拡張」セクションを参照)

ベストプラクティス

  1. 国内の天気を検索する場合は中国の都市名を使用してください。精度が向上します。
  2. Node.js >= 18 が必要です。ネイティブの fetch API を使用するため、npm のインストールは不要です。
  3. キャッシュに関する注意。ReadPage では maxAge が設定されていないため、常に最新のデータを取得します。
  4. 拡張可能なパーサー。天気サイトごとに専用のパーサーがあります。新しいサイトを追加するには、PARSER_REGISTRY に登録してください。

継続的な進化

このスキルは、時間の経過とともに自己改善するように設計されています。スクリプトが未知のサイト形式(該当するパーサーがない形式)を検出すると、evolveHint フィールドを含む parseMode: "raw" を返します。

parseMode が "raw" の場合のエージェントの動作:

  1. まず、ユーザーに回答します — LLM の理解力を使って rawText から天気情報を抽出し、すぐにユーザーに回答します。
  2. 次に、機能を進化させます — 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,
  };
}

各予報項目の戻り値の形式:

フィールド型例
datestring"04/07 星期二"
weatherstring"晴转多云"
temperaturestring"5°C ~ 18°C"
windDirectionstring"北风"
windSpeedstring"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)を参考実装としてご覧ください。

コメント