1<!DOCTYPE html> 2<html lang="zh-CN"> 3<head> 4<meta charset="UTF-8"> 5<meta name="viewport" content="width=device-width, initial-scale=1.0"> 6<title>NBé¢é å¸å¼ API ææ¡£</title> 7<style> 8body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;max-width:860px;margin:0 auto;padding:24px 16px;line-height:1.7;background:#f7f8fa;color:#222} 9h1{border-bottom:2px solid #00a1d6;padding-bottom:8px} 10h2{margin-top:32px;color:#00a1d6;border-left:4px solid #00a1d6;padding-left:10px} 11code,pre{background:#eef1f5;border-radius:6px;font-size:0.9em} 12code{padding:2px 6px} 13pre{padding:12px 14px;overflow-x:auto} 14table{border-collapse:collapse;width:100%;margin:12px 0} 15th,td{border:1px solid #d5dae0;padding:8px 10px;text-align:left;font-size:0.92em} 16th{background:#e9eef4} 17.ep{background:#fff;border:1px solid #e1e6ec;border-radius:10px;padding:14px 16px;margin:14px 0} 18.badge{display:inline-block;background:#00a1d6;color:#fff;border-radius:4px;padding:1px 8px;font-size:0.8em;margin-right:6px} 19.badge.g{background:#28a745} 20.footer{margin-top:40px;color:#888;font-size:0.85em;text-align:center} 21</style> 22</head> 23<body> 24<h1>ð NBé¢é èæè¡ç¥¨å¸å¼ API</h1> 25<p>åªè¯»æ¥å£ï¼æ°æ®ä¸ç½ç«åç«¯å®æ¶ä¸è´ãBase URLï¼<code>https://nbchannel.pythonanywhere.com</code> æ <code>https://api.nb-channel.top</code></p> 26 27<div style="background:#fff8e1;border:1px solid #ffe08a;border-radius:10px;padding:14px 16px;margin:16px 0"> 28<b>â ï¸ 2026-09-25 èµ·ï¼ä¸»è¦æ¥å£éè¦ API Key</b><br> 29<code>/api/market</code>ï¼å«åè·¯å¾ä¸å¯¼åºï¼ã<code>/api/comments</code>ã<code>/api/stats</code> 30éè¦å¸¦ <code>X-API-Key</code> 请æ±å¤´ï¼å¦åè¿å <code>401 UNAUTHORIZED</code>ã<br> 31<b>ç³è¯·ï¼</b>é®ä»¶ <a href="mailto:[email protected]">[email protected]</a> 32æç«å è¯è®ºåº @NBé¢é宿¹ï¼è¯´æç¨éä¸å¤§è´è°ç¨é¢çã<br> 33<b>ç¨æ³ï¼</b> 34<pre>curl -H "X-API-Key: ä½ ç³è¯·å°çKey" "https://api.nb-channel.top/api/market"</pre> 35请ç¨è¯·æ±å¤´è䏿¯ <code>?key=</code> åæ°ï¼URL ä¼è¿æ¥å¿ä¸ referrerï¼ï¼ä¹ä¸è¦æ Key æäº¤å°å ¬å¼ä»åºã<br> 36<code>/api/bili-fans</code> ä¸ <code>/api/docs</code> ä»ç¶å®å ¨å ¬å¼ï¼ä¸éè¦ Keyã 37</div> 38 39<h2>ç»ä¸ååºç»æ</h2> 40<p>æåï¼<code>{"success": true, "code": "OK", ...æ°æ®å段}</code>ï¼å¤±è´¥ï¼<code>{"success": false, "code": "é误ç ", "message": "说æ"}</code></p> 41<table> 42<tr><th>é误ç </th><th>HTTP</th><th>å«ä¹</th></tr> 43<tr><td><code>OK</code></td><td>200</td><td>æå</td></tr> 44<tr><td><code>UNAUTHORIZED</code></td><td>401</td><td>API Key 缺失æé误ï¼è¯·å¸¦ <code>X-API-Key</code> 请æ±å¤´ï¼</td></tr> 45<tr><td><code>RATE_LIMITED</code></td><td>429</td><td>请æ±è¿äºé¢ç¹ï¼æ¯ IP æ¯åé 60 次ï¼</td></tr> 46<tr><td><code>NOT_FOUND</code></td><td>404</td><td>å ¬å¸ä¸åå¨</td></tr> 47<tr><td><code>INVALID_PARAM</code></td><td>400</td><td>åæ°ä¸åæ³</td></tr> 48<tr><td><code>DB_ERROR</code></td><td>500</td><td>åç«¯æ°æ®åºå¼å¸¸</td></tr> 49</table> 50 51<h2>æ¥å£å表</h2> 52 53<div class="ep"> 54<span class="badge">GET</span><code>/api/market</code> â å ¨å¸åºå¿«ç § 55<p>åæ°ï¼<code>name</code>ï¼å¯éï¼æå ¬å¸åæ¨¡ç³æ¥è¯¢ï¼æå¤50å®¶ï¼</p> 56<pre>curl -H "X-API-Key: ä½ çKey" "https://api.nb-channel.top/api/market" 57curl -H "X-API-Key: ä½ çKey" "https://api.nb-channel.top/api/market?name=NB"</pre> 58</div> 59 60<div class="ep"> 61<span class="badge">GET</span><code>/api/market/<company_id></code> â åå®¶å ¬å¸å¸å¼ 62<pre>curl -H "X-API-Key: ä½ çKey" "https://api.nb-channel.top/api/market/1"</pre> 63</div> 64 65<div class="ep"> 66<span class="badge">GET</span><code>/api/market/<company_id>/history</code> â åå²K线ï¼å¸å¼èµ°å¿ç¹ï¼ 67<p>åæ°ï¼<code>days</code>ï¼å¯éï¼é»è®¤ 7ï¼èå´ 1~30ï¼</p> 68<pre>curl -H "X-API-Key: ä½ çKey" "https://api.nb-channel.top/api/market/1/history?days=7"</pre> 69</div> 70 71<div class="ep"> 72<span class="badge">GET</span><code>/api/market/export?format=csv</code> â å ¨å¸åºå¿«ç §å¯¼åºï¼CSV æä»¶ä¸è½½ï¼ 73<pre>
73curl -H "X-API-Key: ä½ çKey" "https://api.nb-channel.top/api/market/export?format=csv" -o market.csv</pre> 74</div> 75 76<div class="ep"> 77<span class="badge">GET</span><code>/api/comments</code> â ææ°è¯è®ºï¼åªè¯»ï¼ 78<p>åæ°ï¼<code>page</code>ï¼é»è®¤ 1ï¼ã<code>limit</code>ï¼é»è®¤ 20ï¼æå¤§ 50ï¼ã<code>page_path</code>ï¼å¯éï¼æé¡µé¢çéï¼å¦ comments-beta.htmlï¼</p> 79<p>ååºå« <code>total</code>ï¼æ»è¯è®ºæ°ï¼ä¸ <code>page_count</code>ï¼æ»é¡µæ°ï¼æå½å limit 计ç®ï¼</p> 80<pre>curl -H "X-API-Key: ä½ çKey" "https://api.nb-channel.top/api/comments?page=1&limit=20" 81curl -H "X-API-Key: ä½ çKey" "https://api.nb-channel.top/api/comments?page_path=comments-beta.html"</pre> 82</div> 83 84<div class="ep"> 85<span class="badge">GET</span><code>/api/stats</code> â API ç¨éç»è®¡ï¼å½æ¥è¯·æ±æ°/端ç¹åå¸/éæµæ¬¡æ°ï¼ 86<pre>curl -H "X-API-Key: ä½ çKey" "https://api.nb-channel.top/api/stats"</pre> 87</div> 88 89<div class="ep"> 90<span class="badge">GET</span><code>/api/docs</code> â æ¬ææ¡£ 91</div> 92 93<h2>ååºç¤ºä¾ï¼å ¨å¸åºï¼</h2> 94<pre>{ 95 "success": true, 96 "code": "OK", 97 "as_of": "2026-08-19T12:00:00+00:00", 98 "total_market_value": 1234567, 99 "count": 54, 100 "companies": [ 101 {"id": 1, "name": "NBé¢é", "market_value": 148467, "owner": "NBæäºå±"} 102 ] 103}</pre> 104 105<h2>ååºç¤ºä¾ï¼åå²K线ï¼</h2> 106<pre>{ 107 "success": true, 108 "code": "OK", 109 "as_of": "2026-08-19T12:00:00+00:00", 110 "company_id": 1, 111 "name": "NBé¢é", 112 "days": 7, 113 "points_count": 900, 114 "points": [ 115 {"t": "2026-08-19T03:55:00+00:00", "v": 148467} 116 ] 117}</pre> 118 119<h2>代ç 示ä¾</h2> 120<p>宿´ SDK 示ä¾è§ä»åº <code>api-sdk/</code> ç®å½ï¼<code>python_example.py</code> / <code>js_example.js</code>ï¼ã</p> 121 122<div class="ep"> 123<span class="badge">Python</span> requests 124<pre>from python_example import NBMarket 125 126nb = NBMarket() # æ NBMarket(base_url="https://nbchannel.pythonanywhere.com") 127 128market = nb.market() # å ¨å¸åº 129print(market["total_market_value"]) 130print(nb.market(name="NB")) # æåæ¨¡ç³æ¥è¯¢ 131print(nb.market_by_id(3)) # åå ¬å¸ 132print(nb.history(3, days=7)) # åå²K线 133comments = nb.comments(page=1, limit=10) # è¯è®ºï¼å« total / page_countï¼ 134print(comments["total"], comments["page_count"])</pre> 135</div> 136 137<div class="ep"> 138<span class="badge">JavaScript</span> fetchï¼æµè§å¨ / Nodeï¼ 139<pre>// æµè§å¨ï¼<script src="js_example.js"> åç´æ¥ç¨ window.NBMarket 140const market = await NBMarket.market(); 141console.log(market.total_market_value); 142 143const one = await NBMarket.marketById(3); 144const kline = await NBMarket.history(3, 7); 145 146const comments = await NBMarket.comments(1, 10); 147console.log('å ±', comments.total, 'æ¡ï¼', comments.page_count, '页');</pre> 148</div> 149 150<h2>åæ®µè¯´æ</h2> 151<table> 152<tr><th>åæ®µ</th><th>说æ</th></tr> 153<tr><td><code>as_of</code></td><td>æ°æ®çææ¶é´ï¼UTC ISO8601ï¼ï¼è°ç¨æ¹å¯å¤ææ°æ®æ°æ§</td></tr> 154<tr><td><code>market_value</code></td><td>å ¬å¸å½åå¸å¼ï¼NBå¸ï¼</td></tr> 155<tr><td><code>t / v</code></td><td>Kçº¿éæ ·æ¶é´ / 该æ¶å»å¸å¼</td></tr> 156<tr><td><code>owner</code></td><td>å ¬å¸å½å±ç¨æ·å</td></tr> 157</table> 158 159<h2>éå¶ä¸è¯´æ</h2> 160<ul> 161<li>éæµï¼æ¯ IP æ¯åéæå¤ 60 次ï¼ååºå¤´ <code>X-RateLimit-Limit</code> / <code>X-RateLimit-Remaining</code> 坿¥å©ä½</li> 162<li>æ°æ®åªè¯»ï¼è¯·å¿ç¨äºæ¹éç¬åï¼å¦éæ´é«é¢åº¦å¯èç³»ç«é¿</li> 163<li>å«åï¼<code>/api/virtual-market-value</code>ã<code>/api/Virtual market value</code> ä¸ <code>/api/market</code> çä»·</li> 164</ul> 165 166<div class="footer">© 2026 NBé¢é · 妿é®é¢è¯·èç³» [email protected]</div>
167<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"2694d6c1b70c42ee8414dc6303584599","r":1,"spa":2}' crossorigin="anonymous"></script>
167 168</body> 169</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.