半次元

半次元 or Banciyuan (literally "Half Dimension") was a Chinese ACG community founded in 2014 and acquired by ByteDance, the company that owns TikTok, in 2018.
It was announced that the website would become read-only on , and would close on , possibly because it was deemed unprofitable. The service became read-only on , and the main site started returning 404 circa .
== Website structure ==
The website is made of ReactJS. The website returns different layouts and performs different 302 redirects for PC and mobile User-Agents.
=== Entities ===
All entities below are identified by positive integers (incremental initially, and for later items a modified Snowflake ID, where the first 32 bits are a UNIX timestamp in seconds).
==== User (用户) ====
Account registration requires a major SNS account or mobile phone number in mainland China.
Users can follow (关注) other users, be followed by other users, follow tags, create collections, and like (喜欢) items.
./src/pages/pc/profile/index/index.js
 
https://bcy.net/u/{uid}
https://bcy.net/u/{uid}?filter=note
https://bcy.net/u/{uid}?filter=article
https://bcy.net/u/{uid}?filter=ganswer
https://bcy.net/u/{uid}?filter=video
https://bcy.net/u/{uid}/like
https://bcy.net/u/{uid}/collection
./src/pages/pc/home/post/index.js
 
https://bcy.net/u/{uid}/post
https://bcy.net/u/{uid}/post/
https://bcy.net/u/{uid}/post/?p={page}
https://bcy.net/u/{uid}/post/note
https://bcy.net/u/{uid}/post/note?p={page}
https://bcy.net/u/{uid}/post/article
https://bcy.net/u/{uid}/post/article?p={page}
https://bcy.net/u/{uid}/post/ganswer
https://bcy.net/u/{uid}/post/ganswer?p={page}
https://bcy.net/u/{uid}/post/video
https://bcy.net/u/{uid}/post/video?p={page}
./src/pages/pc/profile/follow/index.js
 
https://bcy.net/u/{uid}/following
https://bcy.net/u/{uid}/follower
https://bcy.net/u/{uid}/circle
./src/pages/mobile/home/user/index.js
 
https://bcy.net/u/{uid}
==== Item (发布) / Post ====
An item is created by a specific user.
There are four types of items: note (图片), article (文字), ganswer (回答), and video (视频).
Users can reply (评论) to the item and post danmakus (弹幕, bullet chats) on the video.
./src/pages/pc/item/detail/index.js ./src/pages/mobile/detail/index.js
 
https://bcy.net/item/detail/{item_id}
coser, illust, novel, group posts were originally numbered differently, but they all moved under item and renumbered around 2018.
It seems that most of the renumbered Snowflake IDs have a suffix of 0x00005F0E, and they forgot to subtract the 8 hour time zone offset when converting.
For example:
* https://web.archive.org/web/20170216011735/http://bcy.net/coser/detail/100/1025104 → https://bcy.net/item/detail/6381490394403725070
* https://web.archive.org/web/20160822023250/http://bcy.net/illust/detail/10/154834 → https://bcy.net/item/detail/6107335442124791566
* https://web.archive.org/web/20160812015014/http://bcy.net/novel/detail/10022/522898 → https://bcy.net/item/detail/6273464828673679118
* https://web.archive.org/web/20141007061409/http://bcy.net/group/detail/11/1232 → https://bcy.net/item/detail/5904796101684256526
==== Collection (合集) ====
A collection is created by a specific user, and collection creators can only add or remove their own items to the collection.
An item can belong to at most one collection.
./src/pages/pc/collect/detail/index.js ./src/pages/mobile/collection/detail/index.js
 
https://bcy.net/collection/{collection_id}
==== Group (小组 / 问答) ====
Groups (小组) were originally subforums that accepted posts, but were later rebranded as questions (问题) that accepted answers.
A group (问答) is initiated (发起) by a specific user, and other users can post ganswers (which is a kind of item) to answer the group.
Each ganswer must belong to a group; each ganswer can still receive replies individually.
./src/pages/pc/group/list/index.js
 
https://bcy.net/group/list/{group_id}
./src/pages/mobile/group/index.js
 
https://bcy.net/group/list/{group_id}
https://bcy.net/group/list/{group_id}?sort=zan
==== Tag (标签) / Circle (圈子) ====
Every user can attach any tag to their items or collections, and a tag can optionally be owned by an user (圈主).
Circles and tags were distinct at first, but they were merged together and renumbered around 2018.
For example, https://web.archive.org/web/20171019132729/https://bcy.net/circle/index/4023 becomes https://bcy.net/tag/2097 and https://bcy.net/circle/index/4023 becomes a synonym for https://bcy.net/tag/4023 which is a different tag.
./src/pages/pc/circle/index.js
 
