Clubhouse是最近两年比较火的一个语音聊天室社区软件,在语音社区领域目前应该还没有竞争对手,用户资料可以直接和instagram关联。互动方式主要是follow和私信,目前对这方便的限制非常的小,用户可以说是还没有经过营销号的洗礼。所以目前是进去这个池子比较好的一个时机。
搞这个东西还是比较麻烦的,因为这个apk限制了只能在安卓9.0以后的系统使用,当然拿到协议就可以随便模拟,代码阉割掉了一些非必要的功能
.版本 2
.支持库 spec
.程序集 clubhouse
.程序集变量 http, WinHttpW
.程序集变量 scookies, 文本型
.程序集变量 user, userclubhouse
.子程序 _初始化, , , 当基于本类的对象被创建后,此方法会被自动调用
.子程序 _销毁, , , 当基于本类的对象被销毁前,此方法会被自动调用
.子程序 setheader
.参数 token, 文本型, 可空
.参数 userid, 文本型, 可空
.参数 deviceid, 文本型, 可空
.参数 Cookie, 文本型, 可空
.参数 Sessionid, 文本型, 可空
.局部变量 随机数, 整数型
.局部变量 随机数2, 双精度小数型
http.SetRequestHeader (“CH-Languages”, “en-US”, )
http.SetRequestHeader (“CH-Locale”, “en_US”, )
http.SetRequestHeader (“Accept”, “application/json”, )
http.SetAcceptLanguage (“en-US;q=1, ja-JP;q=0.9”)
http.SetRequestHeader (“Accept-Encoding”, “gzip, deflate”, )
http.SetRequestHeader (“CH-Keyboards”, “en_US”, )
http.SetRequestHeader (“CH-AppBuild”, “3389”, )
http.SetRequestHeader (“CH-AppVersion”, “1.0.1”, )
http.SetRequestHeader (“Accept-Language”, “zh-Hans-CN;q=1”, )
http.SetUserAgent (“clubhouse/android/3389”)
http.SetRequestHeader (“Connection”, “keep-alive”, )
http.SetContentType (“application/json; charset=utf-8”)
.如果真 (Sessionid ≠ “”)
http.SetRequestHeader (“CH-Session-Id”, 到大写 (Sessionid), )
.如果真结束
.如果真 (token ≠ “”)
http.SetRequestHeader (“Authorization”, “Token ” + token, )
.如果真结束
.如果真 (userid ≠ “”)
http.SetRequestHeader (“CH-UserID”, userid, )
.如果真结束
.如果真 (deviceid ≠ “”)
http.SetRequestHeader (“CH-DeviceId”, 到大写 (deviceid), )
.如果真结束
' http.SetRequestHeader (“Cookie”, scookies, )
.' 如果真 (Cookie ≠ “”)
' http.SetRequestHeader (“Cookie”, Cookie, )
.如果真结束
.子程序 setproxy, , 公开
.参数 ipaddress, 文本型
.参数 user, 文本型, 可空
.参数 pass, 文本型, 可空
http.SetRedirect (真)
http.SetTimeouts (5000, 5000, 5000, 10000)
http.SetProxy (ipaddress, user, pass)
.子程序 start_phone_number_auth, 逻辑型, 公开
.参数 phonenumber, 文本型
.局部变量 data, 文本型
.局部变量 ret, 文本型
.局部变量 retcookies, 文本型
http.Open (“post”, “https://www.clubhouseapi.com/api/start_phone_number_auth”)
http.SetCookie (retcookies)
setheader ()
data = “{” + #引号 + “phone_number” + #引号 + “: ” + #引号 + phonenumber + #引号 + “}”
调试输出 (data)
http.Send (data, , )
scookies = http.GetAllResponseCookies ()
scookies = 网页_Cookie合并更新 (retcookies, scookies)
调试输出 (scookies)
ret = 到文本 (网页_GZIP解压 (http.GetResponseBody ())) ' 输出 返回文本
调试输出 (ret)
.如果 (寻找文本 (ret, “true”, , 假) ≠ -1)
返回 (真)
.否则
返回 (假)
.如果结束
.子程序 complete_phone_number_auth, 逻辑型, 公开
.参数 phonenumber, 文本型
.参数 smscode, 文本型
.参数 RETs, 文本型, 参考 可空
.参数 cookies, 文本型, 参考 可空
.局部变量 data, 文本型
.局部变量 ret, 文本型
.局部变量 retcookies, 文本型
.局部变量 zjjjg, 字节集
http.Open (“post”, “https://www.clubhouseapi.com/api/complete_phone_number_auth”)
http.SetCookie (scookies)
setheader ()
data = 子文本替换 (#logindata, “#phone#”, phonenumber, , , 真)
data = 子文本替换 (data, “#sms#”, smscode, , , 真)
' 调试输出 (data)
http.Send (data, , )
retcookies = http.GetAllResponseCookies ()
scookies = 网页_Cookie合并更新 (scookies, retcookies)
cookies = scookies
调试输出 (http.GetStatusText ())
ret = 到文本 (网页_GZIP解压 (http.GetResponseBody ()))
调试输出 (ret)
.如果 (寻找文本 (ret, “true”, , 假) ≠ -1)
RETs = ret
返回 (真)
.否则
返回 (假)
.如果结束
.子程序 call_phone_number_auth, 逻辑型, 公开
.参数 phonenumber, 文本型
.局部变量 data, 文本型
.局部变量 ret, 文本型
.局部变量 retcookies, 文本型
http.Open (“post”, “https://www.clubhouseapi.com/api/call_phone_number_auth”)
http.SetCookie (scookies)
setheader ()
data = “{” + #引号 + “phone_number” + #引号 + “: ” + #引号 + phonenumber + #引号 + “}”
http.Send (data, , )
retcookies = http.GetAllResponseCookies ()
scookies = 网页_Cookie合并更新 (scookies, retcookies)
调试输出 (scookies)
' 调试输出 (http.GetStatusText ())
ret = http.GetResponseText () ' 输出 返回文本
调试输出 (ret)
.如果 (寻找文本 (ret, “true”, , 假) ≠ -1)
返回 (真)
.否则
返回 (假)
.如果结束
.子程序 resend_phone_number_auth, 逻辑型, 公开
.参数 phonenumber, 文本型
.局部变量 data, 文本型
.局部变量 ret, 文本型
.局部变量 retcookies, 文本型
http.Open (“post”, “https://www.clubhouseapi.com/api/call_phone_number_auth”)
http.SetCookie (scookies)
setheader ()
data = “{” + #引号 + “phone_number” + #引号 + “: ” + #引号 + phonenumber + #引号 + “}”
http.Send (data, , )
retcookies = http.GetAllResponseCookies ()
scookies = 网页_Cookie合并更新 (scookies, retcookies)
调试输出 (scookies)
调试输出 (http.GetStatusText ())
ret = http.GetResponseText () ' 输出 返回文本
调试输出 (ret)
.如果 (寻找文本 (ret, “true”, , 假) ≠ -1)
返回 (真)
.否则
返回 (假)
.如果结束