norikae-mcp 0.1.0 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -1
- package/dist/index.js +97 -9
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +80 -16
- package/dist/index.test.js.map +1 -1
- package/dist/test.js +64 -9
- package/dist/test.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -12,6 +12,7 @@ Uses Yahoo! Transit data to find optimal routes between stations.*
|
|
|
12
12
|
## 機能 / Features
|
|
13
13
|
|
|
14
14
|
- 🚉 駅から駅への乗り換えルート検索 / Station-to-station route search
|
|
15
|
+
- 🔀 経由駅の指定(最大3駅)/ Via station specification (up to 3 stations)
|
|
15
16
|
- ⏰ 指定時刻での検索(出発・到着時刻指定)/ Departure or arrival time specification
|
|
16
17
|
- 💰 IC運賃の表示 / IC card fare display
|
|
17
18
|
- 🔄 乗り換え回数・所要時間の比較 / Transfer count and travel time comparison
|
|
@@ -90,6 +91,7 @@ npx norikae-mcp
|
|
|
90
91
|
|-----------|------|------|---------------------|
|
|
91
92
|
| `from` | string | ✅ | 出発駅名 / Departure station (e.g., 東京, 新宿) |
|
|
92
93
|
| `to` | string | ✅ | 到着駅名 / Arrival station (e.g., 九段下, 横浜) |
|
|
94
|
+
| `via` | string[] | - | 経由駅名の配列(最大3駅)/ Via stations array (max 3) |
|
|
93
95
|
| `year` | number | - | 出発年 / Year (default: current) |
|
|
94
96
|
| `month` | number | - | 出発月 / Month (default: current) |
|
|
95
97
|
| `day` | number | - | 出発日 / Day (default: current) |
|
|
@@ -100,8 +102,9 @@ npx norikae-mcp
|
|
|
100
102
|
|
|
101
103
|
| パラメータ | 型 | デフォルト | 説明 / Description |
|
|
102
104
|
|-----------|------|----------|---------------------|
|
|
103
|
-
| `timeType` | `departure` \| `arrival` | `departure` | 時刻指定タイプ / Time type |
|
|
105
|
+
| `timeType` | `departure` \| `arrival` \| `first_train` \| `last_train` \| `unspecified` | `departure` | 時刻指定タイプ / Time type |
|
|
104
106
|
| `ticket` | `ic` \| `cash` | `ic` | 運賃タイプ / Fare type |
|
|
107
|
+
| `seatPreference` | `non_reserved` \| `reserved` \| `green` | `non_reserved` | 座席指定 / Seat preference |
|
|
105
108
|
| `walkSpeed` | `fast` \| `slightly_fast` \| `slightly_slow` \| `slow` | `slightly_slow` | 歩く速度 / Walking speed |
|
|
106
109
|
| `sortBy` | `time` \| `transfer` \| `fare` | `time` | 並び順 / Sort order |
|
|
107
110
|
|
|
@@ -131,6 +134,16 @@ AIに以下のように話しかけると、自動的に適切なオプション
|
|
|
131
134
|
| "How to get from Tokyo to Shibuya" | `from: 東京`, `to: 渋谷` |
|
|
132
135
|
| "Route from Shinjuku to Yokohama" | `from: 新宿`, `to: 横浜` |
|
|
133
136
|
|
|
137
|
+
### 経由駅の指定 / Via Stations
|
|
138
|
+
|
|
139
|
+
| あなたの質問 / Your Question | 認識されるオプション / Recognized Options |
|
|
140
|
+
|------------------------------|------------------------------------------|
|
|
141
|
+
| 「東京から新宿まで、表参道経由で」 | `from: 東京`, `to: 新宿`, `via: ["表参道"]` |
|
|
142
|
+
| 「渋谷から池袋、原宿と新宿を経由して」 | `from: 渋谷`, `to: 池袋`, `via: ["原宿", "新宿"]` |
|
|
143
|
+
| 「品川から上野、東京駅と秋葉原を通って」 | `from: 品川`, `to: 上野`, `via: ["東京", "秋葉原"]` |
|
|
144
|
+
| "From Tokyo to Shinjuku via Omotesando" | `from: 東京`, `to: 新宿`, `via: ["表参道"]` |
|
|
145
|
+
| "Shibuya to Ikebukuro, passing through Harajuku and Shinjuku" | `from: 渋谷`, `to: 池袋`, `via: ["原宿", "新宿"]` |
|
|
146
|
+
|
|
134
147
|
### 時刻指定 / Time Specification
|
|
135
148
|
|
|
136
149
|
| あなたの質問 / Your Question | 認識されるオプション / Recognized Options |
|
|
@@ -150,6 +163,29 @@ AIに以下のように話しかけると、自動的に適切なオプション
|
|
|
150
163
|
| "I want to arrive by 6 PM" | `timeType: arrival`, `hour: 18` |
|
|
151
164
|
| "Need to be there for a 9 AM meeting" | `timeType: arrival`, `hour: 9` |
|
|
152
165
|
|
|
166
|
+
### 始発・終電 / First/Last Train (timeType)
|
|
167
|
+
|
|
168
|
+
| あなたの質問 / Your Question | 認識されるオプション / Recognized Options |
|
|
169
|
+
|------------------------------|------------------------------------------|
|
|
170
|
+
| 「始発で」 | `timeType: first_train` |
|
|
171
|
+
| 「一番早い電車」 | `timeType: first_train` |
|
|
172
|
+
| 「終電で帰りたい」 | `timeType: last_train` |
|
|
173
|
+
| 「最終電車は?」 | `timeType: last_train` |
|
|
174
|
+
| "First train of the day" | `timeType: first_train` |
|
|
175
|
+
| "Last train home" | `timeType: last_train` |
|
|
176
|
+
|
|
177
|
+
### 座席指定 / Seat Preference (seatPreference)
|
|
178
|
+
|
|
179
|
+
| あなたの質問 / Your Question | 認識されるオプション / Recognized Options |
|
|
180
|
+
|------------------------------|------------------------------------------|
|
|
181
|
+
| 「自由席で」 | `seatPreference: non_reserved` (default) |
|
|
182
|
+
| 「指定席で」 | `seatPreference: reserved` |
|
|
183
|
+
| 「グリーン車で」 | `seatPreference: green` |
|
|
184
|
+
| 「贅沢にグリーン車で」 | `seatPreference: green` |
|
|
185
|
+
| "Non-reserved seat" | `seatPreference: non_reserved` |
|
|
186
|
+
| "Reserved seat please" | `seatPreference: reserved` |
|
|
187
|
+
| "Green car / first class" | `seatPreference: green` |
|
|
188
|
+
|
|
153
189
|
### 運賃タイプ / Fare Type (ticket)
|
|
154
190
|
|
|
155
191
|
| あなたの質問 / Your Question | 認識されるオプション / Recognized Options |
|
|
@@ -222,6 +258,20 @@ AIに以下のように話しかけると、自動的に適切なオプション
|
|
|
222
258
|
```
|
|
223
259
|
→ `from: 新宿`, `to: 品川`, `timeType: arrival`, `hour: 18`, `useShinkansen: false`, `useAirline: false`, `sortBy: transfer`
|
|
224
260
|
|
|
261
|
+
**例5 / Example 5: 経由駅を指定 / Specifying via stations**
|
|
262
|
+
```
|
|
263
|
+
「東京から新宿まで、表参道と飯田橋を経由して、一番安いルートで」
|
|
264
|
+
"From Tokyo to Shinjuku via Omotesando and Iidabashi, cheapest route"
|
|
265
|
+
```
|
|
266
|
+
→ `from: 東京`, `to: 新宿`, `via: ["表参道", "飯田橋"]`, `sortBy: fare`
|
|
267
|
+
|
|
268
|
+
**例6 / Example 6: 観光ルート / Sightseeing route**
|
|
269
|
+
```
|
|
270
|
+
「浅草から原宿まで、上野と秋葉原と東京を通って、ゆっくり歩きで」
|
|
271
|
+
"From Asakusa to Harajuku, passing through Ueno, Akihabara, and Tokyo, walking slowly"
|
|
272
|
+
```
|
|
273
|
+
→ `from: 浅草`, `to: 原宿`, `via: ["上野", "秋葉原", "東京"]`, `walkSpeed: slow`
|
|
274
|
+
|
|
225
275
|
## 開発 / Development
|
|
226
276
|
|
|
227
277
|
```bash
|
package/dist/index.js
CHANGED
|
@@ -10,13 +10,15 @@ const server = new McpServer({
|
|
|
10
10
|
const searchRouteSchema = {
|
|
11
11
|
from: z.string().describe('出発駅名(例:東京、新宿、渋谷)'),
|
|
12
12
|
to: z.string().describe('到着駅名(例:九段下、横浜、品川)'),
|
|
13
|
+
via: z.array(z.string()).optional().describe('経由駅名の配列(最大3駅、例:["表参道", "飯田橋"])'),
|
|
13
14
|
year: z.number().optional().describe('出発年(例:2026)'),
|
|
14
15
|
month: z.number().optional().describe('出発月(1-12)'),
|
|
15
16
|
day: z.number().optional().describe('出発日(1-31)'),
|
|
16
17
|
hour: z.number().optional().describe('出発時刻の時(0-23)'),
|
|
17
18
|
minute: z.number().optional().describe('出発時刻の分(0-59)'),
|
|
18
|
-
timeType: z.enum(['departure', 'arrival']).optional().describe('時刻指定タイプ:departure=出発時刻、arrival
|
|
19
|
+
timeType: z.enum(['departure', 'arrival', 'first_train', 'last_train', 'unspecified']).optional().describe('時刻指定タイプ:departure=出発時刻、arrival=到着時刻、first_train=始発、last_train=終電、unspecified=指定なし'),
|
|
19
20
|
ticket: z.enum(['ic', 'cash']).optional().describe('運賃タイプ:ic=IC運賃、cash=きっぷ運賃'),
|
|
21
|
+
seatPreference: z.enum(['non_reserved', 'reserved', 'green']).optional().describe('座席指定:non_reserved=自由席優先、reserved=指定席優先、green=グリーン車優先'),
|
|
20
22
|
walkSpeed: z.enum(['fast', 'slightly_fast', 'slightly_slow', 'slow']).optional().describe('歩く速度'),
|
|
21
23
|
sortBy: z.enum(['time', 'transfer', 'fare']).optional().describe('並び順:time=到着が早い順、transfer=乗換回数順、fare=料金安い順'),
|
|
22
24
|
useAirline: z.boolean().optional().describe('空路を使う'),
|
|
@@ -26,17 +28,89 @@ const searchRouteSchema = {
|
|
|
26
28
|
useLocalBus: z.boolean().optional().describe('路線バスを使う'),
|
|
27
29
|
useFerry: z.boolean().optional().describe('フェリーを使う'),
|
|
28
30
|
};
|
|
31
|
+
// register prompt for usage instructions
|
|
32
|
+
server.registerPrompt('norikae-usage', {
|
|
33
|
+
description: 'Instructions for using the Japanese train route search tool',
|
|
34
|
+
}, () => ({
|
|
35
|
+
messages: [
|
|
36
|
+
{
|
|
37
|
+
role: 'user',
|
|
38
|
+
content: {
|
|
39
|
+
type: 'text',
|
|
40
|
+
text: `# 乗換案内MCP 使用ガイド / Norikae MCP Usage Guide
|
|
41
|
+
|
|
42
|
+
## 重要 / Important
|
|
43
|
+
- 駅名は必ず日本語(漢字・かな)で入力してください
|
|
44
|
+
- Station names MUST be in Japanese kanji/kana
|
|
45
|
+
- Convert English AND Chinese station names to Japanese before calling
|
|
46
|
+
|
|
47
|
+
## 英語→日本語 / English → Japanese
|
|
48
|
+
| English | Japanese |
|
|
49
|
+
|---------|----------|
|
|
50
|
+
| Tokyo | 東京 |
|
|
51
|
+
| Shinjuku | 新宿 |
|
|
52
|
+
| Shibuya | 渋谷 |
|
|
53
|
+
| Ikebukuro | 池袋 |
|
|
54
|
+
| Ueno | 上野 |
|
|
55
|
+
| Akihabara | 秋葉原 |
|
|
56
|
+
| Ginza | 銀座 |
|
|
57
|
+
| Roppongi | 六本木 |
|
|
58
|
+
| Harajuku | 原宿 |
|
|
59
|
+
| Yokohama | 横浜 |
|
|
60
|
+
| Osaka | 大阪 |
|
|
61
|
+
| Kyoto | 京都 |
|
|
62
|
+
| Narita Airport | 成田空港 |
|
|
63
|
+
| Haneda Airport | 羽田空港 |
|
|
64
|
+
|
|
65
|
+
## 中国語→日本語 / Chinese → Japanese
|
|
66
|
+
Japanese kanji may differ from Chinese hanzi:
|
|
67
|
+
| 简体/繁體 | 日本語 |
|
|
68
|
+
|-----------|--------|
|
|
69
|
+
| 东京/東京 | 東京 |
|
|
70
|
+
| 涩谷/澀谷 | 渋谷 |
|
|
71
|
+
| 秋叶原/秋葉原 | 秋葉原 |
|
|
72
|
+
| 横滨/橫濱 | 横浜 |
|
|
73
|
+
|
|
74
|
+
## 使用例 / Usage Examples
|
|
75
|
+
User: "How do I get from Tokyo to Shinjuku?"
|
|
76
|
+
→ Call search_route with: from="東京", to="新宿"
|
|
77
|
+
|
|
78
|
+
User: "東京から渋谷まで表参道経由で"
|
|
79
|
+
→ Call search_route with: from="東京", to="渋谷", via=["表参道"]`,
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
}));
|
|
29
84
|
// register search_route tool
|
|
85
|
+
const toolDescription = `Search train routes between stations in Japan using Yahoo! Transit.
|
|
86
|
+
|
|
87
|
+
IMPORTANT: Station names MUST be in Japanese kanji/kana. Convert before calling:
|
|
88
|
+
|
|
89
|
+
English → Japanese:
|
|
90
|
+
- Tokyo → 東京, Shinjuku → 新宿, Shibuya → 渋谷, Ikebukuro → 池袋
|
|
91
|
+
- Ueno → 上野, Akihabara → 秋葉原, Ginza → 銀座, Roppongi → 六本木
|
|
92
|
+
- Yokohama → 横浜, Osaka → 大阪, Kyoto → 京都
|
|
93
|
+
- Narita Airport → 成田空港, Haneda Airport → 羽田空港
|
|
94
|
+
|
|
95
|
+
Chinese (Simplified/Traditional) → Japanese kanji:
|
|
96
|
+
- 东京/東京 → 東京, 新宿 → 新宿, 涩谷/澀谷 → 渋谷
|
|
97
|
+
- 秋叶原/秋葉原 → 秋葉原, 横滨/橫濱 → 横浜
|
|
98
|
+
Note: Japanese kanji may differ from Chinese hanzi (e.g., 渋 vs 涩/澀, 横 vs 横/橫)
|
|
99
|
+
|
|
100
|
+
Examples:
|
|
101
|
+
- "Tokyo to Shinjuku" → from: "東京", to: "新宿"
|
|
102
|
+
- "从东京到新宿" → from: "東京", to: "新宿"
|
|
103
|
+
- "Shibuya to Ikebukuro via Harajuku" → from: "渋谷", to: "池袋", via: ["原宿"]`;
|
|
30
104
|
server.registerTool('search_route', {
|
|
31
105
|
title: '乗り換え検索',
|
|
32
|
-
description:
|
|
106
|
+
description: toolDescription,
|
|
33
107
|
inputSchema: searchRouteSchema,
|
|
34
108
|
annotations: {
|
|
35
109
|
readOnlyHint: true, // data is only read, not modified
|
|
36
110
|
openWorldHint: true, // interacts with external service (Yahoo)
|
|
37
111
|
},
|
|
38
112
|
}, async (args) => {
|
|
39
|
-
const { from, to, year, month, day, hour, minute, timeType, ticket, walkSpeed, sortBy, useAirline, useShinkansen, useExpress, useHighwayBus, useLocalBus, useFerry, } = args;
|
|
113
|
+
const { from, to, via, year, month, day, hour, minute, timeType, ticket, seatPreference, walkSpeed, sortBy, useAirline, useShinkansen, useExpress, useHighwayBus, useLocalBus, useFerry, } = args;
|
|
40
114
|
// default to current time if not specified
|
|
41
115
|
const now = new Date();
|
|
42
116
|
const y = year ?? now.getFullYear();
|
|
@@ -44,9 +118,12 @@ server.registerTool('search_route', {
|
|
|
44
118
|
const d = day ?? now.getDate();
|
|
45
119
|
const hh = hour ?? now.getHours();
|
|
46
120
|
const mm = minute ?? now.getMinutes();
|
|
121
|
+
// limit via stations to max 3
|
|
122
|
+
const viaStations = via?.slice(0, 3) ?? [];
|
|
47
123
|
const options = {
|
|
48
124
|
timeType: timeType ?? 'departure',
|
|
49
125
|
ticket: ticket ?? 'ic',
|
|
126
|
+
seatPreference: seatPreference ?? 'non_reserved',
|
|
50
127
|
walkSpeed: walkSpeed ?? 'slightly_slow',
|
|
51
128
|
sortBy: sortBy ?? 'time',
|
|
52
129
|
useAirline: useAirline ?? true,
|
|
@@ -56,7 +133,7 @@ server.registerTool('search_route', {
|
|
|
56
133
|
useLocalBus: useLocalBus ?? true,
|
|
57
134
|
useFerry: useFerry ?? true,
|
|
58
135
|
};
|
|
59
|
-
const url = buildYahooTransitUrl(from, to, y, m, d, hh, mm, options);
|
|
136
|
+
const url = buildYahooTransitUrl(from, to, viaStations, y, m, d, hh, mm, options);
|
|
60
137
|
try {
|
|
61
138
|
const response = await fetch(url);
|
|
62
139
|
const html = await response.text();
|
|
@@ -72,11 +149,18 @@ server.registerTool('search_route', {
|
|
|
72
149
|
};
|
|
73
150
|
}
|
|
74
151
|
});
|
|
75
|
-
function buildYahooTransitUrl(from, to, year, month, day, hour, minute, options) {
|
|
152
|
+
function buildYahooTransitUrl(from, to, via, year, month, day, hour, minute, options) {
|
|
76
153
|
// map options to Yahoo URL parameters
|
|
77
|
-
|
|
154
|
+
// type: 1=出発, 4=到着, 3=始発, 2=終電, 5=指定なし
|
|
155
|
+
const timeTypeMap = { departure: '1', arrival: '4', first_train: '3', last_train: '2', unspecified: '5' };
|
|
156
|
+
// ticket: ic=ICカード優先, normal=現金(きっぷ)優先
|
|
157
|
+
const ticketMap = { ic: 'ic', cash: 'normal' };
|
|
158
|
+
// expkind: 1=自由席優先, 2=指定席優先, 3=グリーン車優先
|
|
159
|
+
const seatPreferenceMap = { non_reserved: '1', reserved: '2', green: '3' };
|
|
160
|
+
// ws: 1=急いで, 2=少し急いで, 3=少しゆっくり, 4=ゆっくり
|
|
78
161
|
const walkSpeedMap = { fast: '1', slightly_fast: '2', slightly_slow: '3', slow: '4' };
|
|
79
|
-
|
|
162
|
+
// s: 0=到着が早い順, 1=料金が安い順, 2=乗換回数順
|
|
163
|
+
const sortByMap = { time: '0', fare: '1', transfer: '2' };
|
|
80
164
|
const params = new URLSearchParams({
|
|
81
165
|
from: from,
|
|
82
166
|
to: to,
|
|
@@ -87,8 +171,8 @@ function buildYahooTransitUrl(from, to, year, month, day, hour, minute, options)
|
|
|
87
171
|
m1: Math.floor(minute / 10).toString(),
|
|
88
172
|
m2: (minute % 10).toString(),
|
|
89
173
|
type: timeTypeMap[options.timeType],
|
|
90
|
-
ticket: options.ticket,
|
|
91
|
-
expkind:
|
|
174
|
+
ticket: ticketMap[options.ticket],
|
|
175
|
+
expkind: seatPreferenceMap[options.seatPreference],
|
|
92
176
|
ws: walkSpeedMap[options.walkSpeed],
|
|
93
177
|
s: sortByMap[options.sortBy],
|
|
94
178
|
al: options.useAirline ? '1' : '0',
|
|
@@ -98,6 +182,10 @@ function buildYahooTransitUrl(from, to, year, month, day, hour, minute, options)
|
|
|
98
182
|
lb: options.useLocalBus ? '1' : '0',
|
|
99
183
|
sr: options.useFerry ? '1' : '0',
|
|
100
184
|
});
|
|
185
|
+
// add via stations (multiple via params supported)
|
|
186
|
+
for (const station of via) {
|
|
187
|
+
params.append('via', station);
|
|
188
|
+
}
|
|
101
189
|
return `https://transit.yahoo.co.jp/search/result?${params.toString()}`;
|
|
102
190
|
}
|
|
103
191
|
function extractMainContent(html) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,gCAAgC;AAChC,MAAM,iBAAiB,GAAG;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC7C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;IACnD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;IAClD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;IAChD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IACpD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IACtD,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.test.js
CHANGED
|
@@ -3,10 +3,17 @@
|
|
|
3
3
|
* Run: npm test
|
|
4
4
|
*/
|
|
5
5
|
import { describe, it, expect } from 'vitest';
|
|
6
|
-
function buildYahooTransitUrl(from, to, year, month, day, hour, minute, options) {
|
|
7
|
-
|
|
6
|
+
function buildYahooTransitUrl(from, to, via, year, month, day, hour, minute, options) {
|
|
7
|
+
// type: 1=出発, 4=到着, 3=始発, 2=終電, 5=指定なし
|
|
8
|
+
const timeTypeMap = { departure: '1', arrival: '4', first_train: '3', last_train: '2', unspecified: '5' };
|
|
9
|
+
// ticket: ic=ICカード優先, normal=現金(きっぷ)優先
|
|
10
|
+
const ticketMap = { ic: 'ic', cash: 'normal' };
|
|
11
|
+
// expkind: 1=自由席優先, 2=指定席優先, 3=グリーン車優先
|
|
12
|
+
const seatPreferenceMap = { non_reserved: '1', reserved: '2', green: '3' };
|
|
13
|
+
// ws: 1=急いで, 2=少し急いで, 3=少しゆっくり, 4=ゆっくり
|
|
8
14
|
const walkSpeedMap = { fast: '1', slightly_fast: '2', slightly_slow: '3', slow: '4' };
|
|
9
|
-
|
|
15
|
+
// s: 0=到着が早い順, 1=料金が安い順, 2=乗換回数順
|
|
16
|
+
const sortByMap = { time: '0', fare: '1', transfer: '2' };
|
|
10
17
|
const params = new URLSearchParams({
|
|
11
18
|
from: from,
|
|
12
19
|
to: to,
|
|
@@ -17,8 +24,8 @@ function buildYahooTransitUrl(from, to, year, month, day, hour, minute, options)
|
|
|
17
24
|
m1: Math.floor(minute / 10).toString(),
|
|
18
25
|
m2: (minute % 10).toString(),
|
|
19
26
|
type: timeTypeMap[options.timeType],
|
|
20
|
-
ticket: options.ticket,
|
|
21
|
-
expkind:
|
|
27
|
+
ticket: ticketMap[options.ticket],
|
|
28
|
+
expkind: seatPreferenceMap[options.seatPreference],
|
|
22
29
|
ws: walkSpeedMap[options.walkSpeed],
|
|
23
30
|
s: sortByMap[options.sortBy],
|
|
24
31
|
al: options.useAirline ? '1' : '0',
|
|
@@ -28,11 +35,15 @@ function buildYahooTransitUrl(from, to, year, month, day, hour, minute, options)
|
|
|
28
35
|
lb: options.useLocalBus ? '1' : '0',
|
|
29
36
|
sr: options.useFerry ? '1' : '0',
|
|
30
37
|
});
|
|
38
|
+
for (const station of via) {
|
|
39
|
+
params.append('via', station);
|
|
40
|
+
}
|
|
31
41
|
return `https://transit.yahoo.co.jp/search/result?${params.toString()}`;
|
|
32
42
|
}
|
|
33
43
|
const defaultOptions = {
|
|
34
44
|
timeType: 'departure',
|
|
35
45
|
ticket: 'ic',
|
|
46
|
+
seatPreference: 'non_reserved',
|
|
36
47
|
walkSpeed: 'slightly_slow',
|
|
37
48
|
sortBy: 'time',
|
|
38
49
|
useAirline: true,
|
|
@@ -44,12 +55,12 @@ const defaultOptions = {
|
|
|
44
55
|
};
|
|
45
56
|
describe('buildYahooTransitUrl', () => {
|
|
46
57
|
it('should build basic URL with from and to', () => {
|
|
47
|
-
const url = buildYahooTransitUrl('東京', '九段下', 2026, 1, 22, 10, 30, defaultOptions);
|
|
58
|
+
const url = buildYahooTransitUrl('東京', '九段下', [], 2026, 1, 22, 10, 30, defaultOptions);
|
|
48
59
|
expect(url).toContain('from=%E6%9D%B1%E4%BA%AC'); // 東京 encoded
|
|
49
60
|
expect(url).toContain('to=%E4%B9%9D%E6%AE%B5%E4%B8%8B'); // 九段下 encoded
|
|
50
61
|
});
|
|
51
62
|
it('should set correct time parameters', () => {
|
|
52
|
-
const url = buildYahooTransitUrl('東京', '大阪', 2026, 1, 22, 10, 35, defaultOptions);
|
|
63
|
+
const url = buildYahooTransitUrl('東京', '大阪', [], 2026, 1, 22, 10, 35, defaultOptions);
|
|
53
64
|
expect(url).toContain('y=2026');
|
|
54
65
|
expect(url).toContain('m=01');
|
|
55
66
|
expect(url).toContain('d=22');
|
|
@@ -58,43 +69,95 @@ describe('buildYahooTransitUrl', () => {
|
|
|
58
69
|
expect(url).toContain('m2=5'); // 35 % 10 = 5
|
|
59
70
|
});
|
|
60
71
|
it('should set departure type by default', () => {
|
|
61
|
-
const url = buildYahooTransitUrl('東京', '大阪', 2026, 1, 22, 10, 30, defaultOptions);
|
|
72
|
+
const url = buildYahooTransitUrl('東京', '大阪', [], 2026, 1, 22, 10, 30, defaultOptions);
|
|
62
73
|
expect(url).toContain('type=1'); // departure
|
|
63
74
|
});
|
|
64
75
|
it('should set arrival type when specified', () => {
|
|
65
|
-
const url = buildYahooTransitUrl('東京', '大阪', 2026, 1, 22, 18, 0, {
|
|
76
|
+
const url = buildYahooTransitUrl('東京', '大阪', [], 2026, 1, 22, 18, 0, {
|
|
66
77
|
...defaultOptions,
|
|
67
78
|
timeType: 'arrival',
|
|
68
79
|
});
|
|
69
|
-
expect(url).toContain('type=
|
|
80
|
+
expect(url).toContain('type=4'); // arrival
|
|
81
|
+
});
|
|
82
|
+
it('should set first_train type', () => {
|
|
83
|
+
const url = buildYahooTransitUrl('東京', '大阪', [], 2026, 1, 22, 5, 0, {
|
|
84
|
+
...defaultOptions,
|
|
85
|
+
timeType: 'first_train',
|
|
86
|
+
});
|
|
87
|
+
expect(url).toContain('type=3'); // 始発
|
|
88
|
+
});
|
|
89
|
+
it('should set last_train type', () => {
|
|
90
|
+
const url = buildYahooTransitUrl('東京', '大阪', [], 2026, 1, 22, 23, 0, {
|
|
91
|
+
...defaultOptions,
|
|
92
|
+
timeType: 'last_train',
|
|
93
|
+
});
|
|
94
|
+
expect(url).toContain('type=2'); // 終電
|
|
95
|
+
});
|
|
96
|
+
it('should set unspecified type', () => {
|
|
97
|
+
const url = buildYahooTransitUrl('東京', '大阪', [], 2026, 1, 22, 12, 0, {
|
|
98
|
+
...defaultOptions,
|
|
99
|
+
timeType: 'unspecified',
|
|
100
|
+
});
|
|
101
|
+
expect(url).toContain('type=5'); // 指定なし
|
|
70
102
|
});
|
|
71
103
|
it('should disable shinkansen when specified', () => {
|
|
72
|
-
const url = buildYahooTransitUrl('東京', '大阪', 2026, 1, 22, 10, 30, {
|
|
104
|
+
const url = buildYahooTransitUrl('東京', '大阪', [], 2026, 1, 22, 10, 30, {
|
|
73
105
|
...defaultOptions,
|
|
74
106
|
useShinkansen: false,
|
|
75
107
|
});
|
|
76
108
|
expect(url).toContain('shin=0');
|
|
77
109
|
});
|
|
78
110
|
it('should set sort by fare', () => {
|
|
79
|
-
const url = buildYahooTransitUrl('東京', '大阪', 2026, 1, 22, 10, 30, {
|
|
111
|
+
const url = buildYahooTransitUrl('東京', '大阪', [], 2026, 1, 22, 10, 30, {
|
|
80
112
|
...defaultOptions,
|
|
81
113
|
sortBy: 'fare',
|
|
82
114
|
});
|
|
83
|
-
expect(url).toContain('s=
|
|
115
|
+
expect(url).toContain('s=1'); // fare
|
|
116
|
+
});
|
|
117
|
+
it('should set sort by transfer', () => {
|
|
118
|
+
const url = buildYahooTransitUrl('東京', '大阪', [], 2026, 1, 22, 10, 30, {
|
|
119
|
+
...defaultOptions,
|
|
120
|
+
sortBy: 'transfer',
|
|
121
|
+
});
|
|
122
|
+
expect(url).toContain('s=2'); // transfer
|
|
84
123
|
});
|
|
85
124
|
it('should set walk speed to fast', () => {
|
|
86
|
-
const url = buildYahooTransitUrl('東京', '大阪', 2026, 1, 22, 10, 30, {
|
|
125
|
+
const url = buildYahooTransitUrl('東京', '大阪', [], 2026, 1, 22, 10, 30, {
|
|
87
126
|
...defaultOptions,
|
|
88
127
|
walkSpeed: 'fast',
|
|
89
128
|
});
|
|
90
129
|
expect(url).toContain('ws=1'); // fast
|
|
91
130
|
});
|
|
92
131
|
it('should set cash ticket type', () => {
|
|
93
|
-
const url = buildYahooTransitUrl('東京', '大阪', 2026, 1, 22, 10, 30, {
|
|
132
|
+
const url = buildYahooTransitUrl('東京', '大阪', [], 2026, 1, 22, 10, 30, {
|
|
94
133
|
...defaultOptions,
|
|
95
134
|
ticket: 'cash',
|
|
96
135
|
});
|
|
97
|
-
expect(url).toContain('ticket=
|
|
136
|
+
expect(url).toContain('ticket=normal'); // cash maps to 'normal'
|
|
137
|
+
});
|
|
138
|
+
it('should set reserved seat preference', () => {
|
|
139
|
+
const url = buildYahooTransitUrl('東京', '大阪', [], 2026, 1, 22, 10, 30, {
|
|
140
|
+
...defaultOptions,
|
|
141
|
+
seatPreference: 'reserved',
|
|
142
|
+
});
|
|
143
|
+
expect(url).toContain('expkind=2'); // 指定席優先
|
|
144
|
+
});
|
|
145
|
+
it('should set green car preference', () => {
|
|
146
|
+
const url = buildYahooTransitUrl('東京', '大阪', [], 2026, 1, 22, 10, 30, {
|
|
147
|
+
...defaultOptions,
|
|
148
|
+
seatPreference: 'green',
|
|
149
|
+
});
|
|
150
|
+
expect(url).toContain('expkind=3'); // グリーン車優先
|
|
151
|
+
});
|
|
152
|
+
it('should include single via station', () => {
|
|
153
|
+
const url = buildYahooTransitUrl('東京', '新宿', ['表参道'], 2026, 1, 22, 10, 30, defaultOptions);
|
|
154
|
+
expect(url).toContain('via=%E8%A1%A8%E5%8F%82%E9%81%93'); // 表参道 encoded
|
|
155
|
+
});
|
|
156
|
+
it('should include multiple via stations', () => {
|
|
157
|
+
const url = buildYahooTransitUrl('東京', '新宿', ['表参道', '飯田橋', '広尾'], 2026, 1, 22, 10, 30, defaultOptions);
|
|
158
|
+
expect(url).toContain('via=%E8%A1%A8%E5%8F%82%E9%81%93'); // 表参道
|
|
159
|
+
expect(url).toContain('via=%E9%A3%AF%E7%94%B0%E6%A9%8B'); // 飯田橋
|
|
160
|
+
expect(url).toContain('via=%E5%BA%83%E5%B0%BE'); // 広尾
|
|
98
161
|
});
|
|
99
162
|
});
|
|
100
163
|
describe('extractMainContent', () => {
|
|
@@ -117,6 +180,7 @@ describe('SearchOptions defaults', () => {
|
|
|
117
180
|
it('should have correct default values', () => {
|
|
118
181
|
expect(defaultOptions.timeType).toBe('departure');
|
|
119
182
|
expect(defaultOptions.ticket).toBe('ic');
|
|
183
|
+
expect(defaultOptions.seatPreference).toBe('non_reserved');
|
|
120
184
|
expect(defaultOptions.walkSpeed).toBe('slightly_slow');
|
|
121
185
|
expect(defaultOptions.sortBy).toBe('time');
|
|
122
186
|
expect(defaultOptions.useShinkansen).toBe(true);
|
package/dist/index.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
package/dist/test.js
CHANGED
|
@@ -3,10 +3,17 @@
|
|
|
3
3
|
* Test script for core logic (without MCP)
|
|
4
4
|
* Run: npx ts-node src/test.ts
|
|
5
5
|
*/
|
|
6
|
-
function buildYahooTransitUrl(from, to, year, month, day, hour, minute, options) {
|
|
7
|
-
|
|
6
|
+
function buildYahooTransitUrl(from, to, via, year, month, day, hour, minute, options) {
|
|
7
|
+
// type: 1=出発, 4=到着, 3=始発, 2=終電, 5=指定なし
|
|
8
|
+
const timeTypeMap = { departure: '1', arrival: '4', first_train: '3', last_train: '2', unspecified: '5' };
|
|
9
|
+
// ticket: ic=ICカード優先, normal=現金(きっぷ)優先
|
|
10
|
+
const ticketMap = { ic: 'ic', cash: 'normal' };
|
|
11
|
+
// expkind: 1=自由席優先, 2=指定席優先, 3=グリーン車優先
|
|
12
|
+
const seatPreferenceMap = { non_reserved: '1', reserved: '2', green: '3' };
|
|
13
|
+
// ws: 1=急いで, 2=少し急いで, 3=少しゆっくり, 4=ゆっくり
|
|
8
14
|
const walkSpeedMap = { fast: '1', slightly_fast: '2', slightly_slow: '3', slow: '4' };
|
|
9
|
-
|
|
15
|
+
// s: 0=到着が早い順, 1=料金が安い順, 2=乗換回数順
|
|
16
|
+
const sortByMap = { time: '0', fare: '1', transfer: '2' };
|
|
10
17
|
const params = new URLSearchParams({
|
|
11
18
|
from: from,
|
|
12
19
|
to: to,
|
|
@@ -17,8 +24,8 @@ function buildYahooTransitUrl(from, to, year, month, day, hour, minute, options)
|
|
|
17
24
|
m1: Math.floor(minute / 10).toString(),
|
|
18
25
|
m2: (minute % 10).toString(),
|
|
19
26
|
type: timeTypeMap[options.timeType],
|
|
20
|
-
ticket: options.ticket,
|
|
21
|
-
expkind:
|
|
27
|
+
ticket: ticketMap[options.ticket],
|
|
28
|
+
expkind: seatPreferenceMap[options.seatPreference],
|
|
22
29
|
ws: walkSpeedMap[options.walkSpeed],
|
|
23
30
|
s: sortByMap[options.sortBy],
|
|
24
31
|
al: options.useAirline ? '1' : '0',
|
|
@@ -28,6 +35,9 @@ function buildYahooTransitUrl(from, to, year, month, day, hour, minute, options)
|
|
|
28
35
|
lb: options.useLocalBus ? '1' : '0',
|
|
29
36
|
sr: options.useFerry ? '1' : '0',
|
|
30
37
|
});
|
|
38
|
+
for (const station of via) {
|
|
39
|
+
params.append('via', station);
|
|
40
|
+
}
|
|
31
41
|
return `https://transit.yahoo.co.jp/search/result?${params.toString()}`;
|
|
32
42
|
}
|
|
33
43
|
function extractMainContent(html) {
|
|
@@ -64,6 +74,7 @@ async function testUrlBuilder() {
|
|
|
64
74
|
const defaultOptions = {
|
|
65
75
|
timeType: 'departure',
|
|
66
76
|
ticket: 'ic',
|
|
77
|
+
seatPreference: 'non_reserved',
|
|
67
78
|
walkSpeed: 'slightly_slow',
|
|
68
79
|
sortBy: 'time',
|
|
69
80
|
useAirline: true,
|
|
@@ -74,12 +85,12 @@ async function testUrlBuilder() {
|
|
|
74
85
|
useFerry: true,
|
|
75
86
|
};
|
|
76
87
|
// test 1: basic route
|
|
77
|
-
const url1 = buildYahooTransitUrl('東京', '九段下', 2026, 1, 22, 10, 30, defaultOptions);
|
|
88
|
+
const url1 = buildYahooTransitUrl('東京', '九段下', [], 2026, 1, 22, 10, 30, defaultOptions);
|
|
78
89
|
console.log('Test 1 - Basic route:');
|
|
79
90
|
console.log(` From: 東京 → To: 九段下`);
|
|
80
91
|
console.log(` URL: ${url1}\n`);
|
|
81
92
|
// test 2: arrival time + no shinkansen
|
|
82
|
-
const url2 = buildYahooTransitUrl('東京', '大阪', 2026, 1, 22, 18, 0, {
|
|
93
|
+
const url2 = buildYahooTransitUrl('東京', '大阪', [], 2026, 1, 22, 18, 0, {
|
|
83
94
|
...defaultOptions,
|
|
84
95
|
timeType: 'arrival',
|
|
85
96
|
useShinkansen: false,
|
|
@@ -88,19 +99,62 @@ async function testUrlBuilder() {
|
|
|
88
99
|
console.log(` From: 東京 → To: 大阪 (arrive by 18:00)`);
|
|
89
100
|
console.log(` URL: ${url2}\n`);
|
|
90
101
|
// test 3: sort by fare
|
|
91
|
-
const url3 = buildYahooTransitUrl('新宿', '横浜', 2026, 1, 22, 12, 0, {
|
|
102
|
+
const url3 = buildYahooTransitUrl('新宿', '横浜', [], 2026, 1, 22, 12, 0, {
|
|
92
103
|
...defaultOptions,
|
|
93
104
|
sortBy: 'fare',
|
|
94
105
|
});
|
|
95
106
|
console.log('Test 3 - Sort by fare:');
|
|
96
107
|
console.log(` From: 新宿 → To: 横浜`);
|
|
97
108
|
console.log(` URL: ${url3}\n`);
|
|
109
|
+
// test 4: single via station
|
|
110
|
+
const url4 = buildYahooTransitUrl('東京', '新宿', ['表参道'], 2026, 1, 22, 10, 30, defaultOptions);
|
|
111
|
+
console.log('Test 4 - Single via station:');
|
|
112
|
+
console.log(` From: 東京 → Via: 表参道 → To: 新宿`);
|
|
113
|
+
console.log(` URL: ${url4}\n`);
|
|
114
|
+
// test 5: multiple via stations
|
|
115
|
+
const url5 = buildYahooTransitUrl('東京', '新宿', ['表参道', '飯田橋', '広尾'], 2026, 1, 22, 10, 30, defaultOptions);
|
|
116
|
+
console.log('Test 5 - Multiple via stations:');
|
|
117
|
+
console.log(` From: 東京 → Via: 表参道, 飯田橋, 広尾 → To: 新宿`);
|
|
118
|
+
console.log(` URL: ${url5}\n`);
|
|
119
|
+
// test 6: first train (始発)
|
|
120
|
+
const url6 = buildYahooTransitUrl('東京', '大阪', [], 2026, 1, 22, 5, 0, {
|
|
121
|
+
...defaultOptions,
|
|
122
|
+
timeType: 'first_train',
|
|
123
|
+
});
|
|
124
|
+
console.log('Test 6 - First train (始発):');
|
|
125
|
+
console.log(` From: 東京 → To: 大阪`);
|
|
126
|
+
console.log(` URL: ${url6}\n`);
|
|
127
|
+
// test 7: last train (終電)
|
|
128
|
+
const url7 = buildYahooTransitUrl('東京', '大阪', [], 2026, 1, 22, 23, 0, {
|
|
129
|
+
...defaultOptions,
|
|
130
|
+
timeType: 'last_train',
|
|
131
|
+
});
|
|
132
|
+
console.log('Test 7 - Last train (終電):');
|
|
133
|
+
console.log(` From: 東京 → To: 大阪`);
|
|
134
|
+
console.log(` URL: ${url7}\n`);
|
|
135
|
+
// test 8: green car preference
|
|
136
|
+
const url8 = buildYahooTransitUrl('東京', '大阪', [], 2026, 1, 22, 10, 0, {
|
|
137
|
+
...defaultOptions,
|
|
138
|
+
seatPreference: 'green',
|
|
139
|
+
});
|
|
140
|
+
console.log('Test 8 - Green car preference:');
|
|
141
|
+
console.log(` From: 東京 → To: 大阪`);
|
|
142
|
+
console.log(` URL: ${url8}\n`);
|
|
143
|
+
// test 9: cash ticket
|
|
144
|
+
const url9 = buildYahooTransitUrl('東京', '大阪', [], 2026, 1, 22, 10, 0, {
|
|
145
|
+
...defaultOptions,
|
|
146
|
+
ticket: 'cash',
|
|
147
|
+
});
|
|
148
|
+
console.log('Test 9 - Cash ticket (きっぷ):');
|
|
149
|
+
console.log(` From: 東京 → To: 大阪`);
|
|
150
|
+
console.log(` URL: ${url9}\n`);
|
|
98
151
|
}
|
|
99
152
|
async function testFetchAndParse() {
|
|
100
153
|
console.log('=== Test: Fetch and Parse ===\n');
|
|
101
154
|
const defaultOptions = {
|
|
102
155
|
timeType: 'departure',
|
|
103
156
|
ticket: 'ic',
|
|
157
|
+
seatPreference: 'non_reserved',
|
|
104
158
|
walkSpeed: 'slightly_slow',
|
|
105
159
|
sortBy: 'time',
|
|
106
160
|
useAirline: true,
|
|
@@ -110,7 +164,8 @@ async function testFetchAndParse() {
|
|
|
110
164
|
useLocalBus: true,
|
|
111
165
|
useFerry: true,
|
|
112
166
|
};
|
|
113
|
-
|
|
167
|
+
// test with via station
|
|
168
|
+
const url = buildYahooTransitUrl('東京', '新宿', ['表参道'], 2026, 1, 22, 10, 30, defaultOptions);
|
|
114
169
|
console.log(`Fetching: ${url}\n`);
|
|
115
170
|
try {
|
|
116
171
|
const response = await fetch(url);
|
package/dist/test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";AAEA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"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"}
|