https://bcy.net/tag/{circle_id}
https://bcy.net/tags/name/{circle_name}
https://bcy.net/circle/index/{circle_id}
./src/pages/mobile/circle/index.js
 
https://bcy.net/tag/{circle_id}
https://bcy.net/tags/name/{circle_name}
https://bcy.net/circle/index/{circle_id}
https://bcy.net/tag/5798 ← https://bcy.net/illust, https://bcy.net/illust/toppost100
https://bcy.net/tag/399 ← https://bcy.net/coser, https://bcy.net/illust/toppost100
https://bcy.net/tag/72 ← https://bcy.net/novel, https://bcy.net/novel/toppost100
https://bcy.net/tag/3209 ← https://bcy.net/video/toppost100, https://bcy.net/video/list/{cid}
Some tags redirect to events. For example:
* https://bcy.net/tag/20626758 → https://bcy.net/huodong/1113
* https://bcy.net/tag/21148101 → https://bcy.net/huodong/1192
* https://bcy.net/tag/22129061 → https://bcy.net/huodong/1283
==== Huodong / Event (活动) ====
Events are organized by the official, and users can participate (参加) in the events with items. In this case, events appear as a special type of tag.
./src/pages/pc/static/huodong/nevent/index.js ./src/pages/mobile/static/huodong/index.js
 
https://bcy.net/huodong/{event_id}
https://bcy.net/huodong/{event_id}?order=index
https://bcy.net/huodong/{event_id}?order=index&p={page}
https://bcy.net/huodong/{event_id}?order=hot
https://bcy.net/huodong/{event_id}?order=hot&p={page}
Some events use dedicated layouts. For example:
Events using dedicated layouts 
./src/pages/pc/static/huodong/acg2019/index.js
* https://bcy.net/huodong/1001
* https://bcy.net/static/huodong/acg2019rule
* https://bcy.net/static/huodong/acg2019intro
* https://bcy.net/static/huodong/acg2019qa
./src/pages/pc/static/huodong/14thNewStar/index.js
* https://bcy.net/huodong/1104
* https://bcy.net/static/huodong/supernovaawardsintro
* https://bcy.net/static/huodong/supernovaawardsrule
./src/pages/pc/static/huodong/painterScholarship2020/index.js
* https://bcy.net/huodong/1113
* https://bcy.net/static/huodong/painter_scholarship_award
* https://bcy.net/static/huodong/painter_scholarship_company
* https://bcy.net/static/huodong/painter_scholarship_judges
* https://bcy.net/static/huodong/painter_scholarship_qa
./src/pages/pc/static/huodong/hnzrbwg/index.js
* https://bcy.net/huodong/1175
* https://bcy.net/static/huodong/hnzrbwg2021intro
* https://bcy.net/static/huodong/hnzrbwg2021gift
* https://bcy.net/static/huodong/hnzrbwg2021rule
Some events redirect to other pages. For example:
* https://bcy.net/huodong/1192 → https://bcy.snssdk.com/magic/eco/runtime/release/60e423984a89ea0335449703?appType=banciyuan
* https://bcy.net/huodong/1283 → https://bcy.snssdk.com/magic/eco/runtime/release/62ce76a10b9ad40340f01a29?appType=banciyuan
=== Lists ===
./src/pages/pc/home/index/index.js
* https://bcy.net/ ← https://bcy.net/home/channel/circles, https://bcy.net/home/channel/illust, https://bcy.net/home/channel/coser, https://bcy.net/home/channel/novel
* https://bcy.net/?title=focus
./src/pages/pc/illust/index/index.js
* https://bcy.net/illust
* https://bcy.net/coser
./src/pages/pc/novel/index/index.js
* https://bcy.net/novel
./src/pages/pc/rank/index/index.js
* https://bcy.net/illust/toppost100
* https://bcy.net/illust/toppost100?type=week&date=20180602
* https://bcy.net/illust/toppost100?type=lastday&date=20180602
* https://bcy.net/illust/toppost100?type=newPeople&date=20180602
* https://bcy.net/coser/toppost100
* https://bcy.net/novel/toppost100
./src/pages/pc/video/rank/index.js
* https://bcy.net/video/toppost100
* https://bcy.net/video/toppost100?type=sitetop
* https://bcy.net/video/toppost100?type=newPeople
./src/pages/pc/group/home/index.js
* https://bcy.net/group/discover ← https://bcy.net/home/channel/discuss
./src/pages/mobile/home/channel/index.js
* https://bcy.net/
* https://bcy.net/home/channel/circles
* https://bcy.net/home/channel/discuss ← https://bcy.net/group/discover
* https://bcy.net/home/channel/illust
* https://bcy.net/home/channel/coser
* https://bcy.net/home/channel/novel
==== Video lists ====
Video lists other than https://bcy.net/video/list/8103 (热门, popular) may be completely broken, as other video lists return random unrelated items, not even limited to videos.
./src/pages/pc/video/index/index.js
 
