{
  "sha": "ae00adb2ac72fd214c0e716497a2181afa63cf31",
  "message": "persist historical search suggestion aliases",
  "author": {
    "login": "nnneeeooo-nnneeeooo",
    "name": "",
    "email": ""
  },
  "committer": {
    "login": "nnneeeooo-nnneeeooo",
    "name": "",
    "email": ""
  },
  "created_at": "2026-09-16T00:09:39Z",
  "files": [
    {
      "filename": "data/search-prompt-aliases.json",
      "previous_filename": "",
      "status": "added",
      "additions": 1638,
      "deletions": 0,
      "changes": 1638
    },
    {
      "filename": "pipeline/CONTRACTS.md",
      "previous_filename": "",
      "status": "modified",
      "additions": 12,
      "deletions": 1,
      "changes": 13
    },
    {
      "filename": "pipeline/build.py",
      "previous_filename": "",
      "status": "modified",
      "additions": 35,
      "deletions": 4,
      "changes": 39
    },
    {
      "filename": "pipeline/search_prompts.py",
      "previous_filename": "",
      "status": "modified",
      "additions": 93,
      "deletions": 0,
      "changes": 93
    },
    {
      "filename": "tests/test_search.py",
      "previous_filename": "",
      "status": "modified",
      "additions": 46,
      "deletions": 0,
      "changes": 46
    },
    {
      "filename": "tests/test_search_prompts.py",
      "previous_filename": "",
      "status": "modified",
      "additions": 38,
      "deletions": 1,
      "changes": 39
    }
  ],
  "diff": "@@ -0,0 +1,1638 @@\\n+{\\n+  \"version\": 1,\\n+  \"updatedUtc\": \"2026-09-16T00:00Z\",\\n+  \"items\": [\\n+    {\\n+      \"dateTpe\": \"2026-08-10\",\\n+      \"articleId\": \"a-20260809-0551-jetstar-japan-a320-arrival-at-taoyuan-ai\",\\n+      \"zh\": \"日航聯營 Jetstar Japan A320 桃園\",\\n+      \"en\": \"Jetstar Japan A320 Taoyuan\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-10\",\\n+      \"articleId\": \"a-20260809-0551-jetstar-japan-a320-arrival-at-taoyuan-ai\",\\n+      \"zh\": \"查詢Jetstar Japan A320 桃園\",\\n+      \"en\": \"Search Jetstar Japan A320 at Taoyuan\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-10\",\\n+      \"articleId\": \"a-20260809-0853-david-cummins-sworn-in-as-eighth-tsa-adm\",\\n+      \"zh\": \"搜尋：David Cummins宣誓就任美國運輸安…\",\\n+      \"en\": \"Explore: David Cummins Sworn In as Eighth TSA Administrat…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-10\",\\n+      \"articleId\": \"a-20260809-0853-indigo-to-deploy-airbus-a321xlr-on-11-ho\",\\n+      \"zh\": \"搜尋IndiGo A321XLR 孟買 阿姆斯特丹\",\\n+      \"en\": \"Find IndiGo A321XLR Mumbai Amsterdam route\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-10\",\\n+      \"articleId\": \"a-20260809-0853-indigo-to-deploy-airbus-a321xlr-on-11-ho\",\\n+      \"zh\": \"搜尋：IndiGo將以空中巴士A321XLR執飛孟…\",\\n+      \"en\": \"Explore: IndiGo to Deploy Airbus A321XLR on 11-Hour Mumba…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-10\",\\n+      \"articleId\": \"a-20260809-0853-indigo-to-deploy-airbus-a321xlr-on-11-ho\",\\n+      \"zh\": \"靛藍航空 A321XLR 孟買 阿姆斯特丹\",\\n+      \"en\": \"IndiGo A321XLR Mumbai Amsterdam\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-10\",\\n+      \"articleId\": \"a-20260809-0948-jetstar-to-introduce-overhead-locker-fee\",\\n+      \"zh\": \"捷星航空 頭頂置物箱 費用\",\\n+      \"en\": \"Jetstar overhead locker fee\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-10\",\\n+      \"articleId\": \"a-20260809-0948-jetstar-to-introduce-overhead-locker-fee\",\\n+      \"zh\": \"搜尋：捷星航空宣布2027年起收取頭頂置物箱費用\",\\n+      \"en\": \"Explore: Jetstar to Introduce Overhead Locker Fees for Ec…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-10\",\\n+      \"articleId\": \"a-20260809-0948-jetstar-to-introduce-overhead-locker-fee\",\\n+      \"zh\": \"查詢捷星航空 頭頂置物箱 費用\",\\n+      \"en\": \"Check Jetstar overhead locker fees\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-10\",\\n+      \"articleId\": \"a-20260809-0948-london-heathrow-tops-airadvisor-2026-glo\",\\n+      \"zh\": \"倫敦希斯洛機場 排名\",\\n+      \"en\": \"London Heathrow airport ranking\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-10\",\\n+      \"articleId\": \"a-20260809-0948-london-heathrow-tops-airadvisor-2026-glo\",\\n+      \"zh\": \"搜尋倫敦希斯洛 AirAdvisor 2026 排名\",\\n+      \"en\": \"Search London Heathrow AirAdvisor 2026 ranking\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-10\",\\n+      \"articleId\": \"a-20260809-0948-london-heathrow-tops-airadvisor-2026-glo\",\\n+      \"zh\": \"搜尋：AirAdvisor發布2026機場排名 倫…\",\\n+      \"en\": \"Explore: London Heathrow Tops AirAdvisor 2026 Global Airp…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-10\",\\n+      \"articleId\": \"a-20260809-1305-emirates-temporarily-suspends-airbus-a38\",\\n+      \"zh\": \"搜尋：阿聯酋航空2026年夏季暫停布拉格（PRG）…\",\\n+      \"en\": \"Explore: Emirates Temporarily Suspends A380 Flights to Pr…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-10\",\\n+      \"articleId\": \"a-20260809-1305-emirates-temporarily-suspends-airbus-a38\",\\n+      \"zh\": \"查詢阿聯酋航空 A380 布拉格 格拉斯哥\",\\n+      \"en\": \"Find Emirates A380 flights to Prague Glasgow\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-10\",\\n+      \"articleId\": \"a-20260809-1305-emirates-temporarily-suspends-airbus-a38\",\\n+      \"zh\": \"阿聯酋航空 A380 布拉格 格拉斯哥\",\\n+      \"en\": \"Emirates A380 Prague Glasgow\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-10\",\\n+      \"articleId\": \"a-20260809-1441-airbus-a321neo-arrives-at-taoyuan-airpor\",\\n+      \"zh\": \"搜尋澳門航空 A321neo B-MBU 桃園\",\\n+      \"en\": \"Search Air Macau A321neo B-MBU at Taoyuan\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-10\",\\n+      \"articleId\": \"a-20260809-1441-airbus-a321neo-arrives-at-taoyuan-airpor\",\\n+      \"zh\": \"搜尋：澳門航空 A321neo B-MBU 抵達桃園\",\\n+      \"en\": \"Explore: Air Macau A321neo B-MBU Arrives at Taiwan Taoyuan\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-10\",\\n+      \"articleId\": \"a-20260809-1441-airbus-a321neo-arrives-at-taoyuan-airpor\",\\n+      \"zh\": \"澳門航空 B-MBU A321neo 桃園\",\\n+      \"en\": \"Air Macau B-MBU A321neo Taoyuan\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-11\",\\n+      \"articleId\": \"a-20260810-1105-western-sydney-airport-announces-vietjet\",\\n+      \"zh\": \"搜尋：西雪梨國際機場宣布越捷航空將開航胡志明市與曼…\",\\n+      \"en\": \"Explore: Western Sydney Airport Announces Vietjet Flights…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-11\",\\n+      \"articleId\": \"a-20260810-1141-airbus-a321neo-registered-hs-ead-arrives\",\\n+      \"zh\": \"搜尋：註冊號 HS-EAD 之 A321neo 抵…\",\\n+      \"en\": \"Explore: Airbus A321neo registered HS-EAD arrives at Taiw…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-11\",\\n+      \"articleId\": \"a-20260810-1141-china-airlines-hits-record-high-revenue\",\\n+      \"zh\": \"搜尋：華航7月營收創歷史新高 長榮航寫單月歷史次高\",\\n+      \"en\": \"Explore: China Airlines Hits Record High Revenue in July…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-11\",\\n+      \"articleId\": \"a-20260810-1229-lufthansa-to-launch-starlink-wifi-on-air\",\\n+      \"zh\": \"搜尋：漢莎航空擬於九天內在空中巴士A320neo推…\",\\n+      \"en\": \"Explore: Lufthansa to Launch Starlink WiFi on Airbus A320…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-11\",\\n+      \"articleId\": \"a-20260810-1229-us-air-force-uses-robotic-manufacturing\",\\n+      \"zh\": \"搜尋：美空軍機器人製造C17鼻翼 首次重返天空\",\\n+      \"en\": \"Explore: US Air Force Uses Robotic Manufacturing to Repla…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-11\",\\n+      \"articleId\": \"a-20260810-1517-airbus-a321-b-lpx-observed-arriving-at-t\",\\n+      \"zh\": \"搜尋：Airbus A321（B-LPX）觀測抵達…\",\\n+      \"en\": \"Explore: Airbus A321 (B-LPX) Observed Arriving at Taiwan…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-11\",\\n+      \"articleId\": \"a-20260810-1517-chunghwa-telecom-launches-drone-logistic\",\\n+      \"zh\": \"搜尋：中華電信於嘉義縣打造無人機物流示範場域 送餐…\",\\n+      \"en\": \"Explore: Chunghwa Telecom launches drone logistics demons…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-11\",\\n+      \"articleId\": \"a-20260810-1611-airbus-a321-b-lpx-observed-arriving-at-t\",\\n+      \"zh\": \"搜尋：Airbus A321 B-LPX 觀測抵達…\",\\n+      \"en\": \"Explore: Airbus A321 B-LPX Observed Arriving at Taoyuan A…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-12\",\\n+      \"articleId\": \"a-20260811-1118-etihad-airways-launches-daily-abu-dhabi\",\\n+      \"zh\": \"搜尋：阿提哈德航空開航阿布達比至塔什干首航班機滿載\",\\n+      \"en\": \"Explore: Etihad Airways Launches Daily Abu Dhabi-Tashkent…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-12\",\\n+      \"articleId\": \"a-20260811-1242-pilots-prepare-for-flight-operational-im\",\\n+      \"zh\": \"搜尋：日全蝕影響航情與飛行操作 飛行員依夜航程序因應\",\\n+      \"en\": \"Explore: Pilots Prepare for Flight Operational Impacts Du…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-12\",\\n+      \"articleId\": \"a-20260811-1413-istanbul-airport-surpasses-london-heathr\",\\n+      \"zh\": \"搜尋：伊斯坦堡機場7月旅客量超越希斯洛 希斯洛重申…\",\\n+      \"en\": \"Explore: Istanbul Airport Surpasses London Heathrow in Ju…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-12\",\\n+      \"articleId\": \"a-20260811-1413-sun-phuquoc-airways-partners-with-baa-tr\",\\n+      \"zh\": \"搜尋：Sun PhuQuoc Airways委託B…\",\\n+      \"en\": \"Explore: Sun PhuQuoc Airways Partners With BAA Training f…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-12\",\\n+      \"articleId\": \"a-20260811-1552-air-china-airbus-a321-b-6605-observed-ar\",\\n+      \"zh\": \"搜尋：中國國際航空 A321 B-6605 桃園機…\",\\n+      \"en\": \"Explore: Air China Airbus A321 B-6605 Observed Arriving a…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-12\",\\n+      \"articleId\": \"a-20260811-1552-flyadeal-launches-livery-design-competit\",\\n+      \"zh\": \"搜尋：flyadeal 舉辦塗裝設計競賽慶祝第 5…\",\\n+      \"en\": \"Explore: flyadeal launches livery design competition to c…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-13\",\\n+      \"articleId\": \"a-20260812-0525-ryanair-to-adopt-google-cloud-services-f\",\\n+      \"zh\": \"瑞安航空導入Google雲端服務\",\\n+      \"en\": \"Ryanair adopts Google Cloud for operations\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-13\",\\n+      \"articleId\": \"a-20260812-0709-qatar-airways-deploys-airbus-a350-900-on\",\\n+      \"zh\": \"卡達航空A350執飛杜哈至巴林\",\\n+      \"en\": \"Qatar Airways Airbus A350-900 Doha to Bahrain route\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-13\",\\n+      \"articleId\": \"a-20260812-0902-ads-b-data-tracks-airbus-a330-300-arriva\",\\n+      \"zh\": \"9M-XXD號A330-300抵達桃園機場\",\\n+      \"en\": \"Airbus A330-300 9M-XXD arrival at Taoyuan Airport\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-13\",\\n+      \"articleId\": \"a-20260812-1053-air-china-comac-c919-completes-first-int\",\\n+      \"zh\": \"中國國航C919北京飛烏蘭巴托\",\\n+      \"en\": \"Air China C919 Beijing to Ulaanbaatar route\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-13\",\\n+      \"articleId\": \"a-20260812-1053-iberia-uses-airbus-a321xlr-to-livestream\",\\n+      \"zh\": \"伊比利航空A321XLR高空直播\",\\n+      \"en\": \"Iberia Airbus A321XLR high-altitude livestream\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-13\",\\n+      \"articleId\": \"a-20260812-1415-airbus-tests-longer-wings-for-more-effic\",\\n+      \"zh\": \"空中巴士加長機翼測試\",\\n+      \"en\": \"Airbus longer wing tests for next narrowbody\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-14\",\\n+      \"articleId\": \"a-20260812-2331-fedex-unveils-retro-boeing-777f-livery-a\",\\n+      \"zh\": \"看看聯邦快遞777F貨機與孟菲斯機場消息\",\\n+      \"en\": \"Check out FedEx Boeing 777F livery and Memphis Airport\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-14\",\\n+      \"articleId\": \"a-20260812-2331-fedex-unveils-retro-boeing-777f-livery-a\",\\n+      \"zh\": \"聯邦快遞復古777F塗裝\",\\n+      \"en\": \"FedEx retro Boeing 777F livery\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-14\",\\n+      \"articleId\": \"a-20260812-2331-korean-air-and-asiana-airlines-secure-ap\",\\n+      \"zh\": \"大韓航空與韓亞航空合併\",\\n+      \"en\": \"Korean Air and Asiana Airlines merger\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-14\",\\n+      \"articleId\": \"a-20260812-2331-korean-air-and-asiana-airlines-secure-ap\",\\n+      \"zh\": \"關注大韓航空與韓亞航空的最新動態\",\\n+      \"en\": \"Follow updates on Korean Air and Asiana Airlines\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-14\",\\n+      \"articleId\": \"a-20260813-0109-jetblue-cancels-boston-barcelona-flights\",\\n+      \"zh\": \"尋找捷藍航空波士頓至巴塞隆納航班資訊\",\\n+      \"en\": \"Find JetBlue flights between Boston and Barcelona\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-14\",\\n+      \"articleId\": \"a-20260813-0109-jetblue-cancels-boston-barcelona-flights\",\\n+      \"zh\": \"捷藍航空波士頓巴塞隆納航班\",\\n+      \"en\": \"JetBlue Boston Barcelona flights\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-14\",\\n+      \"articleId\": \"a-20260813-0812-starlux-airlines-to-launch-taichung-nago\",\\n+      \"zh\": \"搜尋星宇航空台中飛往名古屋的航班\",\\n+      \"en\": \"Search Starlux Airlines Taichung to Nagoya flights\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-14\",\\n+      \"articleId\": \"a-20260813-0812-starlux-airlines-to-launch-taichung-nago\",\\n+      \"zh\": \"星宇航空台中名古屋航線\",\\n+      \"en\": \"Starlux Airlines Taichung Nagoyo route\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-14\",\\n+      \"articleId\": \"a-20260813-0954-china-airlines-inflight-magazine-dynasty\",\\n+      \"zh\": \"了解華航機上雜誌Dynasty的相關介紹\",\\n+      \"en\": \"Explore China Airlines inflight magazine Dynasty\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-14\",\\n+      \"articleId\": \"a-20260813-0954-china-airlines-inflight-magazine-dynasty\",\\n+      \"zh\": \"華航機上雜誌Dynasty\",\\n+      \"en\": \"China Airlines Dynasty magazine\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-14\",\\n+      \"articleId\": \"a-20260813-1140-national-airlines-operates-record-19-hou\",\\n+      \"zh\": \"查詢國家航空波音777貨機飛往澳洲的資訊\",\\n+      \"en\": \"Look up National Airlines Boeing 777F cargo flights\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-14\",\\n+      \"articleId\": \"a-20260813-1252-boeing-names-former-gol-chief-celso-ferr\",\\n+      \"zh\": \"波音拉丁美洲總裁費雷爾\",\\n+      \"en\": \"Boeing Latin America president Celso Ferrer\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-15\",\\n+      \"articleId\": \"a-20260814-1059-etna-eruption-extends-catania-airport-cl\",\\n+      \"zh\": \"搜尋：埃特納火山噴發影響 義大利卡塔尼亞機場關閉延…\",\\n+      \"en\": \"Explore: Etna Eruption Extends Catania Airport Closure in…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-15\",\\n+      \"articleId\": \"a-20260814-1059-nasa-unveils-modified-boeing-777-airborn\",\\n+      \"zh\": \"搜尋：美國國家航空暨太空總署亮相改裝波音777空中…\",\\n+      \"en\": \"Explore: NASA Unveils Modified Boeing 777 Airborne Lab as…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-15\",\\n+      \"articleId\": \"a-20260814-1143-us-imposes-section-232-drone-tariffs-tai\",\\n+      \"zh\": \"搜尋：美國對無人機開徵232條款關稅 行政院：台灣…\",\\n+      \"en\": \"Explore: US imposes Section 232 drone tariffs; Taiwan's E…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-15\",\\n+      \"articleId\": \"a-20260814-1243-china-airlines-waives-ticket-rebooking-a\",\\n+      \"zh\": \"搜尋：東京豪雨影響交通 華航免收成田羽田退改手續費\",\\n+      \"en\": \"Explore: China Airlines Waives Ticket Rebooking and Refun…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-15\",\\n+      \"articleId\": \"a-20260814-1409-taiwan-legislature-passes-twd-8-billion\",\\n+      \"zh\": \"搜尋：立法院三讀通過115年度無人載具計畫約80億…\",\\n+      \"en\": \"Explore: Taiwan legislature passes TWD ~8 billion UAV bud…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-15\",\\n+      \"articleId\": \"a-20260814-1542-us-imposes-section-232-drone-tariffs-tai\",\\n+      \"zh\": \"搜尋：美國對無人機開徵232條款關稅 經濟部：台灣…\",\\n+      \"en\": \"Explore: US Imposes Section 232 Drone Tariffs; Taiwan Min…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-16\",\\n+      \"articleId\": \"a-20260814-2117-united-airlines-removes-35-seats-from-bo\",\\n+      \"zh\": \"聯合航空787-9休士頓航線\",\\n+      \"en\": \"United Airlines Boeing 787-9 Houston routes\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-16\",\\n+      \"articleId\": \"a-20260814-2213-delta-air-lines-to-feature-24-first-clas\",\\n+      \"zh\": \"達美航空737 MAX 10頭等艙\",\\n+      \"en\": \"Delta Air Lines Boeing 737 MAX 10 First Class\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-16\",\\n+      \"articleId\": \"a-20260815-0331-qatar-airways-qsuite-voted-world-best-bu\",\\n+      \"zh\": \"卡達航空Qsuite商務艙\",\\n+      \"en\": \"Qatar Airways Qsuite business class\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-16\",\\n+      \"articleId\": \"a-20260815-1223-ryanair-and-southwest-boeing-737-800-fli\",\\n+      \"zh\": \"瑞安航空與西南航空737\",\\n+      \"en\": \"Ryanair and Southwest Boeing 737-800\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-16\",\\n+      \"articleId\": \"a-20260815-1413-london-heathrow-flooding-cuts-road-acces\",\\n+      \"zh\": \"倫敦希斯洛機場淹水\",\\n+      \"en\": \"London Heathrow flooding terminals\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-16\",\\n+      \"articleId\": \"a-20260815-1413-starlux-airlines-takes-delivery-of-secon\",\\n+      \"zh\": \"星宇航空空山金藝術機\",\\n+      \"en\": \"STARLUX Airlines Sorayama Gold art aircraft\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-17\",\\n+      \"articleId\": \"a-20260816-0340-twenty-three-people-trapped-in-taoyuan-a\",\\n+      \"zh\": \"搜尋：桃園機場第二航廈電梯故障23人受困均已安全脫困\",\\n+      \"en\": \"Explore: Twenty-Three People Trapped in Taoyuan Airport E…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-17\",\\n+      \"articleId\": \"a-20260816-0723-bengaluru-hal-airport-operationalises-rn\",\\n+      \"zh\": \"搜尋：班加羅爾HAL機場啟用直升機RNP CAT…\",\\n+      \"en\": \"Explore: Bengaluru HAL Airport Operationalises RNP CAT H…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-17\",\\n+      \"articleId\": \"a-20260816-0918-retired-german-luftwaffe-transall-c-160d\",\\n+      \"zh\": \"搜尋：德軍退役C-160D運輸機將改裝為裝甲滅火機\",\\n+      \"en\": \"Explore: Retired German Luftwaffe Transall C-160D Airlift…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-17\",\\n+      \"articleId\": \"a-20260816-1015-emirates-oldest-airbus-a380-continues-op\",\\n+      \"zh\": \"搜尋：阿聯酋航空最老空中巴士A380客機持續執飛英…\",\\n+      \"en\": \"Explore: Emirates' Oldest Airbus A380 Continues Operation…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-17\",\\n+      \"articleId\": \"a-20260816-1220-delta-to-feature-56-delta-one-suites-on\",\\n+      \"zh\": \"搜尋：達美航空新款A330-900neo將配置56…\",\\n+      \"en\": \"Explore: Delta To Feature 56 Delta One Suites On New Airb…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-17\",\\n+      \"articleId\": \"a-20260816-1512-a-10-warthog-flies-final-sortie-from-50\",\\n+      \"zh\": \"搜尋：A-10攻擊機自50年飛行員培訓基地執行最後…\",\\n+      \"en\": \"Explore: A-10 Warthog Flies Final Sortie From 50-Year Pil…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-18\",\\n+      \"articleId\": \"a-20260817-0931-executive-yuan-appoints-representative-a\",\\n+      \"zh\": \"搜尋：行政院指派代理人維持運作 NCC優先核發航空…\",\\n+      \"en\": \"Explore: Executive Yuan Appoints Representative as NCC Pr…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-18\",\\n+      \"articleId\": \"a-20260817-1117-france-says-us-carrier-emals-reversal-po\",\\n+      \"zh\": \"搜尋：法國國防部稱美方航艦彈射策略轉變不影響新航艦…\",\\n+      \"en\": \"Explore: France Says US Carrier EMALS Reversal Poses No R…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-18\",\\n+      \"articleId\": \"a-20260817-1117-heart-aerospace-completes-first-flight-o\",\\n+      \"zh\": \"搜尋：Heart Aerospace全電動驗證機X…\",\\n+      \"en\": \"Explore: Heart Aerospace Completes First Flight of X1 All…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-18\",\\n+      \"articleId\": \"a-20260817-1335-air-france-final-airbus-a318-network-to\",\\n+      \"zh\": \"搜尋：法國航空空中巴士A318機隊最後航線公布\",\\n+      \"en\": \"Explore: Air France Final Airbus A318 Network to Span 37…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-18\",\\n+      \"articleId\": \"a-20260817-1418-brussels-airlines-expands-arctic-network\",\\n+      \"zh\": \"搜尋：布魯塞爾航空擴增2026/27冬季北極航線…\",\\n+      \"en\": \"Explore: Bru (BRU)ssels Airlines Expands Arctic Network w…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-18\",\\n+      \"articleId\": \"a-20260817-1418-rakuten-assists-german-startup-helsing-i\",\\n+      \"zh\": \"搜尋：樂天協助德國Helsing向日本陸上自衛隊推…\",\\n+      \"en\": \"Explore: Rakuten Assists German Startup Helsing in Pitchi…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-19\",\\n+      \"articleId\": \"a-20260818-0730-luggage-cart-catches-fire-at-milan-malpe\",\\n+      \"zh\": \"尋找英國航空在米蘭馬爾彭薩機場的動態\",\\n+      \"en\": \"Look up British Airways updates at Milan Malpensa Airport\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-19\",\\n+      \"articleId\": \"a-20260818-1019-textron-aviation-delivers-500th-cessna-c\",\\n+      \"zh\": \"搜尋 Cessna CJ4 系列飛機的動態\",\\n+      \"en\": \"Learn about Textron Aviation and Cessna Citation CJ4\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-19\",\\n+      \"articleId\": \"a-20260818-1116-french-rafale-intercepts-bombardier-glob\",\\n+      \"zh\": \"搜尋龐巴迪 Global 6000 相關訊息\",\\n+      \"en\": \"Search for news involving Bombardier Global 6000\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-19\",\\n+      \"articleId\": \"a-20260818-1335-air-astana-extends-suspension-of-dubai-f\",\\n+      \"zh\": \"想了解阿斯塔納航空往返杜拜的航班\",\\n+      \"en\": \"Find status on Air Astana flights to Dubai\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-19\",\\n+      \"articleId\": \"a-20260818-1335-lufthansa-reduces-airbus-a380-flights-on\",\\n+      \"zh\": \"想查詢漢莎航空空中巴士A380的航班資訊\",\\n+      \"en\": \"Looking for updates on Lufthansa Airbus A380 flights\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-19\",\\n+      \"articleId\": \"a-20260818-1335-retired-qantaslink-fokker-f100-lands-at\",\\n+      \"zh\": \"查詢 Shellharbour 機場最新動態\",\\n+      \"en\": \"Search details on QantasLink Fokker F100 aircraft\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-20\",\\n+      \"articleId\": \"a-20260819-1121-turkish-airlines-plans-new-route-to-lond\",\\n+      \"zh\": \"搜尋：土耳其航空計劃開航倫敦城市機場（LCY）但面…\",\\n+      \"en\": \"Explore: Turkish Airlines Plans New Route to London City…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-20\",\\n+      \"articleId\": \"a-20260819-1226-us-marine-takes-blos-control-of-kratos-v\",\\n+      \"zh\": \"搜尋：美海軍陸戰隊成功完成女武神無人機跨視距控制測試\",\\n+      \"en\": \"Explore: US Marine takes BLOS control of Kratos Valkyrie…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-20\",\\n+      \"articleId\": \"a-20260819-1424-futian-motor-european-drone-customer-boo\",\\n+      \"zh\": \"搜尋：富田電機：歐洲無人機客戶包下銅鑼高效馬達新產能\",\\n+      \"en\": \"Explore: Futian Motor: European Drone Customer Books New…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-20\",\\n+      \"articleId\": \"a-20260819-1620-electra-tests-ultra-stol-aircraft-as-fee\",\\n+      \"zh\": \"搜尋：Electra 測試 ultra-STOL…\",\\n+      \"en\": \"Explore: Electra tests ultra-STOL aircraft as feeder for…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-20\",\\n+      \"articleId\": \"a-20260819-1620-frontier-airlines-cuts-21-routes-from-at\",\\n+      \"zh\": \"搜尋：Frontier Airlines裁撤亞特蘭…\",\\n+      \"en\": \"Explore: Frontier Airlines Cuts 21 Routes From Atl (ATL)a…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-20\",\\n+      \"articleId\": \"a-20260819-1620-us-court-delays-hearing-on-google-s-purc\",\\n+      \"zh\": \"搜尋：美國法院延後審理Google收購Spirit…\",\\n+      \"en\": \"Explore: US Court Delays Hearing on Google's Purchase of…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-21\",\\n+      \"articleId\": \"a-20260820-1119-china-airlines-to-launch-new-business-cl\",\\n+      \"zh\": \"搜尋：中華航空9月起於法蘭克福及紐澳等航線推出全新…\",\\n+      \"en\": \"Explore: China Airlines to Launch New Business Class Tabl…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-21\",\\n+      \"articleId\": \"a-20260820-1119-taiwan-s-first-two-f-16v-block-70-fighte\",\\n+      \"zh\": \"搜尋：台灣首批兩架F-16V戰機自美國起飛前往志航…\",\\n+      \"en\": \"Explore: Taiwan's First Two F-16V Block 70 Fighter Jets D…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-21\",\\n+      \"articleId\": \"a-20260820-1228-taiwan-s-mnd-says-f-16v-deliveries-canno\",\\n+      \"zh\": \"搜尋：F-16V無法如期全數交機 國防部研擬修特別…\",\\n+      \"en\": \"Explore: Taiwan's MND says F-16V deliveries cannot meet y…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-21\",\\n+      \"articleId\": \"a-20260820-1228-us-study-finds-aircrew-face-highest-risk\",\\n+      \"zh\": \"搜尋：美研究指機組員輻射致癌死亡風險居各行業之冠\",\\n+      \"en\": \"Explore: US Study Finds Aircrew Face Highest Risk of Radi…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-21\",\\n+      \"articleId\": \"a-20260820-1339-starlux-airlines-displays-sorayama-gold\",\\n+      \"zh\": \"搜尋：星宇航空空山金與空山銀雙機首度於東京成田機場…\",\\n+      \"en\": \"Explore: STARLUX Airlines Displays Sorayama Gold and Silv…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-21\",\\n+      \"articleId\": \"a-20260820-1525-qatar-airways-begins-operating-world-s-f\",\\n+      \"zh\": \"搜尋：卡達航空首架星鏈波音787-9客機投入營運\",\\n+      \"en\": \"Explore: Qatar Airways Begins Operating World's First Sta…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-22\",\\n+      \"articleId\": \"a-20260821-0927-vietnam-airlines-boeing-787-investigated\",\\n+      \"zh\": \"搜尋：越南航空波音787慕尼黑起飛疑越界擦地 德國…\",\\n+      \"en\": \"Explore: Vietnam Airlines Boeing 787 Investigated for Mun…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-22\",\\n+      \"articleId\": \"a-20260821-1021-incheon-airport-installs-counter-barrier\",\\n+      \"zh\": \"搜尋：仁川機場第一航廈櫃檯加裝圍欄 防範插隊與維持…\",\\n+      \"en\": \"Explore: Incheon Airport Installs Counter Barrier in Term…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-22\",\\n+      \"articleId\": \"a-20260821-1021-taiwan-protests-etihad-airways-in-flight\",\\n+      \"zh\": \"搜尋：阿提哈德航空廣播稱中國台灣 外交部嚴正抗議要…\",\\n+      \"en\": \"Explore: Taiwan Protests Etihad Airways In-Flight Announc…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-22\",\\n+      \"articleId\": \"a-20260821-1338-finland-investigates-suspected-airspace\",\\n+      \"zh\": \"搜尋：俄伊爾20偵察機涉侵犯芬蘭領空 邊境衛隊展開…\",\\n+      \"en\": \"Explore: Finland Investigates Suspected Airspace Violatio…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-22\",\\n+      \"articleId\": \"a-20260821-1425-westjet-confirms-all-boeing-737s-reverte\",\\n+      \"zh\": \"搜尋：西捷航空確認所有波音737已恢復174座配置…\",\\n+      \"en\": \"Explore: WestJet confirms all Boeing 737s reverted to 174…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-22\",\\n+      \"articleId\": \"a-20260821-1621-cessna-441-charter-crash-near-alaska-mil\",\\n+      \"zh\": \"搜尋：賽斯納441包機於阿拉斯加軍用雷達站附近墜毀…\",\\n+      \"en\": \"Explore: Cessna 441 Charter Crash Near Alaska Military Ra…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-23\",\\n+      \"articleId\": \"a-20260822-0724-cosmic-aerospace-details-cosmic-one-elec\",\\n+      \"zh\": \"Cosmic One 電動飛機計畫\",\\n+      \"en\": \"Cosmic Aerospace Cosmic One project updates\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-23\",\\n+      \"articleId\": \"a-20260822-0724-qantas-delays-return-of-nonstop-perth-lo\",\\n+      \"zh\": \"澳洲航空伯斯到倫敦直飛航班\",\\n+      \"en\": \"Qantas nonstop Perth to London flight info\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-23\",\\n+      \"articleId\": \"a-20260822-0724-spanish-f-a-18-fighter-intercepts-and-de\",\\n+      \"zh\": \"西班牙 F/A-18 戰機動態\",\\n+      \"en\": \"Spanish F/A-18 fighter jet information\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-23\",\\n+      \"articleId\": \"a-20260822-0818-assembly-of-switzerland-s-first-f-35a-fi\",\\n+      \"zh\": \"瑞士 F-35A 戰機最新消息\",\\n+      \"en\": \"Switzerland F-35A fighter jet details\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-23\",\\n+      \"articleId\": \"a-20260822-1220-unauthorized-wifi-detected-on-delta-flig\",\\n+      \"zh\": \"達美航空 DL591 班機資訊\",\\n+      \"en\": \"Delta flight DL591 status\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-23\",\\n+      \"articleId\": \"a-20260822-1325-tigerair-taiwan-to-raise-booking-service\",\\n+      \"zh\": \"台灣虎航訂位服務費說明\",\\n+      \"en\": \"Tigerair Taiwan booking service fee information\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-24\",\\n+      \"articleId\": \"a-20260822-1816-united-airlines-rolls-royce-dispute-puts\",\\n+      \"zh\": \"了解聯合航空與 A350 客機的最新動態\",\\n+      \"en\": \"Read about United Airlines and Airbus A350 fleet news\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-24\",\\n+      \"articleId\": \"a-20260823-0044-american-airlines-boeing-737-800-suffers\",\\n+      \"zh\": \"查看美國航空波音737-800在芝加哥奧黑爾的消息\",\\n+      \"en\": \"Find news on American Airlines Boeing 737-800 at O'Hare\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-24\",\\n+      \"articleId\": \"a-20260823-0044-oakland-sees-13-5-flight-drop-after-dism\",\\n+      \"zh\": \"查詢西南航空在奧克蘭機場的最新消息\",\\n+      \"en\": \"Check information on Southwest Airlines and Oakland\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-24\",\\n+      \"articleId\": \"a-20260823-1220-northrop-grumman-s-yfq-48a-talon-blue-sc\",\\n+      \"zh\": \"探索諾斯洛普格拉曼 YFQ-48A 消息\",\\n+      \"en\": \"Discover news on Northrop Grumman YFQ-48A Talon Blue\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-24\",\\n+      \"articleId\": \"a-20260823-1513-syberjet-claims-light-jet-transcontinent\",\\n+      \"zh\": \"搜尋 SyberJet SJ30-2 的相關資訊\",\\n+      \"en\": \"Search for details about the SyberJet SJ30-2 aircraft\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-24\",\\n+      \"articleId\": \"a-20260823-1614-us-army-upgrades-chinook-fleet-under-472\",\\n+      \"zh\": \"想了解美軍契努克直升機的最新動態嗎？\",\\n+      \"en\": \"Explore updates on the US Army Chinook helicopter fleet\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-25\",\\n+      \"articleId\": \"a-20260824-1119-hungarian-gripen-fighter-jet-crashes-at\",\\n+      \"zh\": \"匈牙利獅鷲戰機\",\\n+      \"en\": \"Hungarian Gripen fighter jet\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-25\",\\n+      \"articleId\": \"a-20260824-1119-indonesian-air-force-su-30-overruns-runw\",\\n+      \"zh\": \"印尼空軍Su-30\",\\n+      \"en\": \"Indonesian Air Force Su-30\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-25\",\\n+      \"articleId\": \"a-20260824-1228-archer-aviation-and-aeg-partner-to-devel\",\\n+      \"zh\": \"Archer垂直起降機場\",\\n+      \"en\": \"Archer Aviation vertiport at L.A. LIVE\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-25\",\\n+      \"articleId\": \"a-20260824-1228-archer-aviation-and-aeg-partner-to-devel\",\\n+      \"zh\": \"Archer洛杉磯垂直起降場\",\\n+      \"en\": \"Archer Aviation vertiport L.A.\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-25\",\\n+      \"articleId\": \"a-20260824-1228-bulgaria-neutralizes-high-powered-gps-ja\",\\n+      \"zh\": \"索菲亞機場GPS干擾\",\\n+      \"en\": \"Sofia Airport GPS jammer\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-25\",\\n+      \"articleId\": \"a-20260824-1228-bulgaria-neutralizes-high-powered-gps-ja\",\\n+      \"zh\": \"索菲亞機場GPS干擾器\",\\n+      \"en\": \"Sofia Airport GPS jammer\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-25\",\\n+      \"articleId\": \"a-20260824-1228-flight-attendants-raise-staffing-concern\",\\n+      \"zh\": \"阿拉斯加航空787-9人力\",\\n+      \"en\": \"Alaska Airlines 787-9 staffing\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-25\",\\n+      \"articleId\": \"a-20260824-1228-flight-attendants-raise-staffing-concern\",\\n+      \"zh\": \"阿拉斯加航空波音787-9\",\\n+      \"en\": \"Alaska Airlines Boeing 787-9\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-25\",\\n+      \"articleId\": \"a-20260824-1343-saab-unveils-a3-001-gripen-wingman-conce\",\\n+      \"zh\": \"紳寶A3-001無人僚機\",\\n+      \"en\": \"Saab A3-001 Gripen wingman\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-25\",\\n+      \"articleId\": \"a-20260824-1343-saab-unveils-a3-001-gripen-wingman-conce\",\\n+      \"zh\": \"紳寶A3-001無人僚機\",\\n+      \"en\": \"Saab A3-001 wingman\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-25\",\\n+      \"articleId\": \"a-20260824-1800-american-airlines-debt-filing-reveals-ne\",\\n+      \"zh\": \"美國航空機隊策略方向\",\\n+      \"en\": \"American Airlines fleet strategy\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-25\",\\n+      \"articleId\": \"a-20260824-1800-southwest-airlines-to-cut-68-routes-and\",\\n+      \"zh\": \"西南航空航線調整資訊\",\\n+      \"en\": \"Southwest Airlines route changes\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-26\",\\n+      \"articleId\": \"a-20260825-1435-china-s-s4000-airborne-wind-turbine-syst\",\\n+      \"zh\": \"搜尋：中國S4000浮空風力發電系統完成13123…\",\\n+      \"en\": \"Explore: China's S4000 Airborne Wind Turbine System Compl…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-26\",\\n+      \"articleId\": \"a-20260825-1435-swiss-boeing-777-diversion-to-azores-cau\",\\n+      \"zh\": \"搜尋：瑞士國際航空波音777因異味轉降亞速爾群島\",\\n+      \"en\": \"Explore: SWISS Boeing 777 Diversion to Azores Caused by M…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-26\",\\n+      \"articleId\": \"a-20260825-1435-united-confirms-first-international-dest\",\\n+      \"zh\": \"搜尋：聯合航空公布A321XLR首批國際航線\",\\n+      \"en\": \"Explore: United confirms first international destinations…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-26\",\\n+      \"articleId\": \"a-20260825-1534-bangladesh-drafts-agreement-documents-fo\",\\n+      \"zh\": \"搜尋：孟加拉草擬向中國及土耳其採購軍機文件\",\\n+      \"en\": \"Explore: Bangladesh drafts agreement documents for Chines…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-26\",\\n+      \"articleId\": \"a-20260825-1534-montreal-airport-employee-struck-and-kil\",\\n+      \"zh\": \"搜尋：蒙特婁機場員工遭French Bee客機撞擊…\",\\n+      \"en\": \"Explore: Montreal Airport Employee Struck and Killed by B…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-26\",\\n+      \"articleId\": \"a-20260825-1625-embraer-phenom-300ev-with-autoland-recei\",\\n+      \"zh\": \"搜尋：巴西航空工業 Phenom 300EV 獲三…\",\\n+      \"en\": \"Explore: Embraer Phenom 300EV with Autoland receives trip…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-27\",\\n+      \"articleId\": \"a-20260826-0932-united-airlines-passengers-stranded-on-w\",\\n+      \"zh\": \"聯合航空威斯康辛停機坪等待\",\\n+      \"en\": \"United Airlines Wisconsin tarmac delay\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-27\",\\n+      \"articleId\": \"a-20260826-1120-british-airways-to-resume-airbus-a380-fl\",\\n+      \"zh\": \"英國航空的空中巴士A380航線\",\\n+      \"en\": \"British Airways Airbus A380 route\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-27\",\\n+      \"articleId\": \"a-20260826-1232-china-airlines-to-revise-frontline-staff\",\\n+      \"zh\": \"華航一線人員名牌調整\",\\n+      \"en\": \"China Airlines staff name tag format\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-27\",\\n+      \"articleId\": \"a-20260826-1346-china-tests-boeing-747-length-airship-ai\",\\n+      \"zh\": \"波音747長度飛船原型機\",\\n+      \"en\": \"Boeing 747-length airship prototype\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-27\",\\n+      \"articleId\": \"a-20260826-1610-britten-norman-begins-ground-testing-of\",\\n+      \"zh\": \"英國製造的Islander飛機進度\",\\n+      \"en\": \"Britten-Norman UK-built Islander aircraft\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-27\",\\n+      \"articleId\": \"a-20260826-1610-delta-confirms-resumption-of-new-york-te\",\\n+      \"zh\": \"達美航空紐約到特拉維夫航班\",\\n+      \"en\": \"Delta flights from New York to Tel Aviv\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-28\",\\n+      \"articleId\": \"a-20260827-0746-caa-permits-mandarin-airlines-flight-cut\",\\n+      \"zh\": \"搜尋華信航空與立榮航空的花蓮航線消息\",\\n+      \"en\": \"Look up Mandarin Airlines and UNI Air Hualien routes\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-28\",\\n+      \"articleId\": \"a-20260827-0859-atsb-opens-two-new-investigations-into-s\",\\n+      \"zh\": \"了解澳洲航安會與雪梨機場（SYD）的最新消息\",\\n+      \"en\": \"Check ATSB reports regarding Sydney Airport (SYD)\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-28\",\\n+      \"articleId\": \"a-20260827-0859-delta-air-lines-to-resume-new-york-tel-a\",\\n+      \"zh\": \"查詢達美航空A330-900neo與特拉維夫航線\",\\n+      \"en\": \"Search Delta Air Lines Airbus A330-900neo flights\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-28\",\\n+      \"articleId\": \"a-20260827-0859-starlux-airlines-appoints-koki-as-art-pl\",\\n+      \"zh\": \"想查看星宇航空藝術機的相關新聞\",\\n+      \"en\": \"Look up news about STARLUX Airlines art plane\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-28\",\\n+      \"articleId\": \"a-20260827-1322-eva-air-and-china-airlines-showcase-deca\",\\n+      \"zh\": \"想了解長榮航空與中華航空的最新動態\",\\n+      \"en\": \"Explore the latest updates from EVA Air and China Airlines\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-28\",\\n+      \"articleId\": \"a-20260827-1322-philippine-airlines-to-upgrade-manila-me\",\\n+      \"zh\": \"搜尋菲律賓航空馬尼拉至墨爾本的航班資訊\",\\n+      \"en\": \"Find Philippine Airlines Manila to Melbourne flights\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-29\",\\n+      \"articleId\": \"a-20260827-0859-delta-air-lines-to-resume-new-york-tel-a\",\\n+      \"zh\": \"達美航空台北復飛特拉維夫\",\\n+      \"en\": \"Delta A330-900neo New York Tel Aviv flights\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-29\",\\n+      \"articleId\": \"a-20260827-1322-eva-air-and-china-airlines-showcase-deca\",\\n+      \"zh\": \"長榮航空與中華航空減碳\",\\n+      \"en\": \"EVA Air China Airlines decarbonization expo\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-29\",\\n+      \"articleId\": \"a-20260827-1322-philippine-airlines-to-upgrade-manila-me\",\\n+      \"zh\": \"菲航馬尼拉墨爾本每日航班\",\\n+      \"en\": \"Philippine Airlines daily Manila Melbourne flights\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-29\",\\n+      \"articleId\": \"a-20260828-0802-ntsb-examines-marine-one-radio-failure-a\",\\n+      \"zh\": \"海軍陸戰隊一號無線電故障\",\\n+      \"en\": \"Marine One radio failure DCA antenna\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-29\",\\n+      \"articleId\": \"a-20260828-0802-tigerair-taiwan-marks-12th-anniversary-w\",\\n+      \"zh\": \"台灣虎航九州機票捐款\",\\n+      \"en\": \"Tigerair Taiwan Kyushu ticket donation\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-29\",\\n+      \"articleId\": \"a-20260828-2030-american-airlines-changes-downgrade-refu\",\\n+      \"zh\": \"美國航空降等退款規則\",\\n+      \"en\": \"American Airlines downgrade refund rule\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-30\",\\n+      \"articleId\": \"a-20260829-0937-taiwan-tigerair-holds-cabin-crew-recruit\",\\n+      \"zh\": \"台灣虎航空服招募\",\\n+      \"en\": \"Taiwan Tigerair cabin crew test\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-30\",\\n+      \"articleId\": \"a-20260829-1449-cathay-pacific-jet-intercepted-by-nato-f\",\\n+      \"zh\": \"國泰航空遭攔截\",\\n+      \"en\": \"Cathay Pacific NATO interception\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-30\",\\n+      \"articleId\": \"a-20260829-1449-cathay-pacific-jet-intercepted-by-nato-f\",\\n+      \"zh\": \"搜尋：國泰航空客機因無線電頻率錯誤遭北約戰機攔截\",\\n+      \"en\": \"Explore: Cathay Pacific Jet Intercepted by NATO Fighter J…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-30\",\\n+      \"articleId\": \"a-20260829-1449-czech-startup-zuri-unveils-hybrid-electr\",\\n+      \"zh\": \"Zuri傾轉旋翼機亮相\",\\n+      \"en\": \"Zuri hybrid tiltrotor drone\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-30\",\\n+      \"articleId\": \"a-20260829-1449-czech-startup-zuri-unveils-hybrid-electr\",\\n+      \"zh\": \"搜尋：捷克Zuri發表無人貨運傾轉旋翼機並籌措A輪…\",\\n+      \"en\": \"Explore: Czech Startup Zuri Unveils Hybrid-Electric Cargo…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-30\",\\n+      \"articleId\": \"a-20260829-1449-discover-airlines-announces-first-routes\",\\n+      \"zh\": \"搜尋：DiscoverAirlines將於2027…\",\\n+      \"en\": \"Explore: Discover Airlines Announces First Routes to UK a…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-30\",\\n+      \"articleId\": \"a-20260829-1449-nz-prime-minister-scolds-air-new-zealand\",\\n+      \"zh\": \"搜尋：紐西蘭總理公開批評紐航業績表現 紐航財年稅後…\",\\n+      \"en\": \"Explore: NZ Prime Minister Scolds Air New Zealand Over Fi…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-30\",\\n+      \"articleId\": \"a-20260829-1449-nz-prime-minister-scolds-air-new-zealand\",\\n+      \"zh\": \"紐航虧損惹批評\",\\n+      \"en\": \"Air New Zealand loss scolded\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-30\",\\n+      \"articleId\": \"a-20260829-1449-regent-craft-closes-240m-series-b-round\",\\n+      \"zh\": \"搜尋：REGENT完成2.4億美元B輪融資 總籌資…\",\\n+      \"en\": \"Explore: REGENT Craft Closes $240M Series B Round to Adva…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-30\",\\n+      \"articleId\": \"a-20260829-1449-south-korean-attack-drones-crash-in-nava\",\\n+      \"zh\": \"搜尋：韓國國產巡飛彈首度艦載試射失敗 國防科學研究…\",\\n+      \"en\": \"Explore: South Korean Attack Drones Crash in Naval Test D…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-30\",\\n+      \"articleId\": \"a-20260829-1449-south-korean-attack-drones-crash-in-nava\",\\n+      \"zh\": \"韓國攻擊無人機墜海\",\\n+      \"en\": \"South Korean drones crash\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-30\",\\n+      \"articleId\": \"a-20260829-1758-manchester-airport-owner-says-hackers-de\",\\n+      \"zh\": \"曼徹斯特機場遭駭\",\\n+      \"en\": \"Manchester Airport cyber attack\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-31\",\\n+      \"articleId\": \"a-20260830-0842-airlink-e-jets-flyover-cape-town-stadium\",\\n+      \"zh\": \"搜尋：Airlink客機低空飛越開普敦體育場 飛行…\",\\n+      \"en\": \"Explore: Airlink E-Jets Flyover Cape Town Stadium Shows C…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-31\",\\n+      \"articleId\": \"a-20260830-0842-flyarystan-airbus-a320-catches-fire-duri\",\\n+      \"zh\": \"搜尋：FlyArystan空中巴士A320在阿拉木…\",\\n+      \"en\": \"Explore: FlyArystan Airbus A320 Catches Fire During Maint…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-31\",\\n+      \"articleId\": \"a-20260830-0842-taiwan-executive-yuan-to-review-passed-u\",\\n+      \"zh\": \"搜尋：立院三讀無人機條例 政院稱收到法案後審慎考量\",\\n+      \"en\": \"Explore: Taiwan Executive Yuan to Review Passed Unmanned…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-31\",\\n+      \"articleId\": \"a-20260830-1419-airbus-a320-family-final-assembly-takes\",\\n+      \"zh\": \"搜尋：空中巴士A320客機組裝耗時約三週 目標20…\",\\n+      \"en\": \"Explore: Airbus A320 Family Final Assembly Takes Three We…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-31\",\\n+      \"articleId\": \"a-20260830-1419-singapore-airlines-outlines-10-airbus-a3\",\\n+      \"zh\": \"搜尋：新加坡航空空中巴士A380航線公布：涵蓋倫敦…\",\\n+      \"en\": \"Explore: Singapore Airlines Outlines 10 Airbus A380 Route…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-08-31\",\\n+      \"articleId\": \"a-20260830-1419-ukraine-intelligence-russia-imports-70-0\",\\n+      \"zh\": \"搜尋：烏情報單位指俄羅斯進口7萬噸Jet A-1航…\",\\n+      \"en\": \"Explore: Ukraine Intelligence: Russia Imports 70,000 Tons…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-01\",\\n+      \"articleId\": \"a-20260831-0626-israel-to-replace-aging-boeing-707-tanke\",\\n+      \"zh\": \"搜尋 以色列 KC-46A 替換 707\",\\n+      \"en\": \"Find Israel KC-46A replacement Boeing 707\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-01\",\\n+      \"articleId\": \"a-20260831-0854-faa-orders-boeing-787-wing-inspections-o\",\\n+      \"zh\": \"查詢 FAA 787 機翼 檢查\",\\n+      \"en\": \"Check FAA Boeing 787 wing inspection order\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-01\",\\n+      \"articleId\": \"a-20260831-1437-algeria-deploys-four-su-30-fighters-and\",\\n+      \"zh\": \"查詢 阿爾及利亞 Su30 尼亞美\",\\n+      \"en\": \"Search Algeria Su30 deployment Niamey\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-01\",\\n+      \"articleId\": \"a-20260831-1437-euroatlantic-airways-names-pauls-calitis\",\\n+      \"zh\": \"了解 euroAtlantic 新執行長\",\\n+      \"en\": \"Explore euroAtlantic new CEO Pauls Calitis\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-01\",\\n+      \"articleId\": \"a-20260831-1437-raf-a400m-transport-lands-us-and-uk-mari\",\\n+      \"zh\": \"尋找 RAF A400M 極地 島嶼\",\\n+      \"en\": \"Locate RAF A400M Arctic island Jan Mayen\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-01\",\\n+      \"articleId\": \"a-20260831-2030-latam-airbus-a320-runs-off-runway-in-hea\",\\n+      \"zh\": \"搜尋 LATAM A320 巴西 跑道\",\\n+      \"en\": \"Find LATAM A320 runway incident Brazil\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-02\",\\n+      \"articleId\": \"a-20260901-1048-air-advisor-names-london-heathrow-world\",\\n+      \"zh\": \"查詢倫敦希斯洛機場 (LHR) 的服務評價\",\\n+      \"en\": \"Look up reviews for London Heathrow Airport (LHR)\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-02\",\\n+      \"articleId\": \"a-20260901-1048-boeing-reportedly-discounting-737-max-10\",\\n+      \"zh\": \"了解波音 737 MAX 10 的機型規格與售價\",\\n+      \"en\": \"Learn more about Boeing 737 MAX 10 specifications\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-02\",\\n+      \"articleId\": \"a-20260901-1048-iata-to-hold-4th-world-sustainability-sy\",\\n+      \"zh\": \"尋找 IATA 於布魯塞爾舉辦高峰會的相關資訊\",\\n+      \"en\": \"Find info on the IATA summit hosted in Brussels\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-02\",\\n+      \"articleId\": \"a-20260901-1048-jetzero-secures-100-million-loan-facilit\",\\n+      \"zh\": \"搜尋 JetZero Z4 翼身融合飛機設計細節\",\\n+      \"en\": \"Search for JetZero Z4 blended wing body details\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-02\",\\n+      \"articleId\": \"a-20260901-1048-united-airlines-app-update-lets-delayed\",\\n+      \"zh\": \"探索聯合航空 App 提供的最新服務功能\",\\n+      \"en\": \"Discover features in the United Airlines mobile app\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-02\",\\n+      \"articleId\": \"a-20260901-1600-starlux-airlines-sorayama-gold-a350-1000\",\\n+      \"zh\": \"想瞭解星宇航空 A350-1000 塗裝特色\",\\n+      \"en\": \"Explore STARLUX Airlines A350-1000 fleet features\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-03\",\\n+      \"articleId\": \"a-20260902-0217-boeing-mh-139a-grey-wolf-reaches-initial\",\\n+      \"zh\": \"查詢 波音 MH-139A 灰狼\",\\n+      \"en\": \"Boeing MH-139A Grey Wolf info\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-03\",\\n+      \"articleId\": \"a-20260902-0727-faa-grants-part-139-operating-certificat\",\\n+      \"zh\": \"查詢 FAA 華盛頓馬納薩斯機場\",\\n+      \"en\": \"FAA Washington Manassas Airport cert\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-03\",\\n+      \"articleId\": \"a-20260902-0727-sas-equips-over-80-a320neo-aircraft-with\",\\n+      \"zh\": \"查詢 SAS A320neo 衛星網路\",\\n+      \"en\": \"SAS A320neo Starlink Wi‑Fi\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-03\",\\n+      \"articleId\": \"a-20260902-1224-air-china-boeing-747-8-damaged-by-fuel-t\",\\n+      \"zh\": \"查詢 中國國際航空 波音747-8\",\\n+      \"en\": \"Air China Boeing 747-8 details\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-03\",\\n+      \"articleId\": \"a-20260902-1224-taiwan-tigerair-launches-kaohsiung-route\",\\n+      \"zh\": \"查詢 台灣虎航 高雄 航線\",\\n+      \"en\": \"Taiwan Tigerair Kaohsiung routes\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-03\",\\n+      \"articleId\": \"a-20260902-1655-ryanair-to-cut-winter-flights-over-high\",\\n+      \"zh\": \"查詢 Ryanair 航班\",\\n+      \"en\": \"Find Ryanair flight info\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-04\",\\n+      \"articleId\": \"a-20260903-1449-fly91-places-1b-order-for-40-atr-72-600\",\\n+      \"zh\": \"FLY91 訂購 ATR 72-600\",\\n+      \"en\": \"FLY91 orders ATR 72-600 aircraft\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-04\",\\n+      \"articleId\": \"a-20260903-1815-airasia-launches-first-codeshare-with-pe\",\\n+      \"zh\": \"亞航 與 飛馬航空 代碼共享\",\\n+      \"en\": \"AirAsia codeshare with Pegasus Airlines\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-04\",\\n+      \"articleId\": \"a-20260903-1815-ge-aerospace-secures-pentagon-diu-contra\",\\n+      \"zh\": \"GE Aerospace 測試載具\",\\n+      \"en\": \"GE Aerospace hypersonic test vehicle\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-04\",\\n+      \"articleId\": \"a-20260903-1815-jcb-aero-receives-boeing-part-145-mainte\",\\n+      \"zh\": \"JCB Aero 獲 Boeing 145 認證\",\\n+      \"en\": \"JCB Aero receives Boeing Part 145 approval\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-04\",\\n+      \"articleId\": \"a-20260903-1815-qatar-airways-accepts-boeing-787-9s-with\",\\n+      \"zh\": \"卡達航空 787-9 無 Qsuite\",\\n+      \"en\": \"Qatar Airways 787-9 without Qsuite\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-04\",\\n+      \"articleId\": \"a-20260903-1815-us-air-force-to-deploy-f-15exs-to-seymou\",\\n+      \"zh\": \"F-15EX 部署 Seymour Johnson\",\\n+      \"en\": \"F-15EX deployment at Seymour Johnson\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-05\",\\n+      \"articleId\": \"a-20260903-2342-boeing-737-max-7-receives-certification\",\\n+      \"zh\": \"搜尋波音 737 MAX 7 最新動態\",\\n+      \"en\": \"Search Boeing 737 MAX 7 updates\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-05\",\\n+      \"articleId\": \"a-20260904-0205-united-airlines-unveils-ski-season-speci\",\\n+      \"zh\": \"搜尋聯合航空 E175 波士頓航線\",\\n+      \"en\": \"Search United Airlines E175 Boston flights\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-05\",\\n+      \"articleId\": \"a-20260904-1223-dhl-global-forwarding-to-build-healthcar\",\\n+      \"zh\": \"查詢 DHL 樟宜機場物流樞紐\",\\n+      \"en\": \"Search DHL at Changi Airport\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-05\",\\n+      \"articleId\": \"a-20260904-1223-us-air-force-retires-ec-130h-compass-cal\",\\n+      \"zh\": \"搜尋美國空軍 EC-130H 機隊\",\\n+      \"en\": \"Search US Air Force EC-130H Compass Call\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-05\",\\n+      \"articleId\": \"a-20260904-1640-air-india-a320neo-loses-all-three-hydrau\",\\n+      \"zh\": \"查詢印度航空 A320neo 相關動態\",\\n+      \"en\": \"Search Air India A320neo\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-05\",\\n+      \"articleId\": \"a-20260904-1640-all-nippon-airways-finalises-additional\",\\n+      \"zh\": \"搜尋全日空 E190-E2 客機資訊\",\\n+      \"en\": \"Search All Nippon Airways E190-E2\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-06\",\\n+      \"articleId\": \"a-20260905-0714-emirates-unveils-new-electric-premium-ec\",\\n+      \"zh\": \"阿聯酋航空 A350 電動豪華經濟艙\",\\n+      \"en\": \"Emirates A350 electric premium economy seat\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-06\",\\n+      \"articleId\": \"a-20260905-0714-frontier-airlines-confirms-departure-fro\",\\n+      \"zh\": \"邊疆航空 JFK LGA EWR\",\\n+      \"en\": \"Frontier Airlines JFK LGA EWR\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-06\",\\n+      \"articleId\": \"a-20260905-0714-united-airlines-unveils-mountain-ascent\",\\n+      \"zh\": \"聯合航空 山脈塗裝 E175\",\\n+      \"en\": \"United Airlines Mountain Ascent E175\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-06\",\\n+      \"articleId\": \"a-20260905-1454-bamboo-airways-sole-aircraft-continues-o\",\\n+      \"zh\": \"越竹航空 A321 峴港 澳門\",\\n+      \"en\": \"Bamboo Airways A321 Da Nang Macau charter\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-06\",\\n+      \"articleId\": \"a-20260905-1702-air-canada-launches-new-a321xlr-heathrow\",\\n+      \"zh\": \"加拿大航空 A321XLR 希斯洛\",\\n+      \"en\": \"Air Canada A321XLR Heathrow\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-06\",\\n+      \"articleId\": \"a-20260905-1702-virgin-atlantic-cuts-five-long-haul-rout\",\\n+      \"zh\": \"維珍大西洋 北美航線\",\\n+      \"en\": \"Virgin Atlantic North America routes\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-07\",\\n+      \"articleId\": \"a-20260906-0835-american-airlines-flight-diverted-to-bal\",\\n+      \"zh\": \"搜尋美國航空轉降巴爾的摩事件\",\\n+      \"en\": \"Search American Airlines diversion to Baltimore\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-07\",\\n+      \"articleId\": \"a-20260906-0835-american-airlines-flight-diverted-to-bal\",\\n+      \"zh\": \"搜尋：美國航空班機因旅客鬧事轉降 乘客協助以膠帶將…\",\\n+      \"en\": \"Explore: American Airlines Flight Diverted to Baltimore A…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-07\",\\n+      \"articleId\": \"a-20260906-1016-delta-air-lines-cuts-4-domestic-routes-f\",\\n+      \"zh\": \"搜尋：達美航空今冬調整網路 砍紐約與拉斯維加斯4條…\",\\n+      \"en\": \"Explore: Delta Air Lines Cuts 4 Domestic Routes From New…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-07\",\\n+      \"articleId\": \"a-20260906-1016-delta-air-lines-cuts-4-domestic-routes-f\",\\n+      \"zh\": \"查看達美航空紐約拉斯維加斯停飛\",\\n+      \"en\": \"See Delta Air Lines cuts NY Las Vegas routes\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-07\",\\n+      \"articleId\": \"a-20260906-1016-taiwan-mnd-tracks-21-chinese-aircraft-an\",\\n+      \"zh\": \"搜尋：國防部偵獲21架次共機與10艘共艦 13架次…\",\\n+      \"en\": \"Explore: Taiwan MND Tracks 21 Chinese Aircraft and 10 War…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-07\",\\n+      \"articleId\": \"a-20260906-1439-mount-anak-krakatau-eruption-grounds-fli\",\\n+      \"zh\": \"搜尋：印尼喀拉喀托之子火山噴發 8座機場暫停營運\",\\n+      \"en\": \"Explore: Mount Anak Krakatau Eruption Grounds Flights at…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-07\",\\n+      \"articleId\": \"a-20260906-1439-mount-anak-krakatau-eruption-grounds-fli\",\\n+      \"zh\": \"查詢喀拉喀托之子火山CGK影響\",\\n+      \"en\": \"Check Mount Anak Krakatau impact on CGK\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-07\",\\n+      \"articleId\": \"a-20260906-1439-ramp-agent-dies-after-being-struck-by-ai\",\\n+      \"zh\": \"了解空中巴士A350蒙特婁意外\",\\n+      \"en\": \"Learn about Airbus A350 Montreal incident\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-07\",\\n+      \"articleId\": \"a-20260906-1439-ramp-agent-dies-after-being-struck-by-ai\",\\n+      \"zh\": \"搜尋：蒙特婁機場地勤人員遭空中巴士A350撞擊不治…\",\\n+      \"en\": \"Explore: Ramp Agent Dies After Being Struck by Airbus A35…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-07\",\\n+      \"articleId\": \"a-20260906-1439-recaro-begins-r4-premium-economy-seat-de\",\\n+      \"zh\": \"探索RecaroR4全日空787-9座椅\",\\n+      \"en\": \"Explore Recaro R4 seats on ANA 787-9\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-07\",\\n+      \"articleId\": \"a-20260906-1439-recaro-begins-r4-premium-economy-seat-de\",\\n+      \"zh\": \"搜尋：Recaro交付新型R4豪華經濟艙座椅 全日…\",\\n+      \"en\": \"Explore: Recaro Begins R4 Premium Economy Seat Deliveries…\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-07\",\\n+      \"articleId\": \"a-20260906-1726-american-airlines-to-launch-10-nonstop-r\",\\n+      \"zh\": \"搜尋美國航空JFK歐洲航線\",\\n+      \"en\": \"Find American Airlines JFK Europe routes\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-08\",\\n+      \"articleId\": \"a-20260907-1335-airbus-a330neo-delivery-delays-impact-pr\",\\n+      \"zh\": \"空中巴士A330neo交付延誤\",\\n+      \"en\": \"Airbus A330neo delivery delays on US routes\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-08\",\\n+      \"articleId\": \"a-20260907-1335-amazon-air-boeing-767-overruns-miami-run\",\\n+      \"zh\": \"亞馬遜波音767在邁阿密衝出跑道\",\\n+      \"en\": \"Amazon Air Boeing 767 runway overrun in Miami\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-08\",\\n+      \"articleId\": \"a-20260907-1335-china-airlines-to-raise-cargo-fuel-surch\",\\n+      \"zh\": \"華航貨運燃油附加費調整\",\\n+      \"en\": \"China Airlines cargo fuel surcharge changes\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-08\",\\n+      \"articleId\": \"a-20260907-1335-emirates-to-suspend-airbus-a380-flights\",\\n+      \"zh\": \"阿聯酋航空A380停飛荷蘭班次\",\\n+      \"en\": \"Emirates Airbus A380 suspension in Netherlands\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-08\",\\n+      \"articleId\": \"a-20260907-1355-british-airways-boeing-787-emergency-sli\",\\n+      \"zh\": \"英國航空波音787在蒙特婁的緊急滑梯\",\\n+      \"en\": \"British Airways Boeing 787 emergency slide in Montreal\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-08\",\\n+      \"articleId\": \"a-20260907-1830-jetblue-launches-eight-new-non-stop-rout\",\\n+      \"zh\": \"捷藍航空從勞德岱堡直飛哪裡\",\\n+      \"en\": \"Where does JetBlue fly non-stop from Fort Lauderdale\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-09\",\\n+      \"articleId\": \"a-20260908-0735-rnzaf-nh90-becomes-first-globally-to-pas\",\\n+      \"zh\": \"紐西蘭空軍 NH90 飛行里程\",\\n+      \"en\": \"Follow RNZAF NH90 flight hour record\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-09\",\\n+      \"articleId\": \"a-20260908-0735-satellite-images-show-russian-helicopter\",\\n+      \"zh\": \"索契機場 AER 俄直升機 遭襲\",\\n+      \"en\": \"Monitor Sochi AER Russian helicopters after drone strike\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-09\",\\n+      \"articleId\": \"a-20260908-0735-shinkong-fibers-partners-with-jedsy-for\",\\n+      \"zh\": \"新纖 JEDSY 醫藥無人機 物流\",\\n+      \"en\": \"Explore Shinkong Fibers JEDSY medical drone logistics\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-09\",\\n+      \"articleId\": \"a-20260908-1224-breeze-retires-its-last-embraer-e190-to\",\\n+      \"zh\": \"Breeze E190 退役 改用 A220\",\\n+      \"en\": \"See Breeze retire E190 for all A220 fleet\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-09\",\\n+      \"articleId\": \"a-20260908-1224-qantaslink-receives-first-embraer-e190-i\",\\n+      \"zh\": \"QantasLink E190 伯斯航班查詢\",\\n+      \"en\": \"Check QantasLink E190 flights to Perth\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-09\",\\n+      \"articleId\": \"a-20260908-1224-swiss-plans-to-donate-last-airbus-a340-3\",\\n+      \"zh\": \"瑞士航空 A340 捐贈交通博物館\",\\n+      \"en\": \"Track SWISS A340 donation to transport museum\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-10\",\\n+      \"articleId\": \"a-20260909-0854-taiwan-detects-16-pla-aircraft-with-11-c\",\\n+      \"zh\": \"偵獲共機訊息\",\\n+      \"en\": \"Taiwan detects PLA aircraft\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-10\",\\n+      \"articleId\": \"a-20260909-1026-breeze-airways-retires-last-embraer-e190\",\\n+      \"zh\": \"Breeze Airways退役E190\",\\n+      \"en\": \"Breeze Airways retires E190\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-10\",\\n+      \"articleId\": \"a-20260909-1026-egyptair-to-launch-20-hour-sydney-route\",\\n+      \"zh\": \"埃及航空雪梨\",\\n+      \"en\": \"EgyptAir Sydney route\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-10\",\\n+      \"articleId\": \"a-20260909-1026-fiji-airways-to-launch-direct-western-sy\",\\n+      \"zh\": \"斐濟航空西雪梨\",\\n+      \"en\": \"Fiji Airways Western Sydney\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-10\",\\n+      \"articleId\": \"a-20260909-1026-trans-air-cargo-service-dc-8-freighter-v\",\\n+      \"zh\": \"Trans Air Cargo DC-8\",\\n+      \"en\": \"Trans Air Cargo DC-8\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-10\",\\n+      \"articleId\": \"a-20260909-1532-easyjet-announces-new-extremely-short-uk\",\\n+      \"zh\": \"易捷航空的新航線\",\\n+      \"en\": \"easyJet's new UK route\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-11\",\\n+      \"articleId\": \"a-20260910-0818-sweden-awards-saab-additional-300m-to-te\",\\n+      \"zh\": \"薩博 未來 戰機\",\\n+      \"en\": \"Saab future fighter technology\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-11\",\\n+      \"articleId\": \"a-20260910-1231-starlux-airlines-and-tigerair-taiwan-rep\",\\n+      \"zh\": \"星宇航空 新航線\",\\n+      \"en\": \"Starlux Airlines new routes\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-11\",\\n+      \"articleId\": \"a-20260910-1414-emergency-slide-accidental-deployment-de\",\\n+      \"zh\": \"空軍一號 逃生梯 意外\",\\n+      \"en\": \"Air Force One emergency slide accidental\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-11\",\\n+      \"articleId\": \"a-20260910-1414-frontier-airlines-unveils-first-ever-fli\",\\n+      \"zh\": \"邊疆航空 南美 新航線\",\\n+      \"en\": \"Frontier Airlines South America routes\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-11\",\\n+      \"articleId\": \"a-20260910-1646-eutelsat-orders-229-additional-oneweb-sa\",\\n+      \"zh\": \"Eutelsat OneWeb 衛星\",\\n+      \"en\": \"Eutelsat OneWeb satellites\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-11\",\\n+      \"articleId\": \"a-20260910-1646-ryanair-ceo-denies-passenger-was-sucked\",\\n+      \"zh\": \"瑞安航空 波音737 窗戶\",\\n+      \"en\": \"Ryanair Boeing 737 window\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-12\",\\n+      \"articleId\": \"a-20260911-1015-mandarin-airlines-launches-direct-taitun\",\\n+      \"zh\": \"華信航空 台東 澎湖 包機\",\\n+      \"en\": \"Mandarin Airlines Taitung Penghu charter\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-12\",\\n+      \"articleId\": \"a-20260911-1443-emirates-to-deploy-retrofitted-airbus-a3\",\\n+      \"zh\": \"阿聯酋航空 A380 豪華經濟艙 巴黎\",\\n+      \"en\": \"Emirates A380 premium economy Paris\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-12\",\\n+      \"articleId\": \"a-20260911-1443-joby-aviation-commences-first-eipp-evtol\",\\n+      \"zh\": \"Joby Aviation eVTOL 達拉斯 示範\",\\n+      \"en\": \"Joby Aviation eVTOL Dallas demo\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-12\",\\n+      \"articleId\": \"a-20260911-1443-virgin-atlantic-sells-two-boeing-787-9s\",\\n+      \"zh\": \"維珍航空 787-9 轉讓 波蘭航空\",\\n+      \"en\": \"Virgin Atlantic 787-9 transfer to LOT\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-12\",\\n+      \"articleId\": \"a-20260911-1506-amazon-air-cargo-jet-overruns-miami-runw\",\\n+      \"zh\": \"亞馬遜空運 貨機 邁阿密 衝出跑道\",\\n+      \"en\": \"Amazon Air cargo jet Miami runway overrun\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-12\",\\n+      \"articleId\": \"a-20260911-1801-flydubai-launches-boeing-737-800-freight\",\\n+      \"zh\": \"flydubai 737-800 貨機班次\",\\n+      \"en\": \"flydubai 737-800 freighter flights\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-13\",\\n+      \"articleId\": \"a-20260912-0949-avianca-signs-sale-and-leaseback-deal-fo\",\\n+      \"zh\": \"Avianca A320neo 租賃\",\\n+      \"en\": \"Avianca A320neo leaseback with BOC Aviation\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-13\",\\n+      \"articleId\": \"a-20260912-0949-united-airlines-awaits-boeing-737-max-10\",\\n+      \"zh\": \"United 737 MAX 10 交付\",\\n+      \"en\": \"United 737 MAX 10 delivery status\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-13\",\\n+      \"articleId\": \"a-20260912-1316-faa-proposes-replacing-53-year-overland\",\\n+      \"zh\": \"FAA超音速飛行標準\",\\n+      \"en\": \"FAA supersonic flight standard\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-13\",\\n+      \"articleId\": \"a-20260912-1316-la-compagnie-plans-all-business-class-fl\",\\n+      \"zh\": \"La Compagnie 紐約杜塞道夫全商務\",\\n+      \"en\": \"La Compagnie New York Düsseldorf all‑business\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-13\",\\n+      \"articleId\": \"a-20260912-1316-la-compagnie-plans-all-business-class-fl\",\\n+      \"zh\": \"La Compagnie紐約杜塞道夫航線\",\\n+      \"en\": \"La Compagnie Newark Düsseldorf route\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-13\",\\n+      \"articleId\": \"a-20260912-1316-ryanair-boeing-737-max-scrapes-wingtip-a\",\\n+      \"zh\": \"Ryanair 737 MAX 都柏林翼尖\",\\n+      \"en\": \"Ryanair 737 MAX Dublin wingtip incident\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-13\",\\n+      \"articleId\": \"a-20260912-1316-ryanair-boeing-737-max-scrapes-wingtip-a\",\\n+      \"zh\": \"瑞安航空737 MAX都柏林降落\",\\n+      \"en\": \"Ryanair 737 MAX Dublin landing\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-13\",\\n+      \"articleId\": \"a-20260912-1316-us-air-force-awards-highest-safety-troph\",\\n+      \"zh\": \"美國空軍F-22飛行員獎項\",\\n+      \"en\": \"US Air Force F-22 pilot award\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-13\",\\n+      \"articleId\": \"a-20260912-1451-bombardier-global-8000-cleared-by-caa-fo\",\\n+      \"zh\": \"Global 8000 倫敦城市機場\",\\n+      \"en\": \"Global 8000 London City Airport operations\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-13\",\\n+      \"articleId\": \"a-20260912-1451-bombardier-global-8000-cleared-by-caa-fo\",\\n+      \"zh\": \"龐巴迪Global 8000倫敦城市機場\",\\n+      \"en\": \"Bombardier Global 8000 London City Airport\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-13\",\\n+      \"articleId\": \"a-20260912-1633-air-canada-launches-9-hour-transatlantic\",\\n+      \"zh\": \"加拿大航空跨大西洋新航線\",\\n+      \"en\": \"Air Canada transatlantic route\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-13\",\\n+      \"articleId\": \"a-20260912-1714-uk-gives-nats-one-week-to-explain-outage\",\\n+      \"zh\": \"NATS 系統故障查詢\",\\n+      \"en\": \"NATS outage explanation request\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-14\",\\n+      \"articleId\": \"a-20260913-0210-american-airlines-passenger-strips-mid-f\",\\n+      \"zh\": \"美國航空邁阿密旅客事件\",\\n+      \"en\": \"American Airlines passenger in Miami\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-14\",\\n+      \"articleId\": \"a-20260913-0748-global-airline-ancillary-revenue-up-13-4\",\\n+      \"zh\": \"聯合航空附加收入表現\",\\n+      \"en\": \"United Airlines ancillary revenue\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-14\",\\n+      \"articleId\": \"a-20260913-0748-netherlands-signs-intent-to-procure-saab\",\\n+      \"zh\": \"荷蘭採購薩博GlobalEye\",\\n+      \"en\": \"Netherlands Saab GlobalEye deal\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-14\",\\n+      \"articleId\": \"a-20260913-0748-virgin-australia-passengers-restrained-a\",\\n+      \"zh\": \"維珍澳洲航班乘客事件\",\\n+      \"en\": \"Virgin Australia passenger incident\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-14\",\\n+      \"articleId\": \"a-20260913-1046-china-airlines-group-deploys-new-a321neo\",\\n+      \"zh\": \"華航A321neo高雄航線\",\\n+      \"en\": \"China Airlines A321neo Kaohsiung flights\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-14\",\\n+      \"articleId\": \"a-20260913-1550-frontier-airlines-returns-to-oakland-fol\",\\n+      \"zh\": \"搭Frontier去奧克蘭\",\\n+      \"en\": \"Fly Frontier Airlines to Oakland\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-15\",\\n+      \"articleId\": \"a-20260914-0819-amazon-pauses-21-air-cargo-flights-follo\",\\n+      \"zh\": \"Amazon 21 Air 邁阿密 767\",\\n+      \"en\": \"Amazon 21 Air Miami 767 pause\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-15\",\\n+      \"articleId\": \"a-20260914-0819-frontier-passengers-stranded-overnight-i\",\\n+      \"zh\": \"Frontier Airlines 諾克斯維爾 滯留\",\\n+      \"en\": \"Frontier Airlines Knoxville overnight stranded\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-15\",\\n+      \"articleId\": \"a-20260914-1340-airbaltic-files-for-chapter-11-in-us-wit\",\\n+      \"zh\": \"airBaltic 第11章 重組\",\\n+      \"en\": \"airBaltic Chapter 11 restructuring\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-15\",\\n+      \"articleId\": \"a-20260914-1340-china-airlines-uses-40-sustainable-aviat\",\\n+      \"zh\": \"華航 阿姆斯特丹 永續燃油\",\\n+      \"en\": \"China Airlines Amsterdam sustainable fuel\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-15\",\\n+      \"articleId\": \"a-20260914-1420-china-airlines-looks-to-deliver-787-9-je\",\\n+      \"zh\": \"華航 787-9 交付狀況\",\\n+      \"en\": \"China Airlines 787-9 delivery status\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-15\",\\n+      \"articleId\": \"a-20260914-1527-ana-holdings-names-new-cargo-airline-ana\",\\n+      \"zh\": \"ANA Nippon Cargo 查詢\",\\n+      \"en\": \"Find ANA Nippon Cargo info\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-16\",\\n+      \"articleId\": \"a-20260914-1420-china-airlines-looks-to-deliver-787-9-je\",\\n+      \"zh\": \"華航787-9新機\",\\n+      \"en\": \"China Airlines 787-9 delivery\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-16\",\\n+      \"articleId\": \"a-20260914-1527-ana-holdings-names-new-cargo-airline-ana\",\\n+      \"zh\": \"ANA Nippon Cargo\",\\n+      \"en\": \"ANA Nippon Cargo airline\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-16\",\\n+      \"articleId\": \"a-20260915-0811-simple-flying-reports-condor-a320-missed\",\\n+      \"zh\": \"Condor A320法蘭克福\",\\n+      \"en\": \"Condor A320 Frankfurt curfew\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-16\",\\n+      \"articleId\": \"a-20260915-0811-virgin-atlantic-accelerates-a330-300-ret\",\\n+      \"zh\": \"維珍航空A330退役\",\\n+      \"en\": \"Virgin Atlantic A330-300 retirement\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-16\",\\n+      \"articleId\": \"a-20260915-1400-ntsb-releases-flight-data-from-amazon-bo\",\\n+      \"zh\": \"亞馬遜波音767貨機\",\\n+      \"en\": \"Amazon Boeing 767 flight data\"\\n+    },\\n+    {\\n+      \"dateTpe\": \"2026-09-16\",\\n+      \"articleId\": \"a-20260915-1545-sydney-airport-rolls-out-50-electric-bus\",\\n+      \"zh\": \"雪梨機場電動巴士\",\\n+      \"en\": \"Sydney Airport electric buses\"\\n+    }\\n+  ]\\n+}\\n@@ -347,7 +347,9 @@ search field. The search page loads the index only when a query is made, so\\n visiting the page without searching does not download the full index.\\n Daily search-box suggestions are also indexed as exact aliases of their linked\\n article, so every displayed suggestion resolves without weakening ordinary\\n-full-text matching.\\n+full-text matching. Previously displayed suggestions stay searchable after the\\n+daily set rotates; a missing historical article only drops its own aliases and\\n+does not invalidate the rest of the batch.\\n \\n ## data/search-prompts.json  (written by search_prompts.py, read by build.py)\\n \\n@@ -361,6 +363,15 @@ Built-in hints are never submitted as suggested queries.\\n When no provider is available or model output is invalid, deterministic prompts\\n are built from those article titles instead. No model reasoning is stored.\\n \\n+## data/search-prompt-aliases.json  (written by search_prompts.py, read by build.py)\\n+\\n+Bounded history of validated bilingual daily suggestions and their source\\n+article IDs. The generator repairs or creates this registry even when the\\n+current Taipei-day prompt file is already up to date, appends each new daily\\n+set, de-duplicates identical mappings and keeps at most 4,096 rows. The build\\n+ignores malformed or orphaned rows individually and indexes every remaining\\n+prompt as an exact alias of its linked published article.\\n+\\n ## data/usage.json  (written by usage.py, read by build.py)\\n \\n Cumulative LLM API spend: per-model-label {calls, inputTokens,\\n@@ -1299,6 +1299,37 @@ def daily_search_prompt_rows() -> tuple[tuple[str, str, str], ...]:\\n     return tuple(rows)\\n \\n \\n+@lru_cache(maxsize=1)\\n+def search_prompt_alias_rows() -> tuple[tuple[str, str, str], ...]:\\n+    \"\"\"Return bounded historical prompt aliases plus the current daily set.\"\"\"\\n+    payload = load_json(DATA_DIR / \"search-prompt-aliases.json\", {})\\n+    items = payload.get(\"items\") if isinstance(payload, dict) else None\\n+    rows = []\\n+    if isinstance(payload, dict) and payload.get(\"version\") == 1 \\\\n+            and isinstance(items, list) and len(items) <= 4096:\\n+        for item in items:\\n+            if not isinstance(item, dict):\\n+                continue\\n+            date_tpe = str(item.get(\"dateTpe\") or \"\").strip()\\n+            article_id = re.sub(\\n+                r\"\\s+\", \" \", str(item.get(\"articleId\") or \"\")).strip()\\n+            zh = re.sub(r\"\\s+\", \" \", str(item.get(\"zh\") or \"\")).strip()\\n+            en = re.sub(r\"\\s+\", \" \", str(item.get(\"en\") or \"\")).strip()\\n+            if not re.fullmatch(r\"\\d{4}-\\d{2}-\\d{2}\", date_tpe) \\\\n+                    or not article_id or len(article_id) > 256 or any(\\n+                    not text or len(text) > 96\\n+                    or re.search(r\"[\\x00-\\x1f<>]\", text)\\n+                    for text in (zh, en)):\\n+                continue\\n+            rows.append((article_id, zh, en))\\n+\\n+    rows.extend(daily_search_prompt_rows())\\n+    unique = {}\\n+    for row in rows:\\n+        unique.setdefault(row, row)\\n+    return tuple(unique.values())\\n+\\n+\\n @lru_cache(maxsize=2)\\n def header_search_placeholders(lang: str) -> tuple[str, ...]:\\n     \"\"\"Load article-backed daily prompts, with non-actionable hints as fallback.\"\"\"\\n@@ -1773,10 +1804,10 @@ def search_index_payload(articles, generated_utc) -> dict:\\n     alias_groups = load_search_alias_groups()\\n     article_ids = {article[\"id\"] for article in articles}\\n     prompt_aliases = {}\\n-    prompt_rows = daily_search_prompt_rows()\\n-    if prompt_rows and all(row[0] in article_ids for row in prompt_rows):\\n-        for article_id, zh_prompt, en_prompt in prompt_rows:\\n-            prompt_aliases[article_id] = (zh_prompt, en_prompt)\\n+    for article_id, zh_prompt, en_prompt in search_prompt_alias_rows():\\n+        if article_id not in article_ids:\\n+            continue\\n+        prompt_aliases.setdefault(article_id, []).extend((zh_prompt, en_prompt))\\n     return {\\n         \"version\": 1,\\n         \"generatedUtc\": generated_utc.isoformat(),\\n@@ -29,6 +29,9 @@\\n TPE = timezone(timedelta(hours=8), \"UTC+8\")\\n OUTPUT_NAME = \"search-prompts.json\"\\n OUTPUT_VERSION = 2\\n+ALIAS_HISTORY_NAME = \"search-prompt-aliases.json\"\\n+ALIAS_HISTORY_VERSION = 1\\n+MAX_ALIAS_HISTORY_ROWS = 4096\\n PROMPT_COUNT = 6\\n MAX_CANDIDATES = 12\\n MAX_ZH_CHARS = 26\\n@@ -255,6 +258,94 @@ def _providers_for_attempts(providers) -> list:\\n     return selected\\n \\n \\n+def _daily_prompt_rows(payload) -> tuple[tuple[str, str, str], ...]:\\n+    \"\"\"Return normalized article/prompt mappings from one daily payload.\"\"\"\\n+    prompts = payload.get(\"prompts\") if isinstance(payload, dict) else None\\n+    source_ids = payload.get(\"sourceArticleIds\") if isinstance(payload, dict) else None\\n+    zh_prompts = prompts.get(\"zh\") if isinstance(prompts, dict) else None\\n+    en_prompts = prompts.get(\"en\") if isinstance(prompts, dict) else None\\n+    if not all(isinstance(values, list)\\n+               for values in (source_ids, zh_prompts, en_prompts)):\\n+        return ()\\n+    if not 2 <= len(source_ids) <= 8 \\\\n+            or not len(source_ids) == len(zh_prompts) == len(en_prompts):\\n+        return ()\\n+\\n+    rows = []\\n+    for article_id, zh_value, en_value in zip(\\n+            source_ids, zh_prompts, en_prompts):\\n+        article_id, zh, en = map(_text, (article_id, zh_value, en_value))\\n+        if not article_id or len(article_id) > 256 or any(\\n+                not value or len(value) > 96 or re.search(r\"[\\x00-\\x1f<>]\", value)\\n+                for value in (zh, en)):\\n+            return ()\\n+        rows.append((article_id, zh, en))\\n+    if len({row[0] for row in rows}) != len(rows) \\\\n+            or len({row[1] for row in rows}) != len(rows) \\\\n+            or len({row[2] for row in rows}) != len(rows):\\n+        return ()\\n+    return tuple(rows)\\n+\\n+\\n+def _update_alias_history(data_dir: Path, payload: dict, now: datetime) -> bool:\\n+    \"\"\"Persist every valid displayed suggestion as an article search alias.\"\"\"\\n+    current_rows = _daily_prompt_rows(payload)\\n+    if not current_rows:\\n+        return False\\n+\\n+    history_path = data_dir / ALIAS_HISTORY_NAME\\n+    existing = load_json(history_path, {})\\n+    raw_items = existing.get(\"items\") if isinstance(existing, dict) else None\\n+    raw_items = raw_items if isinstance(raw_items, list) else []\\n+    existing_version = (existing.get(\"version\")\\n+                        if isinstance(existing, dict) else None)\\n+    normalized = {}\\n+    for item in raw_items[:MAX_ALIAS_HISTORY_ROWS]:\\n+        if not isinstance(item, dict):\\n+            continue\\n+        article_id, zh, en = map(\\n+            _text, (item.get(\"articleId\"), item.get(\"zh\"), item.get(\"en\")))\\n+        date_tpe = _text(item.get(\"dateTpe\"))\\n+        if not article_id or len(article_id) > 256 or any(\\n+                not value or len(value) > 96 or re.search(r\"[\\x00-\\x1f<>]\", value)\\n+                for value in (zh, en)):\\n+            continue\\n+        if not re.fullmatch(r\"\\d{4}-\\d{2}-\\d{2}\", date_tpe):\\n+            continue\\n+        normalized[(article_id, zh, en)] = {\\n+            \"dateTpe\": date_tpe,\\n+            \"articleId\": article_id,\\n+            \"zh\": zh,\\n+            \"en\": en,\\n+        }\\n+\\n+    date_tpe = _text(payload.get(\"targetDateTpe\"))\\n+    if not re.fullmatch(r\"\\d{4}-\\d{2}-\\d{2}\", date_tpe):\\n+        return False\\n+    for article_id, zh, en in current_rows:\\n+        normalized[(article_id, zh, en)] = {\\n+            \"dateTpe\": date_tpe,\\n+            \"articleId\": article_id,\\n+            \"zh\": zh,\\n+            \"en\": en,\\n+        }\\n+\\n+    items = sorted(\\n+        normalized.values(),\\n+        key=lambda row: (row[\"dateTpe\"], row[\"articleId\"], row[\"zh\"], row[\"en\"]),\\n+    )[-MAX_ALIAS_HISTORY_ROWS:]\\n+    existing_items = raw_items if isinstance(existing, dict) else []\\n+    if existing_version == ALIAS_HISTORY_VERSION \\\\n+            and existing_items == items:\\n+        return False\\n+    save_json(history_path, {\\n+        \"version\": ALIAS_HISTORY_VERSION,\\n+        \"updatedUtc\": iso_minute(now),\\n+        \"items\": items,\\n+    })\\n+    return True\\n+\\n+\\n def update_daily_prompts(*, data_dir: Path = DATA_DIR, now: datetime | None = None,\\n                          force: bool = False, providers=None,\\n                          record_usage: bool = True) -> bool:\\n@@ -266,6 +357,7 @@ def update_daily_prompts(*, data_dir: Path = DATA_DIR, now: datetime | None = No\\n             and existing.get(\"targetDateTpe\") == target_date \\\\n             and isinstance(existing.get(\"version\"), int) \\\\n             and existing[\"version\"] >= OUTPUT_VERSION:\\n+        _update_alias_history(data_dir, existing, now)\\n         print(f\"search-prompts: {target_date} already generated\")\\n         return False\\n \\n@@ -319,6 +411,7 @@ def update_daily_prompts(*, data_dir: Path = DATA_DIR, now: datetime | None = No\\n         \"prompts\": prompts,\\n     }\\n     save_json(output_path, payload)\\n+    _update_alias_history(data_dir, payload, now)\\n     print(f\"search-prompts: wrote {PROMPT_COUNT} prompts for {target_date} \"\\n           f\"({generation_mode}, {window})\")\\n     return True\\n@@ -142,6 +142,22 @@ def main() -> None:\\n         indexed = items_by_id[article_id][\"search\"]\\n         assert normalize_search_text(zh_prompt) in indexed\\n         assert normalize_search_text(en_prompt) in indexed\\n+    alias_rows = build.search_prompt_alias_rows()\\n+    assert (\\n+        \"a-20260913-0748-virgin-australia-passengers-restrained-a\",\\n+        \"維珍澳洲航班乘客事件\",\\n+        \"Virgin Australia passenger incident\",\\n+    ) in alias_rows\\n+    historical = items_by_id[\\n+        \"a-20260913-0748-virgin-australia-passengers-restrained-a\"]\\n+    assert \"維珍澳洲航班乘客事件\" in historical[\"search\"]\\n+    assert \"virgin australia passenger incident\" in historical[\"search\"]\\n+    for article_id, zh_prompt, en_prompt in alias_rows:\\n+        if article_id not in items_by_id:\\n+            continue\\n+        indexed = items_by_id[article_id][\"search\"]\\n+        assert normalize_search_text(zh_prompt) in indexed\\n+        assert normalize_search_text(en_prompt) in indexed\\n     assert suggestion_has_result(\\n         \"亞馬遜空運 貨機 邁阿密 衝出跑道\", payload[\"items\"])\\n     assert zh.count('id=\"news-search-form\"') == 1\\n@@ -211,13 +227,43 @@ def main() -> None:\\n         with tempfile.TemporaryDirectory() as tmp:\\n             build.DATA_DIR = Path(tmp)\\n             build.daily_search_prompt_rows.cache_clear()\\n+            build.search_prompt_alias_rows.cache_clear()\\n             build.header_search_placeholders.cache_clear()\\n             assert build.daily_search_prompt_rows() == ()\\n+            (build.DATA_DIR / \"search-prompt-aliases.json\").write_text(\\n+                json.dumps({\\n+                    \"version\": 1,\\n+                    \"items\": [\\n+                        {\\n+                            \"dateTpe\": \"2026-08-10\",\\n+                            \"articleId\": \"a-search-alias-test\",\\n+                            \"zh\": \"保留這筆推薦詞\",\\n+                            \"en\": \"Keep this suggestion\",\\n+                        },\\n+                        {\\n+                            \"dateTpe\": \"2026-08-10\",\\n+                            \"articleId\": \"a-missing-article\",\\n+                            \"zh\": \"缺少來源文章\",\\n+                            \"en\": \"Missing source article\",\\n+                        },\\n+                        {\"articleId\": \"\", \"zh\": \"bad\", \"en\": \"bad\"},\\n+                    ],\\n+                }, ensure_ascii=False),\\n+                encoding=\"utf-8\",\\n+            )\\n+            build.search_prompt_alias_rows.cache_clear()\\n+            isolated = build.search_index_payload(\\n+                [sample_article(\"測試航空新增航班\")],\\n+                build.now_utc(),\\n+            )\\n+            assert \"保留這筆推薦詞\" in isolated[\"items\"][0][\"search\"]\\n+            assert \"缺少來源文章\" not in isolated[\"items\"][0][\"search\"]\\n             assert build.header_search_placeholders(\"zh\") == tuple(\\n                 build.L[\"zh\"][\"headerSearchPlaceholders\"])\\n     finally:\\n         build.DATA_DIR = original_data_dir\\n         build.daily_search_prompt_rows.cache_clear()\\n+        build.search_prompt_alias_rows.cache_clear()\\n         build.header_search_placeholders.cache_clear()\\n \\n     print(\"test_search: OK\")\\n@@ -4,7 +4,7 @@\\n import json\\n import sys\\n import tempfile\\n-from datetime import datetime, timezone\\n+from datetime import datetime, timedelta, timezone\\n from pathlib import Path\\n \\n ROOT = Path(__file__).resolve().parent.parent\\n@@ -95,6 +95,8 @@ def main() -> None:\\n         assert [row[\"id\"] for row in branded_candidates] == [branded[\"id\"]]\\n \\n         provider = FakeProvider()\\n+        (data_dir / search_prompts.ALIAS_HISTORY_NAME).write_text(\\n+            \"[]\", encoding=\"utf-8\")\\n         changed = search_prompts.update_daily_prompts(\\n             data_dir=data_dir, now=now, providers=[provider],\\n             record_usage=False)\\n@@ -108,11 +110,46 @@ def main() -> None:\\n         assert len(payload[\"prompts\"][\"zh\"]) == 6\\n         assert len(payload[\"sourceArticleIds\"]) == 6\\n \\n+        history_path = data_dir / search_prompts.ALIAS_HISTORY_NAME\\n+        history = json.loads(history_path.read_text(encoding=\"utf-8\"))\\n+        assert history[\"version\"] == search_prompts.ALIAS_HISTORY_VERSION\\n+        assert len(history[\"items\"]) == 6\\n+        first_day_aliases = {\\n+            (row[\"articleId\"], row[\"zh\"], row[\"en\"])\\n+            for row in history[\"items\"]\\n+        }\\n+\\n+        history_path.unlink()\\n         second_provider = FakeProvider()\\n         assert search_prompts.update_daily_prompts(\\n             data_dir=data_dir, now=now, providers=[second_provider],\\n             record_usage=False) is False\\n         assert second_provider.calls == 0\\n+        assert history_path.is_file()  # Same-day early return repairs history.\\n+\\n+        tomorrow = now + timedelta(days=1)\\n+        next_rows = []\\n+        for i in range(8):\\n+            row = article(i)\\n+            row[\"id\"] = f\"a-20260811-000{i}-next-{i}\"\\n+            row[\"publishedUtc\"] = f\"2026-08-11T00:0{i}:00Z\"\\n+            row[\"zh\"][\"title\"] = f\"新航空{i} B78{i} 抵達松山\"\\n+            row[\"en\"][\"title\"] = f\"New Airline {i} B78{i} arrives at Songshan\"\\n+            next_rows.append(row)\\n+        (articles_dir / \"next.json\").write_text(\\n+            json.dumps({\"articles\": next_rows}, ensure_ascii=False),\\n+            encoding=\"utf-8\",\\n+        )\\n+        assert search_prompts.update_daily_prompts(\\n+            data_dir=data_dir, now=tomorrow, providers=[FakeProvider()],\\n+            record_usage=False) is True\\n+        rotated = json.loads(history_path.read_text(encoding=\"utf-8\"))\\n+        rotated_aliases = {\\n+            (row[\"articleId\"], row[\"zh\"], row[\"en\"])\\n+            for row in rotated[\"items\"]\\n+        }\\n+        assert first_day_aliases <= rotated_aliases\\n+        assert len(rotated_aliases) == 12\\n \\n         fallback_dir = data_dir / \"fallback\"\\n         fallback_articles = fallback_dir / \"articles\""
}
