如何解码体育博彩API返回的编码字符串并转换赔率数值?
体育博彩API编码数据提取方案(Python实现)
已知信息整理
- 待解码的Base64编码字符串:
CoEECv4DCvsDCgwKAjEyEgZGb3RiYWwYvwYi5wMKGAoDeDQ0Eg1NZXppbsOhcm9kbsOtGgIxMhLKAwrHAwoGeHgxMjc4EhhLdmFsaWZpa2FjZSBNUywgQ09OTUVCT0waA3g0NCqdAwjUt4wBEhVWZW5lenVlbGEgLSBBcmdlbnRpbmEiBwiAq6TFpzIqCDUzNjI0NjQ5Mt4CCDsSDkhsYXZuw60gc8Ohemt5GmoKCzJkMjIzNTI4MzQ5EgZaw6FwYXMyTwidi8tqEgZaw6FwYXMYkF8iEwoJNDg4Mzg5ODMyEgExHdejsEAiEwoJNDg4Mzg5ODMzEgEwHSlcf0AiEwoJNDg4Mzg5ODM0EgEyHbgexT9YAmACGm8KCzNkMjIzNTI4MzUwEgdEdm9qdGlwMlMInovLahIHRHZvanRpcBiSXyIUCgk0ODgzODk4MjgSAjEwHR+FC0AiFAoJNDg4Mzg5ODI5EgIxMh1I4Zo/IhQKCTQ4ODM4OTgzMBICMDIdheuRP1gBYAIabQoLNGQyMjM1MjgzNTESElPDoXprYSBiZXogcmVtw616eTJGCJ+Ly2oSElPDoXprYSBiZXogcmVtw616eRiTXyITCgk0ODgzODk4MzESATEdcT16QCITCgk0ODgzODk4MzUSATIdmpmZP1gBYAI6Bnh4MTI3OFADYL8G
- 解码流程:Base64解码 → Protobuf解码 → 赔率数值转换
- 赔率数值与十进制映射示例:
1085318103 = 5.52 1082088489 = 3.99 1069883064 = 1.54 1074496799 = 2.18 1067114824 = 1.21 1066527621 = 1.14 1081752945 = 3.91 1067030938 = 1.20
- 关联接口:GetWebStandardEvents、GetWebStandardEventExt
Python实现步骤
1. 安装依赖
需要protobuf库,直接通过pip安装:
pip install protobuf
2. Base64解码
使用Python内置base64模块完成解码:
import base64 encoded_str = "CoEECv4DCvsDCgwKAjEyEgZGb3RiYWwYvwYi5wMKGAoDeDQ0Eg1NZXppbsOhcm9kbsOtGgIxMhLKAwrHAwoGeHgxMjc4EhhLdmFsaWZpa2FjZSBNUywgQ09OTUVCT0waA3g0NCqdAwjUt4wBEhVWZW5lenVlbGEgLSBBcmdlbnRpbmEiBwiAq6TFpzIqCDUzNjI0NjQ5Mt4CCDsSDkhsYXZuw60gc8Ohemt5GmoKCzJkMjIzNTI4MzQ5EgZaw6FwYXMyTwidi8tqEgZaw6FwYXMYkF8iEwoJNDg4Mzg5ODMyEgExHdejsEAiEwoJNDg4Mzg5ODMzEgEwHSlcf0AiEwoJNDg4Mzg5ODM0EgEyHbgexT9YAmACGm8KCzNkMjIzNTI4MzUwEgdEdm9qdGlwMlMInovLahIHRHZvanRpcBiSXyIUCgk0ODgzODk4MjgSAjEwHR+FC0AiFAoJNDg4Mzg5ODI5EgIxMh1I4Zo/IhQKCTQ4ODM4OTgzMBICMDIdheuRP1gBYAIabQoLNGQyMjM1MjgzNTESElPDoXprYSBiZXogcmVtw616eTJGCJ+Ly2oSElPDoXprYSBiZXogcmVtw616eRiTXyITCgk0ODgzODk4MzESATEdcT16QCITCgk0ODgzODk4MzUSATIdmpmZP1gBYAI6Bnh4MTI3OFADYL8G" binary_data = base64.b64decode(encoded_str)
3. Protobuf解码
核心是获取正确的Protobuf定义文件(.proto),可通过分析接口响应结构或反编译二进制数据生成。假设已得到SportsBetting.proto,先编译为Python类:
protoc --python_out=. SportsBetting.proto
加载生成的类并解码二进制数据:
# 替换为实际生成的Protobuf类名 from SportsBetting_pb2 import WebStandardEvent event_data = WebStandardEvent() event_data.ParseFromString(binary_data)
4. 赔率数值转换
先基于示例做映射表,后续可通过更多样本推导精确公式:
def convert_odds(numeric_odds): odds_mapping = { 1085318103: 5.52, 1082088489: 3.99, 1069883064: 1.54, 1074496799: 2.18, 1067114824: 1.21, 1066527621: 1.14, 1081752945: 3.91, 1067030938: 1.20 } # 临时公式,可根据更多样本优化 return odds_mapping.get(numeric_odds, round((numeric_odds - 1073741824)/100000000 + 2, 2))
5. 提取并格式化数据
根据Protobuf结构提取赛事和赔率信息(需替换为实际字段名):
def extract_event_info(event): result = { "赛事名称": event.event_name, "赛事时间": event.event_time, "赔率详情": [] } for odd in event.odds: result["赔率详情"].append({ "投注选项": odd.option_label, "原始数值": odd.odds_value, "转换后赔率": convert_odds(odd.odds_value) }) return result # 执行提取 final_result = extract_event_info(event_data) print(final_result)
关键提示
- Protobuf定义是核心:如果没有官方
.proto文件,可以用工具反编译二进制数据生成,或者分析接口返回的结构化数据反向推导字段结构。 - 赔率公式优化:收集更多数值-赔率对,用线性回归等方法计算精确转换逻辑,替换临时公式。
- 合规性:使用私有API需遵守网站服务条款,避免违规操作。
内容的提问来源于stack exchange,提问作者Gebic
相关产品推荐
相关产品推荐