https://bcy.net/video/list/{cid}
=== Search ===
./src/pages/pc/search/home/index.js
* https://bcy.net/search/home?k=半次元
* https://bcy.net/search/group?k=半次元
* https://bcy.net/search/user?k=半次元
=== Static ===
URL list 
* https://bcy.net/Public/404.html
./src/pages/pc/static/about/index.js
* https://bcy.net/static/about
./src/pages/pc/static/agreement/index.js
* https://bcy.net/static/guide
* https://bcy.net/static/transport
* https://bcy.net/static/cosrules
* https://bcy.net/static/drawrules
* https://bcy.net/static/writerules
* https://bcy.net/static/agreement
* https://bcy.net/static/privacy
* https://bcy.net/static/videorules
./src/pages/mobile/static/agreement/index.js
* https://bcy.net/static/cosrules
* https://bcy.net/static/drawrules
* https://bcy.net/static/writerules
* https://bcy.net/static/agreement
* https://bcy.net/static/privacy
./src/pages/pc/static/committee/index.js
* https://bcy.net/static/committee
./src/pages/pc/static/help/index.js
* https://bcy.net/static/help
* https://bcy.net/static/rights
* https://bcy.net/static/post
* https://bcy.net/static/postgroup
* https://bcy.net/static/share
* https://bcy.net/static/account
* https://bcy.net/static/userverify
* https://bcy.net/static/report
* https://bcy.net/static/downloadapp
* https://bcy.net/static/danmaku
* https://bcy.net/static/giftagree
* https://bcy.net/static/zhipin
* https://bcy.net/static/payproblem
* https://bcy.net/static/tort
* https://bcy.net/static/cert
* https://bcy.net/static/circlerela
* https://bcy.net/static/pick
./src/pages/mobile/static/help/index.js
* https://bcy.net/static/help
* https://bcy.net/static/rights
* https://bcy.net/static/post
* https://bcy.net/static/postgroup
* https://bcy.net/static/share
* https://bcy.net/static/account
* https://bcy.net/static/userverify
* https://bcy.net/static/report
* https://bcy.net/static/downloadapp
* https://bcy.net/static/danmaku
* https://bcy.net/static/giftagree
* https://bcy.net/static/zhipin
* https://bcy.net/static/payproblem
* https://bcy.net/static/tort
* https://bcy.net/static/cert
* https://bcy.net/static/circlerela
./src/pages/pc/static/joinus/index.js
* https://bcy.net/static/joinus
./src/pages/pc/notfound/index.js ./src/pages/mobile/notfound/index.js
* https://bcy.net/ask/{uid}
* https://bcy.net/u/{uid}/ask
* https://bcy.net/u/{uid}/post/cos
* https://bcy.net/static/app
* https://bcy.net/video
Old non-React pages
* https://bcy.net/static/jw3cos2017intro
* https://bcy.net/static/jw3cos2017rule
* https://bcy.net/static/laohuangli
* https://bcy.net/static/sharewechat
* https://bcy.net/static/xieyi
* https://bcy.net/static/yyscos2017intro
* https://bcy.net/static/yyscos2017rule
=== Error messages ===
./src/pages/pc/message/index.js
* https://bcy.net/u/0
* https://bcy.net/item/detail/0
* https://bcy.net/item/detail/9223372036854775807
* https://bcy.net/collection/0
* https://bcy.net/group/list/0
* https://bcy.net/tag/0
* https://bcy.net/tag/9223372036854775807
* https://bcy.net/huodong/0
* https://bcy.net/huodong/9223372036854775807
=== "Magic" landing pages ===
Some pages are made using the "Magic" (魔方) event landing page SDKMight be related to , consisting of components from private NPM packages in the scopes @magic-module and @magic-module-pc, and the layout is built using window.__MAGIC__.data.schema or window.__INITIAL_STATE__.components.
For example:
* 创作课堂 (creative classroom): https://bcy.net/magic/eco/runtime/release/60f404af7634090359cb5002?appType=banciyuan
* 营业执照 (business license): https://bcy.net/magic/eco/runtime/release/63885581957c560475ee3b20?appType=banciyuan&magic_page_no=1
* https://bcy.snssdk.com/magic/page/ejs/5d78a28237a06502088a8605?appType=bcy
=== Short URLs ===
The pattern is https://bcy\.net/s/[0-9A-Za-z]+/.
== Mobile apps ==
The application ID for Android is com.banciyuan.bcywebview, and the Bundle IDs for iOS are com.banciyuan.BCYCosplay and com.banciyuan.lite.
While the apps were removed from the App Store半次元-第一中文COS绘画小说社区：在 App Store 上的内容 and Android stores on June 12, 2023, the Android package can still be found at .
The app supports deep links with the scheme bcyapp-http.
== APIs ==
Web APIs are under https://bcy.net/apiv3/, but they are currently unstable (occasionally missing items and skipping some cursors) due to traffic bursts.
Mobile app API calls are POST requests, rate-limited, and encrypted with a constant AES key. They are under https://api.bcy.net/apiv2/ and https://api-hl.bcy.net/apiv2/.
== Assets ==
=== Image ===
Most images are hosted under p3-bcy-sign.bcyimg.com, whose URLs are always protected by the session key \?x-expires=[0-9]+&x-signature=[0-9A-Za-z%2B%2F%3D]+ that expires in 186 days (exactly 16,070,400 seconds).
There are other undocumented CDN domains that can bypass the session key, remove the watermark, and switch to the original resolution, but using them is currently not recommended as server admins may be alerted by unusual traffic bursts.
* img5.bcyimg.com , img9.bcyimg.com and user.bcyimg.com are hosts serving user-generated images that were directly exposed prior to 2017. After 2018, URLs under them are mapped to p3-bcy.bcyimg.com/banciyuan/ and p3-bcy-sign.bcyimg.com/banciyuan/ .
** https://p3-bcy.bcyimg.com/banciyuan/04d3c90ce01b4e58b6c35e9e199bd3fe~tplv-banciyuan-tl640.image and https://p3-bcy-sign.bcyimg.com/banciyuan/04d3c90ce01b4e58b6c35e9e199bd3fe~tplv-banciyuan-tl640.image?x-expires=1704991916&x-signature=bNBMWkAK%2BS5Pd%2F7GLbskShzpxLs%3D are identical.
*** https://p3-bcy.bcyimg.com/banciyuan/04d3c90ce01b4e58b6c35e9e199bd3fe~tplv-banciyuan-obj.image is the native resolution form of https://p3-bcy.bcyimg.com/banciyuan/04d3c90ce01b4e58b6c35e9e199bd3fe~tplv-banciyuan-tl640.image .
** https://p3-bcy.bcyimg.com/banciyuan/Public/Upload/avatar/1326039/8c0e7aae4607412f82bf4a7a4486fe36/fat.jpg~tplv-banciyuan-abig.image and https://p3-bcy-sign.bcyimg.com/banciyuan/Public/Upload/avatar/1326039/8c0e7aae4607412f82bf4a7a4486fe36/fat.jpg~tplv-banciyuan-abig.image?x-expires=1704637427&x-signature=EeEkaVBwrUypyv8HZcPwKXrflTU%3D are identical.
*** https://p3-bcy.bcyimg.com/banciyuan/Public/Upload/avatar/1326039/8c0e7aae4607412f82bf4a7a4486fe36/fat.jpg~tplv-banciyuan-obj.image is the compressed version of https://img5.bcyimg.com/Public/Upload/avatar/1326039/8c0e7aae4607412f82bf4a7a4486fe36/fat.jpg .
*** https://p3-bcy.bcyimg.com/banciyuan/Public/Upload/avatar/1326039/8c0e7aae4607412f82bf4a7a4486fe36/fat.jpg~tplv-banciyuan-obj.image and https://static.bcyimg.com/Public/Upload/avatar/1326039/8c0e7aae4607412f82bf4a7a4486fe36/fat.jpg are identical (308KiB).
*** https://img5.bcyimg.com/Public/Upload/avatar/1326039/8c0e7aae4607412f82bf4a7a4486fe36/fat.jpg , https://img9.bcyimg.com/Public/Upload/avatar/1326039/8c0e7aae4607412f82bf4a7a4486fe36/fat.jpg and https://user.bcyimg.com/Public/Upload/avatar/1326039/8c0e7aae4607412f82bf4a7a4486fe36/fat.jpg are identical (506KiB).
* URLs that themselves contain the patterns /./ or // will cause a signature mismatch. For example:
** https://img5.bcyimg.com/./Public/Upload/coser/379/post/3//51d68824c462a.jpg is alive, while https://p3-bcy-sign.bcyimg.com/banciyuan/./Public/Upload/coser/379/post/3//51d68824c462a.jpg~noop.image?x-expires=1705103781&x-signature=mki6EqNtf6xt2GHFbR95oXShoVg%3D returns HTTP 403.
=== Video ===
The browser should use a decoded play_auth_token attached in window.__ssr_data from https://bcy.net/item/detail/{item_id} to request PlayInfoList from vod.bytedanceapi.com.
MainPlayUrl in the PlayInfoList of the response is under domains including v3-video.bcy.net, v6-video.bcy.net, v9-video.bcy.net and should be immediately requested, as it will expire soon.
== External links ==
* 
== References ==