[{"data":1,"prerenderedAt":2179},["ShallowReactive",2],{"posts-zh-Hant-TW":3,"cfn":1234},[4,1115],{"id":5,"title":6,"body":7,"date":1107,"desc":1108,"description":13,"edit":1107,"extension":1109,"meta":1110,"navigation":418,"path":1111,"seo":1112,"stem":1113,"__hash__":1114},"blog\u002Fblog\u002Fzh-Hant\u002Fcf-network.md","如何在網站顯示當前使用的 Cloudflare 網絡",{"type":8,"value":9,"toc":1103},"minimark",[10,14,21,27,31,39,145,156,159,162,169,174,177,188,373,376,379,389,392,1099],[11,12,13],"p",{},"今天凌晨給我的個人網站加了一個小功能，就是在網站顯示當前使用的 Cloudflare 網絡。",[11,15,16],{},[17,18],"img",{"alt":19,"src":20},"","https:\u002F\u002Fr2.kuriyona.com\u002Fstatic\u002F2026\u002F05\u002F24\u002Fcf-network-preview.png",[22,23,24],"blockquote",{},[11,25,26],{},"翻到本網站的最底下，您應該就能看見實際顯示的樣式。",[28,29,30],"h3",{"id":30},"實現方式",[11,32,33,34,38],{},"由 Cloudflare 代理的網站，通過訪問 ",[35,36,37],"code",{},"{domain}\u002Fcdn-cgi\u002Ftrace"," 可以獲取當前使用的 Cloudflare 網絡信息。樣例如下：",[40,41,45],"pre",{"className":42,"code":43,"language":44,"meta":19,"style":19},"language-plaintext shiki shiki-themes github-dark","fl=582f239\nh=kuriyona.com\nip=64.90.0.218\nts=1779555940.000\nvisit_scheme=https\nuag=Mozilla\u002F5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\u002F537.36 (KHTML, like Gecko) Chrome\u002F149.0.0.0 Safari\u002F537.36 Edg\u002F149.0.0.0\ncolo=HKG\nsliver=none\nhttp=http\u002F3\nloc=HK\ntls=TLSv1.3\nsni=plaintext\nwarp=off\ngateway=off\nrbi=off\nkex=X25519MLKEM768\n","plaintext",[35,46,47,55,61,67,73,79,85,91,97,103,109,115,121,127,133,139],{"__ignoreMap":19},[48,49,52],"span",{"class":50,"line":51},"line",1,[48,53,54],{},"fl=582f239\n",[48,56,58],{"class":50,"line":57},2,[48,59,60],{},"h=kuriyona.com\n",[48,62,64],{"class":50,"line":63},3,[48,65,66],{},"ip=64.90.0.218\n",[48,68,70],{"class":50,"line":69},4,[48,71,72],{},"ts=1779555940.000\n",[48,74,76],{"class":50,"line":75},5,[48,77,78],{},"visit_scheme=https\n",[48,80,82],{"class":50,"line":81},6,[48,83,84],{},"uag=Mozilla\u002F5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\u002F537.36 (KHTML, like Gecko) Chrome\u002F149.0.0.0 Safari\u002F537.36 Edg\u002F149.0.0.0\n",[48,86,88],{"class":50,"line":87},7,[48,89,90],{},"colo=HKG\n",[48,92,94],{"class":50,"line":93},8,[48,95,96],{},"sliver=none\n",[48,98,100],{"class":50,"line":99},9,[48,101,102],{},"http=http\u002F3\n",[48,104,106],{"class":50,"line":105},10,[48,107,108],{},"loc=HK\n",[48,110,112],{"class":50,"line":111},11,[48,113,114],{},"tls=TLSv1.3\n",[48,116,118],{"class":50,"line":117},12,[48,119,120],{},"sni=plaintext\n",[48,122,124],{"class":50,"line":123},13,[48,125,126],{},"warp=off\n",[48,128,130],{"class":50,"line":129},14,[48,131,132],{},"gateway=off\n",[48,134,136],{"class":50,"line":135},15,[48,137,138],{},"rbi=off\n",[48,140,142],{"class":50,"line":141},16,[48,143,144],{},"kex=X25519MLKEM768\n",[11,146,147,148,151,152,155],{},"通過解析其中的 ",[35,149,150],{},"colo"," 參數，我們可以獲取當前使用的 Cloudflare 網絡 ID，比如這裏是 ",[35,153,154],{},"HKG","。",[11,157,158],{},"那麼網絡 ID 有了，我們就可以根據網絡 ID 來顯示當前使用的 Cloudflare 網絡了。",[11,160,161],{},"Cloudflare Status 提供了一個文件，列出了當前所有的 Cloudflare 網絡狀態信息。",[22,163,164],{},[11,165,166],{},[35,167,168],{},"https:\u002F\u002Fwww.cloudflarestatus.com\u002Fapi\u002Fv2\u002Fsummary.json",[11,170,171],{},[17,172],{"alt":19,"src":173},"https:\u002F\u002Fr2.kuriyona.com\u002Fstatic\u002F2026\u002F05\u002F24\u002Fcf-network-status-api.png",[11,175,176],{},"文件的內容很雜，我們需要通過一個簡單的腳本來獲得我們需要的格式化信息。",[11,178,179,180,183,184,187],{},"首先通過一個簡單的正則表達式(",[35,181,182],{},"^[A-Za-z\\s,]+-\\s*\\(([A-Z]{3})\\)$",")來篩選複合網絡節點的 ",[35,185,186],{},"name"," 字段，再對數據結構進行簡化處理。（這裏使用 ky 庫來獲取數據）",[40,189,193],{"className":190,"code":191,"language":192,"meta":19,"style":19},"language-ts shiki shiki-themes github-dark","const res = await ky.get('https:\u002F\u002Fwww.cloudflarestatus.com\u002Fapi\u002Fv2\u002Fsummary.json').json();\nconst result = res.components\n  .filter((c) => REGEX.test(c.name))\n  .map((n) => ({\n    name: n.name,\n    code: n.name.match(\u002F^[A-Za-z\\s,]+-\\s*\\(([A-Z]{3})\\)$\u002F)?.[1],\n  }));\n","ts",[35,194,195,235,247,280,299,304,368],{"__ignoreMap":19},[48,196,197,201,205,208,211,215,219,222,226,229,232],{"class":50,"line":51},[48,198,200],{"class":199},"snl16","const",[48,202,204],{"class":203},"sDLfK"," res",[48,206,207],{"class":199}," =",[48,209,210],{"class":199}," await",[48,212,214],{"class":213},"s95oV"," ky.",[48,216,218],{"class":217},"svObZ","get",[48,220,221],{"class":213},"(",[48,223,225],{"class":224},"sU2Wk","'https:\u002F\u002Fwww.cloudflarestatus.com\u002Fapi\u002Fv2\u002Fsummary.json'",[48,227,228],{"class":213},").",[48,230,231],{"class":217},"json",[48,233,234],{"class":213},"();\n",[48,236,237,239,242,244],{"class":50,"line":57},[48,238,200],{"class":199},[48,240,241],{"class":203}," result",[48,243,207],{"class":199},[48,245,246],{"class":213}," res.components\n",[48,248,249,252,255,258,262,265,268,271,274,277],{"class":50,"line":63},[48,250,251],{"class":213},"  .",[48,253,254],{"class":217},"filter",[48,256,257],{"class":213},"((",[48,259,261],{"class":260},"s9osk","c",[48,263,264],{"class":213},") ",[48,266,267],{"class":199},"=>",[48,269,270],{"class":203}," REGEX",[48,272,273],{"class":213},".",[48,275,276],{"class":217},"test",[48,278,279],{"class":213},"(c.name))\n",[48,281,282,284,287,289,292,294,296],{"class":50,"line":69},[48,283,251],{"class":213},[48,285,286],{"class":217},"map",[48,288,257],{"class":213},[48,290,291],{"class":260},"n",[48,293,264],{"class":213},[48,295,267],{"class":199},[48,297,298],{"class":213}," ({\n",[48,300,301],{"class":50,"line":75},[48,302,303],{"class":213},"    name: n.name,\n",[48,305,306,309,312,314,317,320,323,326,330,333,336,340,342,345,348,351,354,357,359,362,365],{"class":50,"line":81},[48,307,308],{"class":213},"    code: n.name.",[48,310,311],{"class":217},"match",[48,313,221],{"class":213},[48,315,316],{"class":224},"\u002F",[48,318,319],{"class":199},"^",[48,321,322],{"class":203},"[A-Za-z\\s,]",[48,324,325],{"class":199},"+",[48,327,329],{"class":328},"sns5M","-",[48,331,332],{"class":203},"\\s",[48,334,335],{"class":199},"*",[48,337,339],{"class":338},"sRjNt","\\(",[48,341,221],{"class":328},[48,343,344],{"class":203},"[A-Z]",[48,346,347],{"class":199},"{3}",[48,349,350],{"class":328},")",[48,352,353],{"class":338},"\\)",[48,355,356],{"class":199},"$",[48,358,316],{"class":224},[48,360,361],{"class":213},")?.[",[48,363,364],{"class":203},"1",[48,366,367],{"class":213},"],\n",[48,369,370],{"class":50,"line":87},[48,371,372],{"class":213},"  }));\n",[11,374,375],{},"結合前文中獲得的網絡 ID，我們就可以獲得實際的網絡節點名稱了。",[28,377,378],{"id":378},"代碼實現",[11,380,381,382],{},"本站實際使用的代碼可以查看 ",[383,384,388],"a",{"href":385,"rel":386},"https:\u002F\u002Fgithub.com\u002FKuriyona\u002FKuriyona.com\u002Fblob\u002Fmain\u002Fapp\u002Fcomposables\u002FuseCloudflareStatus.ts",[387],"nofollow","useCloudflareStatus.ts",[11,390,391],{},"以下是通用的 TypeScript 完整代碼實現：",[40,393,395],{"className":190,"code":394,"language":192,"meta":19,"style":19},"import ky from 'ky';\n\nconst REGEX = \u002F^[A-Za-z\\s,]+-\\s*\\(([A-Z]{3})\\)$\u002F;\n\ninterface NodeInfo {\n  name: string;\n  code: string | undefined;\n}\n\ninterface TraceData {\n  colo?: string;\n  loc?: string;\n  [key: string]: string | undefined;\n}\n\ninterface CloudflareStatusResult {\n  nodesData: NodeInfo[] | undefined;\n  traceData: TraceData | undefined;\n  currentNodeName: string | undefined;\n  location: string | undefined;\n}\n\nexport async function getCloudflareStatus(): Promise\u003CCloudflareStatusResult> {\n  \u002F\u002F 獲取節點數據\n  const nodesResponse = await ky.get('https:\u002F\u002Fwww.cloudflarestatus.com\u002Fapi\u002Fv2\u002Fsummary.json').json();\n  const nodesData = nodesResponse.components\n    .filter((c) => REGEX.test(c.name))\n    .map((n) => ({\n      name: n.name,\n      code: n.name.match(REGEX)?.[1],\n    }));\n\n  \u002F\u002F 獲取 trace 數據\n  const traceText = await ky.get('https:\u002F\u002Fkuriyona.com\u002Fcdn-cgi\u002Ftrace').text();\n  const traceData = Object.fromEntries(\n    traceText\n      .split('\\n')\n      .filter((line) => line.includes('='))\n      .map((line) => line.split('=')),\n  ) as TraceData;\n\n  console.log(traceData);\n\n  \u002F\u002F 計算當前節點名稱\n  const currentNodeName = nodesData.find((n) => n.code === traceData?.colo)?.name;\n\n  const location = traceData?.loc;\n\n  return {\n    nodesData,\n    traceData,\n    currentNodeName,\n    location,\n  };\n}\n",[35,396,397,414,420,461,465,476,489,506,511,515,524,536,547,572,576,580,589,609,625,641,657,662,667,699,706,733,746,770,787,793,812,818,823,829,857,876,882,904,933,959,972,977,989,994,1000,1033,1038,1051,1056,1064,1070,1076,1082,1088,1094],{"__ignoreMap":19},[48,398,399,402,405,408,411],{"class":50,"line":51},[48,400,401],{"class":199},"import",[48,403,404],{"class":213}," ky ",[48,406,407],{"class":199},"from",[48,409,410],{"class":224}," 'ky'",[48,412,413],{"class":213},";\n",[48,415,416],{"class":50,"line":57},[48,417,419],{"emptyLinePlaceholder":418},true,"\n",[48,421,422,424,426,428,431,433,435,437,439,441,443,445,447,449,451,453,455,457,459],{"class":50,"line":63},[48,423,200],{"class":199},[48,425,270],{"class":203},[48,427,207],{"class":199},[48,429,430],{"class":224}," \u002F",[48,432,319],{"class":199},[48,434,322],{"class":203},[48,436,325],{"class":199},[48,438,329],{"class":328},[48,440,332],{"class":203},[48,442,335],{"class":199},[48,444,339],{"class":338},[48,446,221],{"class":328},[48,448,344],{"class":203},[48,450,347],{"class":199},[48,452,350],{"class":328},[48,454,353],{"class":338},[48,456,356],{"class":199},[48,458,316],{"class":224},[48,460,413],{"class":213},[48,462,463],{"class":50,"line":69},[48,464,419],{"emptyLinePlaceholder":418},[48,466,467,470,473],{"class":50,"line":75},[48,468,469],{"class":199},"interface",[48,471,472],{"class":217}," NodeInfo",[48,474,475],{"class":213}," {\n",[48,477,478,481,484,487],{"class":50,"line":81},[48,479,480],{"class":260},"  name",[48,482,483],{"class":199},":",[48,485,486],{"class":203}," string",[48,488,413],{"class":213},[48,490,491,494,496,498,501,504],{"class":50,"line":87},[48,492,493],{"class":260},"  code",[48,495,483],{"class":199},[48,497,486],{"class":203},[48,499,500],{"class":199}," |",[48,502,503],{"class":203}," undefined",[48,505,413],{"class":213},[48,507,508],{"class":50,"line":93},[48,509,510],{"class":213},"}\n",[48,512,513],{"class":50,"line":99},[48,514,419],{"emptyLinePlaceholder":418},[48,516,517,519,522],{"class":50,"line":105},[48,518,469],{"class":199},[48,520,521],{"class":217}," TraceData",[48,523,475],{"class":213},[48,525,526,529,532,534],{"class":50,"line":111},[48,527,528],{"class":260},"  colo",[48,530,531],{"class":199},"?:",[48,533,486],{"class":203},[48,535,413],{"class":213},[48,537,538,541,543,545],{"class":50,"line":117},[48,539,540],{"class":260},"  loc",[48,542,531],{"class":199},[48,544,486],{"class":203},[48,546,413],{"class":213},[48,548,549,552,555,557,559,562,564,566,568,570],{"class":50,"line":123},[48,550,551],{"class":213},"  [",[48,553,554],{"class":260},"key",[48,556,483],{"class":199},[48,558,486],{"class":203},[48,560,561],{"class":213},"]",[48,563,483],{"class":199},[48,565,486],{"class":203},[48,567,500],{"class":199},[48,569,503],{"class":203},[48,571,413],{"class":213},[48,573,574],{"class":50,"line":129},[48,575,510],{"class":213},[48,577,578],{"class":50,"line":135},[48,579,419],{"emptyLinePlaceholder":418},[48,581,582,584,587],{"class":50,"line":141},[48,583,469],{"class":199},[48,585,586],{"class":217}," CloudflareStatusResult",[48,588,475],{"class":213},[48,590,592,595,597,599,602,605,607],{"class":50,"line":591},17,[48,593,594],{"class":260},"  nodesData",[48,596,483],{"class":199},[48,598,472],{"class":217},[48,600,601],{"class":213},"[] ",[48,603,604],{"class":199},"|",[48,606,503],{"class":203},[48,608,413],{"class":213},[48,610,612,615,617,619,621,623],{"class":50,"line":611},18,[48,613,614],{"class":260},"  traceData",[48,616,483],{"class":199},[48,618,521],{"class":217},[48,620,500],{"class":199},[48,622,503],{"class":203},[48,624,413],{"class":213},[48,626,628,631,633,635,637,639],{"class":50,"line":627},19,[48,629,630],{"class":260},"  currentNodeName",[48,632,483],{"class":199},[48,634,486],{"class":203},[48,636,500],{"class":199},[48,638,503],{"class":203},[48,640,413],{"class":213},[48,642,644,647,649,651,653,655],{"class":50,"line":643},20,[48,645,646],{"class":260},"  location",[48,648,483],{"class":199},[48,650,486],{"class":203},[48,652,500],{"class":199},[48,654,503],{"class":203},[48,656,413],{"class":213},[48,658,660],{"class":50,"line":659},21,[48,661,510],{"class":213},[48,663,665],{"class":50,"line":664},22,[48,666,419],{"emptyLinePlaceholder":418},[48,668,670,673,676,679,682,685,687,690,693,696],{"class":50,"line":669},23,[48,671,672],{"class":199},"export",[48,674,675],{"class":199}," async",[48,677,678],{"class":199}," function",[48,680,681],{"class":217}," getCloudflareStatus",[48,683,684],{"class":213},"()",[48,686,483],{"class":199},[48,688,689],{"class":217}," Promise",[48,691,692],{"class":213},"\u003C",[48,694,695],{"class":217},"CloudflareStatusResult",[48,697,698],{"class":213},"> {\n",[48,700,702],{"class":50,"line":701},24,[48,703,705],{"class":704},"sAwPA","  \u002F\u002F 獲取節點數據\n",[48,707,709,712,715,717,719,721,723,725,727,729,731],{"class":50,"line":708},25,[48,710,711],{"class":199},"  const",[48,713,714],{"class":203}," nodesResponse",[48,716,207],{"class":199},[48,718,210],{"class":199},[48,720,214],{"class":213},[48,722,218],{"class":217},[48,724,221],{"class":213},[48,726,225],{"class":224},[48,728,228],{"class":213},[48,730,231],{"class":217},[48,732,234],{"class":213},[48,734,736,738,741,743],{"class":50,"line":735},26,[48,737,711],{"class":199},[48,739,740],{"class":203}," nodesData",[48,742,207],{"class":199},[48,744,745],{"class":213}," nodesResponse.components\n",[48,747,749,752,754,756,758,760,762,764,766,768],{"class":50,"line":748},27,[48,750,751],{"class":213},"    .",[48,753,254],{"class":217},[48,755,257],{"class":213},[48,757,261],{"class":260},[48,759,264],{"class":213},[48,761,267],{"class":199},[48,763,270],{"class":203},[48,765,273],{"class":213},[48,767,276],{"class":217},[48,769,279],{"class":213},[48,771,773,775,777,779,781,783,785],{"class":50,"line":772},28,[48,774,751],{"class":213},[48,776,286],{"class":217},[48,778,257],{"class":213},[48,780,291],{"class":260},[48,782,264],{"class":213},[48,784,267],{"class":199},[48,786,298],{"class":213},[48,788,790],{"class":50,"line":789},29,[48,791,792],{"class":213},"      name: n.name,\n",[48,794,796,799,801,803,806,808,810],{"class":50,"line":795},30,[48,797,798],{"class":213},"      code: n.name.",[48,800,311],{"class":217},[48,802,221],{"class":213},[48,804,805],{"class":203},"REGEX",[48,807,361],{"class":213},[48,809,364],{"class":203},[48,811,367],{"class":213},[48,813,815],{"class":50,"line":814},31,[48,816,817],{"class":213},"    }));\n",[48,819,821],{"class":50,"line":820},32,[48,822,419],{"emptyLinePlaceholder":418},[48,824,826],{"class":50,"line":825},33,[48,827,828],{"class":704},"  \u002F\u002F 獲取 trace 數據\n",[48,830,832,834,837,839,841,843,845,847,850,852,855],{"class":50,"line":831},34,[48,833,711],{"class":199},[48,835,836],{"class":203}," traceText",[48,838,207],{"class":199},[48,840,210],{"class":199},[48,842,214],{"class":213},[48,844,218],{"class":217},[48,846,221],{"class":213},[48,848,849],{"class":224},"'https:\u002F\u002Fkuriyona.com\u002Fcdn-cgi\u002Ftrace'",[48,851,228],{"class":213},[48,853,854],{"class":217},"text",[48,856,234],{"class":213},[48,858,860,862,865,867,870,873],{"class":50,"line":859},35,[48,861,711],{"class":199},[48,863,864],{"class":203}," traceData",[48,866,207],{"class":199},[48,868,869],{"class":213}," Object.",[48,871,872],{"class":217},"fromEntries",[48,874,875],{"class":213},"(\n",[48,877,879],{"class":50,"line":878},36,[48,880,881],{"class":213},"    traceText\n",[48,883,885,888,891,893,896,899,901],{"class":50,"line":884},37,[48,886,887],{"class":213},"      .",[48,889,890],{"class":217},"split",[48,892,221],{"class":213},[48,894,895],{"class":224},"'",[48,897,898],{"class":203},"\\n",[48,900,895],{"class":224},[48,902,903],{"class":213},")\n",[48,905,907,909,911,913,915,917,919,922,925,927,930],{"class":50,"line":906},38,[48,908,887],{"class":213},[48,910,254],{"class":217},[48,912,257],{"class":213},[48,914,50],{"class":260},[48,916,264],{"class":213},[48,918,267],{"class":199},[48,920,921],{"class":213}," line.",[48,923,924],{"class":217},"includes",[48,926,221],{"class":213},[48,928,929],{"class":224},"'='",[48,931,932],{"class":213},"))\n",[48,934,936,938,940,942,944,946,948,950,952,954,956],{"class":50,"line":935},39,[48,937,887],{"class":213},[48,939,286],{"class":217},[48,941,257],{"class":213},[48,943,50],{"class":260},[48,945,264],{"class":213},[48,947,267],{"class":199},[48,949,921],{"class":213},[48,951,890],{"class":217},[48,953,221],{"class":213},[48,955,929],{"class":224},[48,957,958],{"class":213},")),\n",[48,960,962,965,968,970],{"class":50,"line":961},40,[48,963,964],{"class":213},"  ) ",[48,966,967],{"class":199},"as",[48,969,521],{"class":217},[48,971,413],{"class":213},[48,973,975],{"class":50,"line":974},41,[48,976,419],{"emptyLinePlaceholder":418},[48,978,980,983,986],{"class":50,"line":979},42,[48,981,982],{"class":213},"  console.",[48,984,985],{"class":217},"log",[48,987,988],{"class":213},"(traceData);\n",[48,990,992],{"class":50,"line":991},43,[48,993,419],{"emptyLinePlaceholder":418},[48,995,997],{"class":50,"line":996},44,[48,998,999],{"class":704},"  \u002F\u002F 計算當前節點名稱\n",[48,1001,1003,1005,1008,1010,1013,1016,1018,1020,1022,1024,1027,1030],{"class":50,"line":1002},45,[48,1004,711],{"class":199},[48,1006,1007],{"class":203}," currentNodeName",[48,1009,207],{"class":199},[48,1011,1012],{"class":213}," nodesData.",[48,1014,1015],{"class":217},"find",[48,1017,257],{"class":213},[48,1019,291],{"class":260},[48,1021,264],{"class":213},[48,1023,267],{"class":199},[48,1025,1026],{"class":213}," n.code ",[48,1028,1029],{"class":199},"===",[48,1031,1032],{"class":213}," traceData?.colo)?.name;\n",[48,1034,1036],{"class":50,"line":1035},46,[48,1037,419],{"emptyLinePlaceholder":418},[48,1039,1041,1043,1046,1048],{"class":50,"line":1040},47,[48,1042,711],{"class":199},[48,1044,1045],{"class":203}," location",[48,1047,207],{"class":199},[48,1049,1050],{"class":213}," traceData?.loc;\n",[48,1052,1054],{"class":50,"line":1053},48,[48,1055,419],{"emptyLinePlaceholder":418},[48,1057,1059,1062],{"class":50,"line":1058},49,[48,1060,1061],{"class":199},"  return",[48,1063,475],{"class":213},[48,1065,1067],{"class":50,"line":1066},50,[48,1068,1069],{"class":213},"    nodesData,\n",[48,1071,1073],{"class":50,"line":1072},51,[48,1074,1075],{"class":213},"    traceData,\n",[48,1077,1079],{"class":50,"line":1078},52,[48,1080,1081],{"class":213},"    currentNodeName,\n",[48,1083,1085],{"class":50,"line":1084},53,[48,1086,1087],{"class":213},"    location,\n",[48,1089,1091],{"class":50,"line":1090},54,[48,1092,1093],{"class":213},"  };\n",[48,1095,1097],{"class":50,"line":1096},55,[48,1098,510],{"class":213},[1100,1101,1102],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html pre.shiki code .sns5M, html code.shiki .sns5M{--shiki-default:#DBEDFF}html pre.shiki code .sRjNt, html code.shiki .sRjNt{--shiki-default:#85E89D;--shiki-default-font-weight:bold}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":19,"searchDepth":57,"depth":57,"links":1104},[1105,1106],{"id":30,"depth":63,"text":30},{"id":378,"depth":63,"text":378},"2026-05-24","通過解析 Cloudflare 的 \u002Fcdn-cgi\u002Ftrace 接口獲取當前網絡節點 ID，再結合 Cloudflare Status 的公共 API 匹配出節點名稱，從而在網站上動態顯示訪客正在使用的 Cloudflare 網絡名稱。","md",{},"\u002Fblog\u002Fzh-hant\u002Fcf-network",{"title":6,"description":13},"blog\u002Fzh-Hant\u002Fcf-network","LKSDGPkUecgE85j7S7lHjrSkjMpG4y4OR79nNpx1-DA",{"id":1116,"title":1117,"body":1118,"date":1227,"desc":1228,"description":19,"edit":1227,"extension":1109,"meta":1229,"navigation":418,"path":1230,"seo":1231,"stem":1232,"__hash__":1233},"blog\u002Fblog\u002Fzh-Hant\u002Fabout-name.md","關於未晞醬的名字",{"type":8,"value":1119,"toc":1221},[1120,1123,1126,1129,1133,1136,1142,1145,1159,1171,1183,1187,1190,1193,1198,1201,1212,1215,1218],[28,1121,1122],{"id":1122},"我的名字",[11,1124,1125],{},"我叫「Kuriyona」，這是我給自己取的網名。",[11,1127,1128],{},"我也叫「未晞」，這是我確定性別認同之後給自己取的真名。",[28,1130,1132],{"id":1131},"關於kuriyona","關於「Kuriyona」",[11,1134,1135],{},"它藉助日語的音韻與漢字的意蘊而生。",[11,1137,1138,1139,155],{},"「Kuriyona」讀作 ku-ri-yo-na ",[35,1140,1141],{},"クリヨナ",[11,1143,1144],{},"而「Kuriyona」對應的漢字可以寫做「栗夜奈」。",[11,1146,1147,1151,1152,1151,1155,1158],{},[1148,1149,1150],"strong",{},"「栗」"," ",[35,1153,1154],{},"kuri",[35,1156,1157],{},"クリ"," 是一個象徵我過去網名和一直以來的外號的詞，也和我現實中的姓氏同音。",[11,1160,1161,1151,1164,1151,1167,1170],{},[1148,1162,1163],{},"「夜」",[35,1165,1166],{},"yu",[35,1168,1169],{},"ヨ"," 是我想要爲此加入的意蘊。",[11,1172,1173,1151,1176,1151,1179,1182],{},[1148,1174,1175],{},"「奈」",[35,1177,1178],{},"na",[35,1180,1181],{},"ナ"," 則像一個輕柔的語氣詞，帶着一點點說不清的餘韻，由原來男性化的 ta 變成了女性化的 na。",[28,1184,1186],{"id":1185},"關於未晞","關於「未晞」",[11,1188,1189],{},"而「未晞」，則是我爲自己取的真名。",[11,1191,1192],{},"它出自《詩經·秦風》裏的那一句：",[22,1194,1195],{},[11,1196,1197],{},"「蒹葭萋萋，白露未晞」。",[11,1199,1200],{},"清晨的露水還沒有被太陽曬乾，\n蘆葦在風中輕輕搖曳，\n一切剛剛醒來，\n一切還未完成。",[11,1202,1203,1204,1207,1208,1211],{},"「未晞」意味着——\n",[1148,1205,1206],{},"破曉","之前最後的溼潤，\n也是",[1148,1209,1210],{},"新生","之初最安靜的光。",[11,1213,1214],{},"在確定自己的性別認同之後，\n我便選了這兩個字，\n作爲對自己真實存在的確認。",[28,1216,1217],{"id":1217},"小記",[11,1219,1220],{},"「Kuriyona」是我曾經藏身的小夜，\n「未晞」是我終於迎來的破曉。",{"title":19,"searchDepth":57,"depth":57,"links":1222},[1223,1224,1225,1226],{"id":1122,"depth":63,"text":1122},{"id":1131,"depth":63,"text":1132},{"id":1185,"depth":63,"text":1186},{"id":1217,"depth":63,"text":1217},"2026-05-18","未晞醬名字的由來",{},"\u002Fblog\u002Fzh-hant\u002Fabout-name",{"title":1117,"description":19},"blog\u002Fzh-Hant\u002Fabout-name","NrGWqQ2hd12UTIabQeB0njWsrUnbnq-RRpiPvdjBcxY",[1235,1238,1241,1244,1247,1250,1253,1256,1259,1262,1265,1268,1271,1274,1277,1280,1283,1286,1289,1292,1295,1298,1301,1304,1307,1310,1313,1316,1319,1322,1325,1328,1331,1334,1337,1340,1343,1346,1349,1352,1355,1358,1361,1364,1367,1370,1373,1376,1379,1382,1385,1388,1391,1394,1397,1400,1403,1406,1409,1412,1415,1418,1421,1424,1427,1430,1433,1436,1439,1442,1445,1448,1451,1454,1457,1460,1463,1466,1469,1472,1475,1478,1481,1484,1487,1490,1493,1496,1499,1502,1505,1508,1511,1514,1517,1520,1523,1526,1529,1532,1535,1538,1541,1544,1547,1550,1553,1556,1559,1562,1565,1568,1571,1574,1577,1580,1583,1586,1589,1592,1595,1598,1601,1604,1607,1610,1613,1616,1619,1622,1625,1628,1631,1634,1637,1640,1643,1646,1649,1651,1654,1657,1660,1663,1666,1669,1672,1675,1678,1681,1684,1687,1690,1693,1696,1699,1702,1705,1708,1711,1714,1717,1720,1723,1726,1729,1732,1735,1738,1741,1744,1747,1750,1753,1756,1759,1762,1765,1768,1771,1774,1777,1780,1783,1786,1789,1792,1795,1798,1801,1804,1807,1810,1813,1816,1819,1822,1825,1828,1831,1834,1837,1840,1843,1846,1849,1852,1855,1858,1861,1864,1867,1870,1873,1876,1879,1882,1885,1888,1891,1894,1897,1900,1903,1906,1909,1912,1915,1918,1921,1924,1927,1930,1933,1936,1939,1942,1945,1948,1951,1954,1957,1960,1963,1966,1969,1972,1975,1978,1981,1984,1987,1990,1993,1996,1999,2002,2005,2008,2011,2014,2017,2020,2023,2026,2029,2032,2035,2038,2041,2044,2047,2050,2053,2056,2059,2062,2065,2068,2071,2074,2077,2080,2083,2086,2089,2092,2095,2098,2101,2104,2107,2110,2113,2116,2119,2122,2125,2128,2131,2134,2137,2140,2143,2146,2149,2152,2155,2158,2161,2164,2167,2170,2173,2176],{"name":1236,"code":1237},"Amsterdam, Netherlands - (AMS)","AMS",{"name":1239,"code":1240},"Amman, Jordan - (AMM)","AMM",{"name":1242,"code":1243},"Adelaide, SA, Australia - (ADL)","ADL",{"name":1245,"code":1246},"Americana, Brazil - (QWJ)","QWJ",{"name":1248,"code":1249},"Accra, Ghana - (ACC)","ACC",{"name":1251,"code":1252},"Ahmedabad, India - (AMD)","AMD",{"name":1254,"code":1255},"Albuquerque, NM, United States - (ABQ)","ABQ",{"name":1257,"code":1258},"Auckland, New Zealand - (AKL)","AKL",{"name":1260,"code":1261},"Athens, Greece - (ATH)","ATH",{"name":1263,"code":1264},"Arica, Chile - (ARI)","ARI",{"name":1266,"code":1267},"Algiers, Algeria - (ALG)","ALG",{"name":1269,"code":1270},"Almaty, Kazakhstan - (ALA)","ALA",{"name":1272,"code":1273},"Astara, Azerbaijan - (LLK)","LLK",{"name":1275,"code":1276},"Anchorage, AK, United States - (ANC)","ANC",{"name":1278,"code":1279},"Ashburn, VA, United States - (IAD)","IAD",{"name":1281,"code":1282},"Brisbane, QLD, Australia - (BNE)","BNE",{"name":1284,"code":1285},"Barcelona, Spain - (BCN)","BCN",{"name":1287,"code":1288},"Baghdad, Iraq - (BGW)","BGW",{"name":1290,"code":1291},"Annaba, Algeria - (AAE)","AAE",{"name":1293,"code":1294},"Atlanta, GA, United States - (ATL)","ATL",{"name":1296,"code":1297},"Belgrade, Serbia - (BEG)","BEG",{"name":1299,"code":1300},"Baku, Azerbaijan - (GYD)","GYD",{"name":1302,"code":1303},"Bangalore, India - (BLR)","BLR",{"name":1305,"code":1306},"Antananarivo, Madagascar - (TNR)","TNR",{"name":1308,"code":1309},"Canberra, ACT, Australia - (CBR)","CBR",{"name":1311,"code":1312},"Berlin, Germany - (TXL)","TXL",{"name":1314,"code":1315},"Bangkok, Thailand - (BKK)","BKK",{"name":1317,"code":1318},"Cape Town, South Africa - (CPT)","CPT",{"name":1320,"code":1321},"Belo Horizonte, Brazil - (CNF)","CNF",{"name":1323,"code":1324},"Basra, Iraq - (BSR)","BSR",{"name":1326,"code":1327},"Christchurch, New Zealand - (CHC)","CHC",{"name":1329,"code":1330},"Austin, TX, United States - (AUS)","AUS",{"name":1332,"code":1333},"Beirut, Lebanon - (BEY)","BEY",{"name":1335,"code":1336},"Bandar Seri Begawan, Brunei - (BWN)","BWN",{"name":1338,"code":1339},"Blumenau, Brazil - (BNU)","BNU",{"name":1341,"code":1342},"Hagatna, Guam - (GUM)","GUM",{"name":1344,"code":1345},"Bangor, ME, United States - (BGR)","BGR",{"name":1347,"code":1348},"Bordeaux, France - (BOD)","BOD",{"name":1350,"code":1351},"Boston, MA, United States - (BOS)","BOS",{"name":1353,"code":1354},"Dakar, Senegal - (DKR)","DKR",{"name":1356,"code":1357},"Dammam, Saudi Arabia - (DMM)","DMM",{"name":1359,"code":1360},"Bratislava, Slovakia   - (BTS)","BTS",{"name":1362,"code":1363},"Melbourne, VIC, Australia - (MEL)","MEL",{"name":1365,"code":1366},"Doha, Qatar - (DOH)","DOH",{"name":1368,"code":1369},"Brussels, Belgium - (BRU)","BRU",{"name":1371,"code":1372},"Buffalo, NY, United States - (BUF)","BUF",{"name":1374,"code":1375},"Dar Es Salaam, Tanzania - (DAR)","DAR",{"name":1377,"code":1378},"Brasilia, Brazil - (BSB)","BSB",{"name":1380,"code":1381},"Buenos Aires, Argentina - (EZE)","EZE",{"name":1383,"code":1384},"Bucharest, Romania - (OTP)","OTP",{"name":1386,"code":1387},"Dubai, United Arab Emirates - (DXB)","DXB",{"name":1389,"code":1390},"Djibouti City, Djibouti - (JIB)","JIB",{"name":1392,"code":1393},"Calgary, AB, Canada - (YYC)","YYC",{"name":1395,"code":1396},"Cebu, Philippines - (CEB)","CEB",{"name":1398,"code":1399},"Noumea, New Caledonia - (NOU)","NOU",{"name":1401,"code":1402},"Perth, WA, Australia - (PER)","PER",{"name":1404,"code":1405},"Budapest, Hungary - (BUD)","BUD",{"name":1407,"code":1408},"Durban, South Africa - (DUR)","DUR",{"name":1410,"code":1411},"Charlotte, NC, United States - (CLT)","CLT",{"name":1413,"code":1414},"Erbil, Iraq - (EBL)","EBL",{"name":1416,"code":1417},"Chandigarh, India - (IXC)","IXC",{"name":1419,"code":1420},"Chicago, IL, United States - (ORD)","ORD",{"name":1422,"code":1423},"Sydney, NSW, Australia - (SYD)","SYD",{"name":1425,"code":1426},"Campinas, Brazil - (VCP)","VCP",{"name":1428,"code":1429},"Changde, China - (CGD)","CGD",{"name":1431,"code":1432},"Haifa, Israel - (HFA)","HFA",{"name":1434,"code":1435},"Gaborone, Botswana - (GBE)","GBE",{"name":1437,"code":1438},"Copenhagen, Denmark - (CPH)","CPH",{"name":1440,"code":1441},"Chennai, India - (MAA)","MAA",{"name":1443,"code":1444},"Harare, Zimbabwe - (HRE)","HRE",{"name":1446,"code":1447},"Jeddah, Saudi Arabia - (JED)","JED",{"name":1449,"code":1450},"Tahiti, French Polynesia - (PPT)","PPT",{"name":1452,"code":1453},"Cleveland, OH, United States - (CLE)","CLE",{"name":1455,"code":1456},"Johannesburg, South Africa - (JNB)","JNB",{"name":1458,"code":1459},"Kuwait City, Kuwait - (KWI)","KWI",{"name":1461,"code":1462},"Dublin, Ireland - (DUB)","DUB",{"name":1464,"code":1465},"Columbus, OH, United States - (CMH)","CMH",{"name":1467,"code":1468},"Suva, Fiji - (SUV)","SUV",{"name":1470,"code":1471},"Dallas, TX, United States - (DFW)","DFW",{"name":1473,"code":1474},"Manama, Bahrain - (BAH)","BAH",{"name":1476,"code":1477},"Kigali, Rwanda - (KGL)","KGL",{"name":1479,"code":1480},"Chittagong, Bangladesh - (CGP)","CGP",{"name":1482,"code":1483},"Hobart, Australia - (HBA)","HBA",{"name":1485,"code":1486},"Frankfurt, Germany - (FRA)","FRA",{"name":1488,"code":1489},"Muscat, Oman - (MCT)","MCT",{"name":1491,"code":1492},"Denver, CO, United States - (DEN)","DEN",{"name":1494,"code":1495},"Colombo, Sri Lanka - (CMB)","CMB",{"name":1497,"code":1498},"Lagos, Nigeria - (LOS)","LOS",{"name":1500,"code":1501},"Curitiba, Brazil - (CWB)","CWB",{"name":1503,"code":1504},"Wellington, New Zealand - (WLG)","WLG",{"name":1506,"code":1507},"Luanda, Angola - (LAD)","LAD",{"name":1509,"code":1510},"Detroit, MI, United States - (DTW)","DTW",{"name":1512,"code":1513},"Geneva, Switzerland - (GVA)","GVA",{"name":1515,"code":1516},"Dhaka, Bangladesh - (DAC)","DAC",{"name":1518,"code":1519},"Florianopolis, Brazil - (FLN)","FLN",{"name":1521,"code":1522},"Najaf, Iraq - (NJF)","NJF",{"name":1524,"code":1525},"Fortaleza, Brazil - (FOR)","FOR",{"name":1527,"code":1528},"Gothenburg, Sweden - (GOT)","GOT",{"name":1530,"code":1531},"Maputo, Mozambique - (MPM)","MPM",{"name":1533,"code":1534},"Foshan, China - (FUO)","FUO",{"name":1536,"code":1537},"Nasiriyah, Iraq - (XNH)","XNH",{"name":1539,"code":1540},"Durham, NC, United States - (RDU)","RDU",{"name":1542,"code":1543},"Mombasa, Kenya - (MBA)","MBA",{"name":1545,"code":1546},"Hamburg, Germany - (HAM)","HAM",{"name":1548,"code":1549},"Ramallah - (ZDM)","ZDM",{"name":1551,"code":1552},"Georgetown, Guyana - (GEO)","GEO",{"name":1554,"code":1555},"Fukuoka, Japan - (FUK)","FUK",{"name":1557,"code":1558},"Guadalajara, Mexico - (GDL)","GDL",{"name":1560,"code":1561},"Helsinki, Finland - (HEL)","HEL",{"name":1563,"code":1564},"Riyadh, Saudi Arabia - (RUH)","RUH",{"name":1566,"code":1567},"Nairobi, Kenya - (NBO)","NBO",{"name":1569,"code":1570},"Fuzhou, China - (FOC)","FOC",{"name":1572,"code":1573},"Halifax, Canada - (YHZ)","YHZ",{"name":1575,"code":1576},"Guangzhou, China - (CAN)","CAN",{"name":1578,"code":1579},"Istanbul, Turkey - (IST)","IST",{"name":1581,"code":1582},"Guatemala City, Guatemala - (GUA)","GUA",{"name":1584,"code":1585},"Honolulu, HI, United States - (HNL)","HNL",{"name":1587,"code":1588},"Sulaymaniyah, Iraq - (ISU)","ISU",{"name":1590,"code":1591},"Oran, Algeria - (ORN)","ORN",{"name":1593,"code":1594},"Tel Aviv, Israel - (TLV)","TLV",{"name":1596,"code":1597},"Houston, TX, United States - (IAH)","IAH",{"name":1599,"code":1600},"Guayaquil, Ecuador - (GYE)","GYE",{"name":1602,"code":1603},"Haikou, China - (HAK)","HAK",{"name":1605,"code":1606},"Ouagadougou, Burkina Faso   - (OUA)","OUA",{"name":1608,"code":1609},"Izmir, Turkey - (ADB)","ADB",{"name":1611,"code":1612},"Kyiv, Ukraine - (KBP)","KBP",{"name":1614,"code":1615},"Port Louis, Mauritius - (MRU)","MRU",{"name":1617,"code":1618},"Indianapolis, IN, United States - (IND)","IND",{"name":1620,"code":1621},"Hanoi, Vietnam - (HAN)","HAN",{"name":1623,"code":1624},"Lisbon, Portugal - (LIS)","LIS",{"name":1626,"code":1627},"Jacksonville, FL, United States - (JAX)","JAX",{"name":1629,"code":1630},"Hengshui, China - (SJW)","SJW",{"name":1632,"code":1633},"Joinville, Brazil - (JOI)","JOI",{"name":1635,"code":1636},"London, United Kingdom - (LHR)","LHR",{"name":1638,"code":1639},"Kansas City, MO, United States - (MCI)","MCI",{"name":1641,"code":1642},"Ho Chi Minh City, Vietnam - (SGN)","SGN",{"name":1644,"code":1645},"Tunis, Tunisia - (TUN)","TUN",{"name":1647,"code":1648},"Juazeiro do Norte, Brazil - (JDO)","JDO",{"name":1650,"code":154},"Hong Kong - (HKG)",{"name":1652,"code":1653},"Lima, Peru - (LIM)","LIM",{"name":1655,"code":1656},"Luxembourg City, Luxembourg - (LUX)","LUX",{"name":1658,"code":1659},"Kingston, Jamaica - (KIN)","KIN",{"name":1661,"code":1662},"Kinshasa, DR Congo - (FIH)","FIH",{"name":1664,"code":1665},"Las Vegas, NV, United States - (LAS)","LAS",{"name":1667,"code":1668},"Hyderabad, India - (HYD)","HYD",{"name":1670,"code":1671},"Manaus, Brazil - (MAO)","MAO",{"name":1673,"code":1674},"Lyon, France - (LYS)","LYS",{"name":1676,"code":1677},"Cairo, Egypt - (CAI)","CAI",{"name":1679,"code":1680},"Los Angeles, CA, United States - (LAX)","LAX",{"name":1682,"code":1683},"Madrid, Spain - (MAD)","MAD",{"name":1685,"code":1686},"Islamabad, Pakistan - (ISB)","ISB",{"name":1688,"code":1689},"Windhoek, Namibia - (WDH)","WDH",{"name":1691,"code":1692},"Manchester, United Kingdom - (MAN)","MAN",{"name":1694,"code":1695},"Memphis, TN, United States - (MEM)","MEM",{"name":1697,"code":1698},"Jakarta, Indonesia - (CGK)","CGK",{"name":1700,"code":1701},"Yamoussoukro, Ivory Coast - (ASK)","ASK",{"name":1703,"code":1704},"Marseille, France - (MRS)","MRS",{"name":1706,"code":1707},"Panama City, Panama - (PTY)","PTY",{"name":1709,"code":1710},"Mexico City, Mexico - (MEX)","MEX",{"name":1712,"code":1713},"Abidjan, Ivory Coast - (ABJ)","ABJ",{"name":1715,"code":1716},"Miami, FL, United States - (MIA)","MIA",{"name":1718,"code":1719},"Milan, Italy - (MXP)","MXP",{"name":1721,"code":1722},"Jinan, China - (TNA)","TNA",{"name":1724,"code":1725},"Paramaribo, Suriname - (PBM)","PBM",{"name":1727,"code":1728},"Kampala, Uganda - (EBB)","EBB",{"name":1730,"code":1731},"Minneapolis, MN, United States - (MSP)","MSP",{"name":1733,"code":1734},"Porto Alegre, Brazil - (POA)","POA",{"name":1736,"code":1737},"Minsk, Belarus - (MSQ)","MSQ",{"name":1739,"code":1740},"Moscow, Russia - (DME)","DME",{"name":1742,"code":1743},"Johor Bahru, Malaysia - (JHB)","JHB",{"name":1745,"code":1746},"Quito, Ecuador - (UIO)","UIO",{"name":1748,"code":1749},"Munich, Germany - (MUC)","MUC",{"name":1751,"code":1752},"Kanpur, India - (KNU)","KNU",{"name":1754,"code":1755},"Nashville, United States - (BNA)","BNA",{"name":1757,"code":1758},"Newark, NJ, United States - (EWR)","EWR",{"name":1760,"code":1761},"Nicosia, Cyprus - (LCA)","LCA",{"name":1763,"code":1764},"Kaohsiung City, Taiwan - (KHH)","KHH",{"name":1766,"code":1767},"Recife, Brazil - (REC)","REC",{"name":1769,"code":1770},"Oslo, Norway - (OSL)","OSL",{"name":1772,"code":1773},"Norfolk, VA, United States - (ORF)","ORF",{"name":1775,"code":1776},"Karachi, Pakistan - (KHI)","KHI",{"name":1778,"code":1779},"Ribeirao Preto, Brazil - (RAO)","RAO",{"name":1781,"code":1782},"Rio de Janeiro, Brazil - (GIG)","GIG",{"name":1784,"code":1785},"Kathmandu, Nepal - (KTM)","KTM",{"name":1787,"code":1788},"Palermo, Italy - (PMO)","PMO",{"name":1790,"code":1791},"Oklahoma City, OK, United States - (OKC)","OKC",{"name":1793,"code":1794},"Paris, France - (CDG)","CDG",{"name":1796,"code":1797},"Omaha, NE, United States - (OMA)","OMA",{"name":1799,"code":1800},"Prague, Czech Republic - (PRG)","PRG",{"name":1802,"code":1803},"Kolkata, India - (CCU)","CCU",{"name":1805,"code":1806},"Ottawa, Canada - (YOW)","YOW",{"name":1808,"code":1809},"Santiago, Chile - (SCL)","SCL",{"name":1811,"code":1812},"Philadelphia, United States - (PHL)","PHL",{"name":1814,"code":1815},"Krasnoyarsk, Russia - (KJA)","KJA",{"name":1817,"code":1818},"Lusaka, Zambia - (LUN)","LUN",{"name":1820,"code":1821},"Kuala Lumpur, Malaysia - (KUL)","KUL",{"name":1823,"code":1824},"Phoenix, AZ, United States - (PHX)","PHX",{"name":1826,"code":1827},"Riga, Latvia - (RIX)","RIX",{"name":1829,"code":1830},"Santo Domingo, Dominican Republic - (SDQ)","SDQ",{"name":1832,"code":1833},"Addis Ababa, Ethiopia - (ADD)","ADD",{"name":1835,"code":1836},"Rome, Italy - (FCO)","FCO",{"name":1838,"code":1839},"Pittsburgh, PA, United States - (PIT)","PIT",{"name":1841,"code":1842},"Lilongwe, Malawi - (LLW)","LLW",{"name":1844,"code":1845},"Portland, OR, United States - (PDX)","PDX",{"name":1847,"code":1848},"Saint Petersburg, Russia - (LED)","LED",{"name":1850,"code":1851},"Langfang, China - (PKX)","PKX",{"name":1853,"code":1854},"Constantine, Algeria - (CZL)","CZL",{"name":1856,"code":1857},"Queretaro, MX, Mexico - (QRO)","QRO",{"name":1859,"code":1860},"Santa Venera, Malta - (MLA)","MLA",{"name":1862,"code":1863},"Richmond, VA, United States - (RIC)","RIC",{"name":1865,"code":1866},"Sorocaba, Brazil - (SOD)","SOD",{"name":1868,"code":1869},"Skopje, North Macedonia - (SKP)","SKP",{"name":1871,"code":1872},"Sofia, Bulgaria - (SOF)","SOF",{"name":1874,"code":1875},"Macau - (MFM)","MFM",{"name":1877,"code":1878},"Sacramento, CA, United States - (SMF)","SMF",{"name":1880,"code":1881},"Stockholm, Sweden - (ARN)","ARN",{"name":1883,"code":1884},"Salt Lake City, UT, United States - (SLC)","SLC",{"name":1886,"code":1887},"Tegucigalpa, Honduras - (TGU)","TGU",{"name":1889,"code":1890},"Stuttgart, Germany   - (STR)","STR",{"name":1892,"code":1893},"San Antonio, TX, United States - (SAT)","SAT",{"name":1895,"code":1896},"Manila, Philippines - (MNL)","MNL",{"name":1898,"code":1899},"San Diego, CA, United States - (SAN)","SAN",{"name":1901,"code":1902},"Tallinn, Estonia - (TLL)","TLL",{"name":1904,"code":1905},"Mumbai, India - (BOM)","BOM",{"name":1907,"code":1908},"Tbilisi, Georgia - (TBS)","TBS",{"name":1910,"code":1911},"San Francisco, CA, United States - (SFO)","SFO",{"name":1913,"code":1914},"Vitoria, Brazil - (VIX)","VIX",{"name":1916,"code":1917},"San Jose, CA, United States - (SJC)","SJC",{"name":1919,"code":1920},"Thessaloniki, Greece - (SKG)","SKG",{"name":1922,"code":1923},"Nagpur, India - (NAG)","NAG",{"name":1925,"code":1926},"Saskatoon, SK, Canada - (YXE)","YXE",{"name":1928,"code":1929},"Naha, Japan  - (OKA)","OKA",{"name":1931,"code":1932},"Tirana, Albania - (TIA)","TIA",{"name":1934,"code":1935},"Campos dos Goytacazes, Brazil - (CAW)","CAW",{"name":1937,"code":1938},"Seattle, WA, United States - (SEA)","SEA",{"name":1940,"code":1941},"Vienna, Austria - (VIE)","VIE",{"name":1943,"code":1944},"New Delhi, India - (DEL)","DEL",{"name":1946,"code":1947},"Chapeco, Brazil - (XAP)","XAP",{"name":1949,"code":1950},"Osaka, Japan - (KIX)","KIX",{"name":1952,"code":1953},"Vilnius, Lithuania - (VNO)","VNO",{"name":1955,"code":1956},"Sioux Falls, SD, United States - (FSD)","FSD",{"name":1958,"code":1959},"Bridgetown, Barbados - (BGI)","BGI",{"name":1961,"code":1962},"Warsaw, Poland - (WAW)","WAW",{"name":1964,"code":1965},"Patna, India - (PAT)","PAT",{"name":1967,"code":1968},"Phnom Penh, Cambodia - (PNH)","PNH",{"name":1970,"code":1971},"Tallahassee, FL, United States - (TLH)","TLH",{"name":1973,"code":1974},"Santiago de los Caballeros, Dominican Republic - (STI)","STI",{"name":1976,"code":1977},"Wroclaw, Poland - (WRO)","WRO",{"name":1979,"code":1980},"Zagreb, Croatia - (ZAG)","ZAG",{"name":1982,"code":1983},"Qingdao, China - (TAO)","TAO",{"name":1985,"code":1986},"Tampa, FL, United States - (TPA)","TPA",{"name":1988,"code":1989},"La Paz, Bolivia - (LPB)","LPB",{"name":1991,"code":1992},"Toronto, ON, Canada - (YYZ)","YYZ",{"name":1994,"code":1995},"Seoul, South Korea - (ICN)","ICN",{"name":1997,"code":1998},"Zurich, Switzerland - (ZRH)","ZRH",{"name":2000,"code":2001},"Vancouver, BC, Canada - (YVR)","YVR",{"name":2003,"code":2004},"Shanghai, China - (SHA)","SHA",{"name":2006,"code":2007},"San Juan, Puerto Rico - (SJU)","SJU",{"name":2009,"code":2010},"Singapore, Singapore - (SIN)","SIN",{"name":2012,"code":2013},"Winnipeg, MB, Canada - (YWG)","YWG",{"name":2015,"code":2016},"Barranquilla, Colombia - (BAQ)","BAQ",{"name":2018,"code":2019},"Surat Thani, Thailand - (URT)","URT",{"name":2021,"code":2022},"Palmas, Brazil - (PMW)","PMW",{"name":2024,"code":2025},"Taipei - (TPE)","TPE",{"name":2027,"code":2028},"Aracatuba, Brazil - (ARU)","ARU",{"name":2030,"code":2031},"Port of Spain, Trinidad and Tobago - (POS)","POS",{"name":2033,"code":2034},"Salvador, Brazil - (SSA)","SSA",{"name":2036,"code":2037},"Tokyo, Japan - (NRT)","NRT",{"name":2039,"code":2040},"Ulaanbaatar, Mongolia - (ULN)","ULN",{"name":2042,"code":2043},"Vientiane, Laos - (VTE)","VTE",{"name":2045,"code":2046},"Xinyu, China - (KHN)","KHN",{"name":2048,"code":2049},"Yerevan, Armenia - (EVN)","EVN",{"name":2051,"code":2052},"Yogyakarta, Indonesia - (JOG)","JOG",{"name":2054,"code":2055},"Cagayan de Oro, Philippines - (CGY)","CGY",{"name":2057,"code":2058},"Ljubljana, Slovenia - (LJU)","LJU",{"name":2060,"code":2061},"Kochi, India - (COK)","COK",{"name":2063,"code":2064},"Cuiaba, Brazil - (CGB)","CGB",{"name":2066,"code":2067},"Denpasar, Indonesia - (DPS)","DPS",{"name":2069,"code":2070},"Kannur, India - (CNN)","CNN",{"name":2072,"code":2073},"Cali, Colombia - (CLO)","CLO",{"name":2075,"code":2076},"San Pedro Sula, Honduras - (SAP)","SAP",{"name":2078,"code":2079},"Shenzhen, China - (SZX)","SZX",{"name":2081,"code":2082},"Guiyang, China - (KWE)","KWE",{"name":2084,"code":2085},"Shaoxing, China - (HGH)","HGH",{"name":2087,"code":2088},"Changzhou, China - (CZX)","CZX",{"name":2090,"code":2091},"Kunming, China - (KMG)","KMG",{"name":2093,"code":2094},"Chiang Mai, Thailand - (CNX)","CNX",{"name":2096,"code":2097},"Zhengzhou, China - (CGO)","CGO",{"name":2099,"code":2100},"Yangquan, China - (TYN)","TYN",{"name":2102,"code":2103},"Changsha, China - (CSX)","CSX",{"name":2105,"code":2106},"Dalian, China - (DLC)","DLC",{"name":2108,"code":2109},"Beihai, China - (BHY)","BHY",{"name":2111,"code":2112},"Chongqing, China - (CKG)","CKG",{"name":2114,"code":2115},"Xiangyang, China - (XFN)","XFN",{"name":2117,"code":2118},"Da Nang, Vietnam - (DAD)","DAD",{"name":2120,"code":2121},"Jiaxing, China - (JXG)","JXG",{"name":2123,"code":2124},"Tarlac City, Philippines - (CRK)","CRK",{"name":2126,"code":2127},"Thimphu, Bhutan - (PBH)","PBH",{"name":2129,"code":2130},"Baoji, China - (XIY)","XIY",{"name":2132,"code":2133},"Astana, Kazakhstan - (NQZ)","NQZ",{"name":2135,"code":2136},"Kuching, Malaysia - (KCH)","KCH",{"name":2138,"code":2139},"Aktobe, Kazakhstan - (AKX)","AKX",{"name":2141,"code":2142},"Tongren, China - (TEN)","TEN",{"name":2144,"code":2145},"Taizhou, China - (HYN)","HYN",{"name":2147,"code":2148},"Bishkek, Kyrgyzstan - (FRU)","FRU",{"name":2150,"code":2151},"Malang, Indonesia - (MLG)","MLG",{"name":2153,"code":2154},"Lahore, Pakistan - (LHE)","LHE",{"name":2156,"code":2157},"Chengdu, China - (CTU)","CTU",{"name":2159,"code":2160},"Agra, India - (AGR)","AGR",{"name":2162,"code":2163},"Coimbatore, India - (CJB)","CJB",{"name":2165,"code":2166},"Xingyi, China - (ACX)","ACX",{"name":2168,"code":2169},"Bhubaneswar, India - (BBI)","BBI",{"name":2171,"code":2172},"Luoyang, China - (LYA)","LYA",{"name":2174,"code":2175},"Pune, India - (PNQ)","PNQ",{"name":2177,"code":2178},"Sambalpur, India - (JRG)","JRG",1779981580411]