Commit eab09f01 authored by 邓莹莹's avatar 邓莹莹

Initial commit

parents
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
.idea
# mkdocs documentation
/site
# mypy
.mypy_cache/
host.yaml
.DS_Store
*/.DS_Store
\ No newline at end of file
FROM ccr.ccs.tencentyun.com/gm-base/py3.8:v1.0
COPY ./requirements.txt /tmp
WORKDIR /srv/apps/backend_auto/
RUN apk add --no-cache --virtual .build-deps \
bzip2-dev \
coreutils \
dpkg-dev dpkg \
expat-dev \
findutils \
gcc \
gdbm-dev \
libc-dev \
libffi-dev \
libnsl-dev \
libressl-dev \
libtirpc-dev \
linux-headers \
make \
ncurses-dev \
pax-utils \
readline-dev \
sqlite-dev \
tcl-dev \
tk \
tk-dev \
xz-dev \
zlib-dev \
# 业务相关依赖和安装工具
linux-headers \
python-dev \
# librdkafka-dev=0.11.6-r1 \
mariadb-client \
mariadb-dev \
git \
openssh \
\
# 取消ssh第一次链接的确认
&& echo "StrictHostKeyChecking no" >> /etc/ssh/ssh_config \
# && pip install six verlib \
&& pip install --no-cache-dir -r /tmp/requirements.txt
COPY . /srv/apps/backend_auto/
# 先这样 最好用环境变量 如果配置变多后 再挂载
RUN apk add curl && apk del .build-deps && echo "develop_host:" > host.yaml && echo " url: http://backend-service" >> host.yaml
# 代码里有写死的 backend_auto
WORKDIR /srv/apps/backend_auto/
CMD python run.py
\ No newline at end of file
@Library('gm-pipeline-library') _
pipeline {
agent any
options {
// Console output add timestamps
timestamps()
// Disallow concurrent executions of the Pipeline
disableConcurrentBuilds()
// On failure, retry the entire Pipeline the specified number of times.
retry(1)
}
parameters {
choice(name: 'CACHE', choices: ['', '--no-cache'], description: 'docker build 是否使用cache,默认使用,不使用为--no-cache')
}
environment {
// Image Tag branch.time.hash
TAG = dockerTag()
// Image Full Tag
IMAGE = "${DOCKER_REGISTRY}/gm-backend/autotest-backend:$TAG"
ALIAS = "${DOCKER_REGISTRY}/gm-backend/autotest-backend:v1.0.0"
}
stages {
stage("Begin") {
steps {
dingNotify "before"
}
}
stage('Build Image') {
steps {
sh "docker build . ${params.CACHE} -t $IMAGE -f ./Dockerfile"
sh "docker push $IMAGE"
sh "docker tag $IMAGE $ALIAS && docker push $ALIAS"
}
}
}
post {
always {
dingNotify "after", "${currentBuild.currentResult}"
}
}
}
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class account_request(BaseRequest):
def __init__(self):
self.loginvfc = self.api_load(path_setting.APYAML_CONFIG)
def login_vfc(self,current_city_id,phone_num,vfc_code,vfc_type="",face_token=""):
self.params["current_city_id"] = current_city_id
self.params["phone_num"] = phone_num
self.params["vfc_code"] = vfc_code
self.params["vfc_type"] = vfc_type
self.params["face_token"] = face_token
return self.api_send(self.loginvfc["login_vfc"])
if __name__ == '__main__':
# print(account_request().user_info())
print(account_request.loginvfc(""))
\ No newline at end of file
login_vfc:
method: post
url: /api/account/login/login_vfc
params:
current_city_id: ${current_city_id}
data:
phone_num: ${phone_num}
vfc_code: ${vfc_code}
vfc_type: ${vfc_type}
face_token: ${face_token}
json: {}
isLogin: 1 #需要登录添加这个字段,值为1 0是不需要登录的情况,如不需要登录,可以不添加这个字段
import path_setting
from in_common.base_request import BaseRequest
import pytest
class send_reqest(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.LOGIN_CONFIG)
print(self.data)
def login_passwd(self,current_city_id,phone,password,face_token=""):
self.params["current_city_id"] = current_city_id
self.params["phone"] = phone
self.params["password"] = password
self.params["face_token"] = face_token
return self.api_send(self.data["password"])
if __name__ == '__main__':
print(send_reqest().login_passwd("beijing", "17796839512", 123456, ""))
password:
method: post
url: /api/accounts/login/password
params:
current_city_id: ${current_city_id}
data:
phone: ${phone}
password: ${password}
face_token: ${face_token}
json: {}
import path_setting
from in_common.base_request import BaseRequest
class answer_request(BaseRequest):
def __init__(self):
self.abc = self.api_load(path_setting.DETAIL_CONFIG)
# print(self.abc)
# 回答详情页
def detail(self, current_city_id, answer_id=""):
self.params["current_city_id"] = current_city_id
self.params["answer_id"] = answer_id
return self.api_send(self.abc["detail"])
# 回答详情页点赞
def vote(self, answer_id=""):
self.params["answer_id"] = answer_id
return self.api_send(self.abc["vote"])
# 回答详情页取消点赞
def cancel_vote(self, answer_id=""):
self.params["answer_id"] = answer_id
return self.api_send(self.abc["cancel_vote"])
#回答详情页
detail:
method: get
url: /api/answer/detail
params:
current_city_id: ${current_city_id}
data:
answer_id: ${answer_id}
json: {}
# isLogin: 1 #需要登录添加这个字段,值为1 0是不需要登录的情况,如不需要登录,可以不添加这个字段
#回答详情页——点赞
vote:
method: post
url: /api/answer/vote
params:
current_city_id: ${current_city_id}
data:
answer_id: ${answer_id}
json: {}
isLogin: 1
#回答详情页——取消点赞
cancel_vote:
method: post
url: /api/answer/cancel_vote
params:
current_city_id: ${current_city_id}
data:
answer_id: ${answer_id}
json: {}
isLogin: 1
import path_setting
from in_common.base_request import BaseRequest
class common_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.DIARY_COMMON_CONFIG)
# 日记贴评论列表--一级评论列表
def diary_common_reply(self, id, type):
self.params["id"] = id
self.params["type"] = type
return self.api_send(self.data["reply_detail"])
# 日记贴评论列表--二级评论
def topic_sub_common(self, id, type, reply_id):
self.params["id"] = id
self.params["type"] = type
self.params["reply_id"] = reply_id
return self.api_send(self.data["sub_common"])
#日记本的评论列表---一级评论列表
reply_detail:
method: get
url: /api/common/reply
params:
id: ${id}
type: ${type}
data: {}
json: {}
isLogin: 0 #需要登录添加这个字段,值为1 0是不需要登录的情况,如不需要登录,可以不添加这个字段
#日记本列表--日记贴--二级评论列表
sub_common:
method: get
url: /api/common/reply/sub_reply
params:
id: ${id}
type: ${type}
reply_id: ${reply_id}
data: {}
json: {}
isLogin: 0 #需要登录添加这个字段,值为1 0是不需要登录的情况,如不需要登录,可以不添加这个字段
import path_setting
from in_common.base_request import BaseRequest
class conversation_request(BaseRequest):
def __init__(self):
self.messageread = self.api_load(path_setting.MESSAGE_READ_CONFIG)
def message_read(self,current_city_id,release,message_ids):
self.params["current_city_id"] = current_city_id
self.params["release"] = release
#self.params["uqid"] = uqid
self.params["message_ids"] = message_ids
return self.api_send(self.messageread["message_read"])
def detail_messageid(self, os_version, last_msg_id, offset_msg_id):
self.params["os_version"] = os_version
self.params["last_msg_id"] = last_msg_id
self.params["offset_msg_id"] = offset_msg_id
return self.api_send(self.messageread["detail_messageid"])
if __name__ == '__main__':
print(conversation_request().message_read("beijing", 1,'[10622,10626,10646,10651]'))
print(conversation_request().detail_messageid(10, 0, 0))
message_read:
method: post
url: /api/conversation/message/read
params:
current_city_id: ${current_city_id}
release: ${release}
#uqid: ${uqid}
data:
message_ids: ${message_ids}
json: {}
isLogin: 1 #需要登录的接口
detail_messageid:
method: get
url: /api/conversation/detail/602329_33910245/
params:
os_version: ${os_version}
last_msg_id: ${last_msg_id}
offset_msg_id: ${offset_msg_id}
data: {}
json: {}
isLogin: 1 #需要登录的接口
import path_setting
from in_common.base_request import BaseRequest
class diary_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.DIARY_CONFIG)
# 收藏
def diary_isfavor(self):
return self.api_send(self.data["isfavor"])
# 取消收藏
def diary_cancelfavor(self):
return self.api_send(self.data["cancelfavor"])
# 更新日记本
def diary_operation(self, diary_id, title, operation_timestamp, doctor_name, hospital_name):
self.params["diary_id"] = diary_id
self.params["title"] = title
self.params["operation_timestamp"] = operation_timestamp
self.params["doctor_name"] = doctor_name
self.params["hospital_name"] = hospital_name
return self.api_send(self.data["operation"])
# 添加信息--待争议
def diary_additional_info(self):
return self.api_send(self.data["operation"])
# 详情页-内容
def diary_data(self, current_city_id, diary_referrer, sort, count , start_num):
self.params["current_city_id"] = current_city_id
self.params["diary_referrer"] = diary_referrer
self.params["sort"] = sort
self.params["count"] = count
self.params["start_num"] = start_num
return self.api_send(self.data["diary_data"])
# 日记本美购相关
def diary_service(self, diary_id, service_id):
self.params["diary_id"] = diary_id
self.params["service_id"] = service_id
return self.api_send(self.data["diary_service"])
# 日记更新
def diary_update(self, topic_list):
self.params["topic_list"] = topic_list
return self.api_send(self.data["update"])
#日记本收藏
isfavor:
method: post
url: /api/diary/favor/17586195
params:
data: {}
json: {}
isLogin: 1 #需要登录添加这个字段,值为1 0是不需要登录的情况,如不需要登录,可以不添加这个字段
#日记本取消收藏
cancelfavor:
method: delete
url: /api/diary/favor/17586195
params:
data: {}
json: {}
isLogin: 1 #需要登录添加这个字段,值为1 0是不需要登录的情况,如不需要登录,可以不添加这个字段
#
#日记本修改信息
operation:
method: post
url: /api/diary/additional_info/v2
params:
data:
diary_id: ${diary_id}
title: ${title}
operation_timestamp: ${operation_timestamp}
doctor_name: ${doctor_name}
hospital_name: ${hospital_name}
json: {}
isLogin: 1 #需要登录添加这个字段,值为1 0是不需要登录的情况,如不需要登录,可以不添加这个字段
#查看日记修改信息页面
additional_info:
method: get
url: /api/diary/operation/17586198/
params:
data: {}
json: {}
isLogin: 1 #需要登录添加这个字段,值为1 0是不需要登录的情况,如不需要登录,可以不添加这个字段
#详情页内容
diary_data:
method: get
url: /api/diary/topic/15261339/_data
params:
current_city_id: ${current_city_id}
diary_referrer: ${diary_referrer}
sort: ${sort}
count: ${count}
start_num: ${start_num}
data:
json: {}
#美购相关
diary_service:
method: get
url: /api/diary/services
params:
diary_id: ${diary_id}
service_id: ${service_id}
data:
json: {}
#更新日记本的修改信息
update:
method: post
url: /api/diary/update_v2/17586198
params:
data:
topic_list: ${topic_list}
json: {}
isLogin: 1 #需要登录添加这个字段,值为1 0是不需要登录的情况,如不需要登录,可以不添加这个字段
import path_setting
from in_common.base_request import BaseRequest
class doctor_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.DOCTOR_ARTICLE_CONFIG)
#医生/医院主页-医生说/医院说列表
def article(self, doctor_id):
self.params["doctor_id"] = doctor_id
return self.api_send(self.data["article"])
#医生主页详情
def detail(self):
return self.api_send(self.data["detail"])
#医生主页案例列表
def diary(self, doctor_id):
self.params["doctor_id"] = doctor_id
return self.api_send(self.data["diary"])
if __name__ == '__main__':
#打印医生/医院主页-医生说/医院说列表接口返回
print(doctor_request().article("9918ad7eb8f511e58f8200163e000a4a"))
#打印医生主页详情接口返回
print(doctor_request.detail())
#打印医生主页案例列表接口返回
print(doctor_request.diary("5bd9f05cad51403d853ba8c881989e23"))
\ No newline at end of file
#医生/医院主页——医生说/医院说
article:
method: get
url: /api/doctor/article
params:
doctor_id: ${doctor_id}
count: 10
page: 1
own_page: 0
doctor_type: 0
data: {}
json: {}
#医生主页详情
detail:
method: get
url: /api/doctor/5bd9f05cad51403d853ba8c881989e23/detail
params: {}
data: {}
json: {}
#医生主页案例列表
diary:
method: get
url: /api/doctor/diary
params:
doctor_id: ${doctor_id}
count: 4
page: 1
data: {}
json: {}
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class doctor_v2_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.DOCTOR_V2_CONFIG)
#医生主页商品列表
def services(self):
return self.api_send(self.data["services"])
if __name__ == '__main__':
#打印医生主页商品列表接口返回
print(doctor_v2_request().services())
\ No newline at end of file
#医生主页商品列表
services:
method: get
url: /api/doctor_v2/5bd9f05cad51403d853ba8c881989e23/services
params:
offset: 0
show_tag_distro: 1
tag_id: all
size: 10
data: {}
json: {}
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class eyelids_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.EYELIDS_DIARY_CARDS_CONFIG)
# 模拟整形,双眼皮,发型,美瞳,眉毛推荐日记
def diary_cards(self,current_city_id,page,page_size,tag_names):
self.params["current_city_id"] = current_city_id
self.params["page"] = page
self.params["page_size"] = page_size
self.params["tag_names"] = tag_names
return self.api_send(self.data["diary_cards"])
if __name__ == '__main__':
tag_names = '["埋线双眼皮","定点双眼皮","切开双眼皮"]'
print(eyelids_request().diary_cards("beijing","1","10",tag_names))
\ No newline at end of file
diary_cards:
method: get
url: /api/eyelids/diary_cards
params:
current_city_id: ${current_city_id}
page: ${page}
page_size: ${page_size}
tag_names: ${tag_names}
import path_setting
from in_common.base_request import BaseRequest
class face_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.FACE_DIARY_CARDS_CONFIG)
# 根据多个标签推荐日记
def diarys_cards(self,facial_type2tag_names):
self.params["facial_type2tag_names"] = facial_type2tag_names
return self.api_send(self.data["face_diarys"])
# 3D 底部feed流
def plastic_feeds(self, tag_id, face_id, tag_id_list, page_size, version):
self.params["tag_id"] = tag_id
self.params["face_id"] = face_id
self.params["tag_id_list"] = tag_id_list
self.params["page_size"] = page_size
self.params["version"] = version
return self.api_send(self.data["plastic_feeds"])
if __name__ == '__main__':
# facial_type2tag_names = '{"2":["玻尿酸垫下巴","自体脂肪垫下巴"],"3":["半永久纹眉","植眉"]}'
# print(face_request().diarys_cards(facial_type2tag_names))
print(face_request().plastic_feeds('2371,2372,2247,3032,2274,2277,2242,2348,2597,2318,2551,2341,2389', 9,
'[[845, 498, 497, 494], [880, 484, 3254], [276], [1070, 373, 372, 350], [494, 315], [1293, 1050], [284, 282], [254, 251], [1000, 494, 312], [295, 272, 253], [1376, 1365, 1088, 892, 395, 385], [427, 327], [3214, 1377, 1306, 1051, 327, 229]]', 10, "7.44.0"))
\ No newline at end of file
face_diarys:
method: get
url: /api/face/diary/cards
params:
facial_type2tag_names: ${facial_type2tag_names}
plastic_feeds:
method: get
url: /api/face/plastic/feeds
params:
tag_id: ${tag_id}
face_id: ${face_id}
tag_id_list: ${tag_id_list}
page_size: ${page_size}
version: ${version}
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class feed_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.FEED_INDEXV9_CONFIG)
self.data = self.api_load(path_setting.CONFIG_LIST_CONFIG)
self.data = self.api_load(path_setting.COMMUNITY_CONFIG)
self.data = self.api_load(path_setting.FREE_RECRUIT_BANNER_CONFIG)
def index_v9(self,tabtype,version,current_city_id):
self.params["tabtype"] = tabtype
self.params["version"] = version
self.params["current_city_id"] = current_city_id
return self.api_send(self.data["index_v9"])
#社区tab页签到和招募活动列表
def config_list(self,version):
self.params["version"] = version
return self.api_send(self.data["config_list"])
# 社区tab页feed流
def community(self, version, tabtype, tags_id, tab_id):
self.params["version"] = version
self.params["tabtype"] = tabtype
self.params["tags_id"] = tags_id
self.params["tab_id"] = tab_id
return self.api_send(self.data["community"])
# 免费招募列表的背景图片
def free_recruit_banner(self, version, json):
self.params["version"] = version
self.params["json"] = json
return self.api_send(self.data["free_recruit_banner"])
# 免费招募列表
def free_recruit_list(self, version, json, tab_type, page, size):
self.params["version"] = version
self.params["json"] = json
self.params["tab_type"] = tab_type
self.params["page"] = page
self.params["size"] = size
return self.api_send(self.data["free_recruit_list"])
if __name__ == '__main__':
print(feed_request().index_v9("choice", "7.42.2", "beijing"))
#社区tab页签到和招募活动列表
print(feed_request().config_list("7.44.0"))
#免费招募列表背景图片
print(feed_request().free_recruit_banner("7.44.1", " "))
# 免费招募列表
print(feed_request().free_recruit_list("7.44.1", " ", "1", "1", "10"))
\ No newline at end of file
index_v9:
method: get
url: /api/feed/index/v9
params:
tabtype: ${tabtype}
version: ${version}
current_city_id: ${current_city_id}
data:
json: {}
isLogin: 1
#社区tab签到和招募活动列表
config_list:
method: get
url: /api/feed/community_activity/config_list
params:
version: ${version}
data:
json: {}
isLogin: 1
#社区tab页feed流
community:
method: get
url: /api/feed/index/community
params:
version: ${version}
tabtype: choice
tags_id: []
tab_id: 0
data:
json: {}
isLogin: 1
#招募活动列表背景图片
free_recruit_banner:
method: get
url: /api/feed/free_recruit/free_recruit_banner
params:
version: ${version}
json: ${json}
data:
json: { }
isLogin: 1
#招募活动列表
free_recruit_list:
method: get
url: /api/feed/free_recruit/list
params:
version: ${version}
json: ${json}
tab_type: ${tab_type}
page: ${page}
size: ${size}
data:
json: { }
isLogin: 1
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class filter_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.FILTER_CONFIG)
def service_home_city_v2(self, current_city_id, lat, lng):
print("fgx")
self.params["current_city_id"] = current_city_id
self.params["lat"] = lat
self.params["lng"] = lng
return self.api_send(self.data["service_home_city_v2"])
if __name__ == '__main__':
#城市筛选器
print(filter_request().service_home_city_v2("", "40.002", "116.487252"))
print("fgx")
service_home_city_v2:
method: GET
url: /api/filter/service_home_city_v2
params:
current_city_id: ${current_city_id}
lat: ${lat}
lng: ${lng}
data: {}
json: {}
import path_setting
from in_common.base_request import BaseRequest
class gmai_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.GMAI_SKIN_NEWREPORT_CONFIG)
# 测颜值结果页
def skin_newReport(self,version,image_url):
self.params["version"] = version
self.params["image_url"] = image_url
return self.api_send(self.data["skin_newReport"])
# 模拟双眼皮
def eyelids_plastic(self,version,image_url,style_id):
self.params["version"] = version
self.params["image_url"] = image_url
self.params["style_id"] = style_id
return self.api_send(self.data["eyelids_plastic"])
# 模拟发型,眉毛,美瞳效果
def simulate_analyze(self,device_id,image_url,style_id,type_id):
self.params["device_id"] = device_id
self.params["image_url"] = image_url
self.params["style_id"] = style_id
self.params["type_id"] = type_id
return self.api_send(self.data["simulate_analyze"])
# AI测颜值及对应评价内容
def plastic_analysis_v3(self,device_id,image_url,landmark,cheek_style_classify_id):
self.params["device_id"] = device_id
self.params["image_url"] = image_url
self.params["landmark"] = landmark
self.params["cheek_style_classify_id"] = cheek_style_classify_id
return self.api_send(self.data["analysis_v3"])
# 获取模拟配置文件(发型,美瞳,眉毛,双眼皮)
def simulate_conf(self,type_id):
self.params["type_id"] = type_id
return self.api_send(self.data["simulate_conf"])
# 3D整形获取风格脸信息,并且对应的评价内容
def plastic_analystic_v2(self,device_id,image_url,landmark,cheek_style_classify_id):
self.params["device_id"] = device_id
self.params["image_url"] = image_url
self.params["landmark"] = landmark
self.params["cheek_style_classify_id"] = cheek_style_classify_id
return self.api_send(self.data["plastic_analystic_v2"])
# 获取3D变脸风格参数
def plastic_cheek_style_classify(self,version):
self.params["version"] = version
return self.api_send(self.data["plastic_cheek_style_classify"])
# 验证用户之前是否使用过测肤质,绑定用户
def skin_user_had_test(self,device_id):
self.params["device_id"] = device_id
return self.api_send(self.data["skin_user_had_test"])
if __name__ == '__main__':
print(gmai_request().skin_user_had_test("androidid_7255c3398845cdd5"))
# print(gmai_request().plastic_cheek_style_classify("7.44.0"))
# landmark = '[{"x":168.96603,"y":496.76886},{"x":168.35735,"y":527.7101},{"x":169.548,"y":558.3961},{"x":171.72018,"y":588.8369},{"x":174.93307,"y":619.26794},{"x":179.31195,"y":649.03467},{"x":184.17123,"y":678.6978},{"x":191.05627,"y":707.8003},{"x":200.86497,"y":735.76196},{"x":214.62796,"y":761.79736},{"x":231.40042,"y":785.7622},{"x":250.59685,"y":807.22406},{"x":272.07196,"y":826.8049},{"x":295.4251,"y":843.86194},{"x":321.47278,"y":856.83124},{"x":349.9967,"y":864.5885},{"x":379.85767,"y":866.998},{"x":409.25287,"y":865.863},{"x":437.7829,"y":859.18054},{"x":463.35132,"y":846.88574},{"x":486.354,"y":830.38916},{"x":507.7304,"y":811.95135},{"x":527.778,"y":791.59247},{"x":545.7143,"y":769.32104},{"x":561.4353,"y":745.4949},{"x":573.70917,"y":719.9794},{"x":583.3716,"y":690.47156},{"x":591.3898,"y":660.6565},{"x":598.52515,"y":631.38513},{"x":604.5137,"y":601.75684},{"x":609.14844,"y":572.0621},{"x":612.0713,"y":541.85956},{"x":613.5779,"y":511.5329},{"x":203.42625,"y":444.83066},{"x":229.21182,"y":410.30188},{"x":270.9198,"y":399.64984},{"x":313.56497,"y":407.32513},{"x":354.0185,"y":422.54175},{"x":441.31384,"y":427.71216},{"x":482.0569,"y":416.21152},{"x":524.1508,"y":412.38593},{"x":563.6658,"y":426.22824},{"x":585.87964,"y":462.41913},{"x":394.46844,"y":504.41254},{"x":393.96762,"y":546.5007},{"x":393.30322,"y":588.8532},{"x":392.592,"y":631.0979},{"x":342.77267,"y":664.1739},{"x":364.95947,"y":668.7595},{"x":390.1893,"y":673.2006},{"x":415.25336,"y":670.5106},{"x":436.7552,"y":666.998},{"x":242.81853,"y":506.60803},{"x":262.98138,"y":497.55713},{"x":305.08954,"y":499.77777},{"x":321.22906,"y":513.3391},{"x":301.56146,"y":521.4862},{"x":260.00668,"y":519.3686},{"x":462.97388,"y":517.84485},{"x":480.18396,"y":505.8437},{"x":522.09973,"y":506.45386},{"x":540.26013,"y":517.4052},{"x":523.0011,"y":528.3126},{"x":482.06146,"y":527.1489},{"x":239.75659,"y":436.6534},{"x":277.67075,"y":433.85788},{"x":315.04602,"y":438.8376},{"x":351.56638,"y":447.66888},{"x":441.58453,"y":452.58017},{"x":477.96664,"y":447.28973},{"x":515.05225,"y":445.83618},{"x":551.5746,"y":451.62656},{"x":284.38373,"y":496.0074},{"x":280.49805,"y":523.8891},{"x":284.44955,"y":508.43988},{"x":501.19617,"y":503.6411},{"x":502.51047,"y":530.9885},{"x":501.47836,"y":515.5879},{"x":357.51913,"y":508.84628},{"x":428.91504,"y":511.1767},{"x":341.02893,"y":607.7458},{"x":442.021,"y":610.8187},{"x":324.796,"y":641.13324},{"x":456.35925,"y":645.5844},{"x":304.6747,"y":728.90186},{"x":334.5838,"y":715.599},{"x":369.0162,"y":710.4512},{"x":390.31683,"y":714.9321},{"x":411.64032,"y":711.3696},{"x":445.83594,"y":718.7887},{"x":474.80075,"y":735.1745},{"x":451.05292,"y":753.0734},{"x":421.3767,"y":761.7219},{"x":390.41638,"y":763.2075},{"x":358.4326,"y":759.44385},{"x":328.53287,"y":748.5295},{"x":311.38818,"y":729.83777},{"x":350.23193,"y":734.1919},{"x":390.38123,"y":737.72284},{"x":429.7071,"y":736.18054},{"x":468.49692,"y":735.4535},{"x":430.71494,"y":739.61053},{"x":391.11005,"y":741.01697},{"x":349.98578,"y":737.08875},{"x":284.5382,"y":508.54742},{"x":501.50644,"y":515.53107}]'
# print(gmai_request().plastic_analystic_v2("869412032478155", "2021/06/01/1524/8a28dd0a3b8e",landmark,1))
# print(gmai_request().simulate_conf("-1"))
# print(gmai_request().simulate_analyze("869412032478155","2021/06/02/1456/68c702f50309","3","7"))
# landmark = '[{"x":248.60858,"y":454.0434},{"x":247.92863,"y":476.7021},{"x":248.8779,"y":499.36874},{"x":251.12755,"y":521.8638},{"x":254.58401,"y":544.24164},{"x":259.10333,"y":566.1669},{"x":264.02515,"y":588.0588},{"x":270.59506,"y":609.44214},{"x":279.6361,"y":629.6998},{"x":291.60773,"y":648.29407},{"x":305.6806,"y":665.26465},{"x":321.33615,"y":680.4736},{"x":338.2943,"y":694.64526},{"x":356.13144,"y":707.5386},{"x":375.71283,"y":717.8617},{"x":397.27545,"y":724.19965},{"x":419.9613,"y":726.1914},{"x":441.62817,"y":725.2733},{"x":462.6242,"y":719.917},{"x":481.41635,"y":710.3818},{"x":498.45187,"y":697.98035},{"x":514.59436,"y":684.40234},{"x":529.7782,"y":669.4685},{"x":543.08704,"y":653.1195},{"x":554.60706,"y":635.73456},{"x":563.3266,"y":617.3142},{"x":570.0075,"y":596.0911},{"x":575.7123,"y":574.78046},{"x":581.05774,"y":554.0385},{"x":585.48157,"y":533.1105},{"x":588.66907,"y":512.06683},{"x":590.4706,"y":490.68823},{"x":591.2653,"y":469.50403},{"x":279.37485,"y":410.2143},{"x":299.98352,"y":383.6742},{"x":331.64465,"y":375.0197},{"x":364.35858,"y":381.4741},{"x":395.4406,"y":394.20447},{"x":466.45248,"y":397.95},{"x":496.4015,"y":389.2094},{"x":527.33295,"y":386.7473},{"x":555.7313,"y":398.20285},{"x":571.48254,"y":425.62354},{"x":427.4568,"y":456.95285},{"x":426.77496,"y":483.84033},{"x":426.04883,"y":510.83325},{"x":425.32236,"y":537.75256},{"x":385.83856,"y":572.9858},{"x":403.71045,"y":573.0551},{"x":423.23145,"y":574.53534},{"x":442.28857,"y":574.4508},{"x":459.13876,"y":574.9396},{"x":307.80756,"y":458.6329},{"x":323.8154,"y":450.41855},{"x":359.07312,"y":453.8022},{"x":371.75238,"y":466.2728},{"x":355.36838,"y":470.9956},{"x":321.71375,"y":468.2021},{"x":479.14362,"y":470.68353},{"x":492.57837,"y":459.77023},{"x":526.78955,"y":459.34094},{"x":540.76917,"y":469.22626},{"x":526.91675,"y":477.2774},{"x":494.3828,"y":476.6469},{"x":307.39963,"y":402.42038},{"x":336.54358,"y":400.2494},{"x":365.31128,"y":405.05597},{"x":393.4093,"y":412.95276},{"x":466.55408,"y":416.23398},{"x":493.2259,"y":412.04782},{"x":520.28235,"y":410.81372},{"x":546.7446,"y":415.7663},{"x":341.78073,"y":449.21838},{"x":338.20166,"y":471.98853},{"x":342.39044,"y":460.15692},{"x":509.66327,"y":456.7909},{"x":510.57373,"y":479.22314},{"x":508.77704,"y":467.26038},{"x":399.44565,"y":461.61548},{"x":453.4572,"y":463.86423},{"x":384.4139,"y":527.5456},{"x":463.68613,"y":530.3157},{"x":369.6485,"y":554.5674},{"x":475.98178,"y":558.04224},{"x":358.72372,"y":632.25916},{"x":379.92645,"y":612.99927},{"x":406.5278,"y":600.8932},{"x":422.78525,"y":604.4064},{"x":439.0467,"y":601.5054},{"x":463.0918,"y":613.59924},{"x":480.34888,"y":633.28406},{"x":463.28207,"y":645.23676},{"x":442.62195,"y":651.3627},{"x":420.9704,"y":652.71295},{"x":398.036,"y":651.2082},{"x":376.4565,"y":644.82745},{"x":363.59555,"y":631.5963},{"x":392.39032,"y":626.09314},{"x":422.20786,"y":626.16754},{"x":449.31833,"y":626.3133},{"x":475.72333,"y":632.3503},{"x":448.87988,"y":625.9888},{"x":421.7511,"y":626.1827},{"x":392.28534,"y":625.9193},{"x":342.4176,"y":460.03064},{"x":508.8405,"y":467.07236}]'
# 测颜值和 上次结果
# print(gmai_request().plastic_analysis_v3("869412032478155", "2021/06/01/1524/8a28dd0a3b8e",landmark,1))
# print(gmai_request().plastic_analysis_v3("869412032478155", "", "", 1))
# print(gmai_request().skin_newReport("7.43.0","https://pic.igengmei.com/2021/05/11/1440/25e4bf45673f-s"))
# print(gmai_request().eyelids_plastic("7.43.0", "2021/05/12/1457/cdbe8652117d","3"))
skin_newReport:
method: post
url: /gm_ai/skin/new_report
params:
version: ${version}
data:
image_url: ${image_url}
eyelids_plastic:
method: post
url: /gm_ai/eyelids/plastic
params:
version: ${version}
data:
image_url: ${image_url}
style_id: ${style_id}
analysis_v3:
method: post
url: /gm_ai/plastic/analysis_v3
params:
device_id: ${device_id}
data:
image_url: ${image_url}
landmark: ${landmark}
cheek_style_classify_id: ${cheek_style_classify_id}
simulate_analyze:
method: post
url: /gm_ai/simulate/analyze
params:
device_id: ${device_id}
data:
image_url: ${image_url}
style_id: ${style_id}
type_id: ${type_id}
simulate_conf:
method: get
url: /gm_ai/simulate/conf
params:
type_id: ${type_id}
plastic_analystic_v2:
method: post
url: /gm_ai/plastic/analysis_v2
params:
device_id: ${device_id}
data:
image_url: ${image_url}
landmark: ${landmark}
cheek_style_classify_id: ${cheek_style_classify_id}
plastic_cheek_style_classify:
method: get
url: /gm_ai/plastic/cheek_style_classify
params:
version: ${version}
skin_user_had_test:
method: get
url: /gm_ai/skin/user_had_test
params:
device_id: ${device_id}
isLogin: 1
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class hospital_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.HOSPITAL_DIARY_CONFIG)
#医院主页日记列表
def diary(self, hospital):
self.params["hospital"] = hospital
return self.api_send(self.data["diary"])
if __name__ == '__main__':
#打印医院主页日记列表接口返回
print(hospital_request().diary("bjxyjcpfbyy"))
\ No newline at end of file
#医院主页日记列表
diary:
method: get
url: /api/hospital/diary
params:
hospital: ${hospital}
count: 4
page: 1
own_page: 0
tag_id:
data: {}
json: {}
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class hospitals_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.HDYAML_CONFIG)
#医院主页详情
def detail(self):
return self.api_send(self.data["detail"])
#医院主页医生列表
def doctor(self):
return self.api_send(self.data["doctor"])
if __name__ == '__main__':
#打印医院主页详情接口返回
print(hospitals_request().detail())
#打印医院主页医生列表接口返回
print(hospitals_request().doctor())
\ No newline at end of file
#医院主页详情
detail:
method: get
url: /api/hospitals/bjxyjcpfbyy/detail
params: {}
data: {}
json: {}
#医院主页医生列表
doctor:
method: get
url: /api/hospitals/bjxyjcpfbyy/doctors
params:
related: 0
data: {}
json: {}
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class hospitals_v2_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.HOSPITAL_SERVICE_CONFIG)
#医院主页商品列表
def services(self):
return self.api_send(self.data["services"])
if __name__ == '__main__':
#打印医院主页商品列表接口返回
print(hospitals_v2_request().services())
\ No newline at end of file
#医院主页商品列表
services:
method: get
url: /api/hospitals_v2/bjxyjcpfbyy/services
params:
offset: 0
show_tag_distro: 1
tag_id: "all"
size: 10
data: {}
json: {}
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class hybrid_api_topic_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.DIARY_VOTE_CONFIG)
def diary_vote(self, id):
self.params["id"] = id
return self.api_send(self.data["vote"])
def diary_canclevote(self, id):
self.params["id"] = id
return self.api_send(self.data["canclevote"])
# 进入日记贴详情页-用来判断这篇日记贴点赞过没
def diary_detail(self, topic_id):
self.params["topic_id"] = topic_id
return self.api_send(self.data["detail"])
# def diary_test(self):
# return self.api_send(self.data["detail"])
# if __name__ == '__main__':
# r = diary_vote_request.diary_detail(21249959)
# print(r)
#日记本列表--日记贴点赞
vote:
method: post
url: /hybrid/api/topic/vote/_data
params:
data:
id: ${id}
json: {}
isLogin: 1 #需要登录添加这个字段,值为1 0是不需要登录的情况,如不需要登录,可以不添加这个字段
#取消点赞
canclevote:
method: post
url: /hybrid/api/topic/cancel_vote/_data
params:
data:
id: ${id}
json: {}
isLogin: 1 #需要登录添加这个字段,值为1 0是不需要登录的情况,如不需要登录,可以不添加这个字段
#
detail:
method: get
url: /api/topic/v1
params:
topic_id: ${topic_id}
data: {}
json: {}
isLogin: 1 #需要登录添加这个字段,值为1 0是不需要登录的情况,如不需要登录,可以不添加这个字段
import path_setting
from in_common.base_request import BaseRequest
class hybrid_diary_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.DIARY_ALBUM_CONFIG)
def diary_album(self):
return self.api_send(self.data["album"])
#查看日记本相册页面
album:
method: get
url: /hybrid/diary/album/17586198/_data
params:
data: {}
json: {}
isLogin: 1 #需要登录添加这个字段,值为1 0是不需要登录的情况,如不需要登录,可以不添加这个字段
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class hybrid_get_gift_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.HYBRID_GET_GIFT_CONFIG)
#商祥页-美券列表
def get_gift_data(self, gift_id):
self.params["gift_id"] = gift_id
return self.api_send(self.data["get_gift_data"])
if __name__ == '__main__':
#打印商祥页-优惠券列表-领取
print(hybrid_get_gift_request().get_gift_data("63302"))
\ No newline at end of file
#商祥页-优惠券列表-领取
get_gift_data:
method: post
url: /hybrid/get_gift/_data
params: {}
data:
gift_id: ${gift_id}
json: {}
isLogin: 1
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class hybrid_gift_list_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.HYBRID_GIFT_LIST_CONFIG)
#商祥页-美券列表
def gift_list_data(self, service_id, gift_type, page):
self.params["service_id"] = service_id
self.params["gift_type"] = gift_type
self.params["page"] = page
return self.api_send(self.data["gift_list_data"])
if __name__ == '__main__':
#打印商祥页-美券列表接口返回
print(hybrid_gift_list_request().gift_list_data("5857263", 1, 1))
\ No newline at end of file
#商祥页-美券列表
gift_list_data:
method: get
url: /hybrid/gift_list/_data
params:
service_id: ${service_id}
gift_type: ${gift_type}
page: ${page}
data: {}
json: {}
isLogin: 1
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class hybrid_promotion_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.HYBRID_PROMOTION_CONFIG)
#商祥页-sku信息
def related_service_data(self, service_id, page):
self.params["service_id"] = service_id
self.params["page"] = page
return self.api_send(self.data["related_service_data"])
if __name__ == '__main__':
#打印商祥页-推荐商品列表接口返回
print(hybrid_promotion_request().related_service_data("5815040", 1))
#商祥页-推荐商品列表
related_service_data:
method: get
url: /hybrid/promotion/related_service/_data
params:
service_id: ${service_id}
page: ${page}
data: {}
json: {}
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
from bs4 import BeautifulSoup
class hybrid_request(BaseRequest):
def __init__(self):
#百科详情页-项目聚合百科
self.data = self.api_load(path_setting.SUBWIKI_CONFIG)
#百科详情页-项目百科
self.data = self.api_load(path_setting.BASEWIKI_ITEM_CONFIG)
#百科详情页-药品(仪器、材料)百科
self.data = self.api_load(path_setting.BASEWIKI_PRODUCT_CONFIG)
#百科详情页-品牌百科
self.data = self.api_load(path_setting.BRAND_CONFIG)
#百科详情页-项目聚合百科
def sub_wiki(self, version, current_city_id, device_id = '97B6764B-2135-4761-9911-701C38CBC272'):
self.params['current_city_id'] = current_city_id
self.params['version'] = version
return self.api_send(self.data['sub_wiki'])
# return self.data
#百科详情页-项目百科
def basewiki_item(self, version, device_id = '97B6764B-2135-4761-9911-701C38CBC272'):
self.params['version'] = version
return self.api_send(self.data['basewiki_item'])
#百科详情页-药品(仪器、材料)百科
def basewiki_product(self, version, device_id = '97B6764B-2135-4761-9911-701C38CBC272'):
self.params['version'] = version
return self.api_send(self.data['basewiki_product'])
#百科详情页-品牌百科
def brand(self, version, device_id = '97B6764B-2135-4761-9911-701C38CBC272'):
self.params['version'] = version
return self.api_send(self.data['brand'])
# 问答详情页问题详情
def question_v1(self):
return self.api_send(self.data['question_v1'])
# 问答详情页--回答列表
def question_new_answer_list(self, question_id):
self.params['question_id'] = question_id
return self.api_send(self.data['question_new_answer_list'])
if __name__ == '__main__':
# print(self.data)
# print(hybrid_request().sub_wiki("744.0", "beijing"))
# print(type(hybrid_request().sub_wiki("744.0", "beijing")))
soup = BeautifulSoup(hybrid_request().sub_wiki("744.0", "beijing"), 'lxml') # html.parser是解析器,也可是lxml
print(soup.prettify(),'百科详情页-项目聚合百科') #输出soup对象的内容
print(soup.title)
\ No newline at end of file
#百科详情页-项目聚合百科-玻尿酸
sub_wiki:
method: GET
url: /hybrid/sub_wiki/127
params:
current_city_id: ${current_city_id}
version: ${version}
data: {}
json: {}
#百科详情页-项目百科-水光针
basewiki_item:
method: GET
url: /hybrid/base_wiki/item/141
params:
version: ${version}
data: {}
json: {}
#百科详情页-药品(仪器、材料)百科-菲洛嘉
basewiki_product:
method: GET
url: /hybrid/base_wiki/product/16
params:
version: ${version}
data: {}
json: {}
#百科详情页-品牌百科-德玛莎
brand:
method: GET
url: /hybrid/brand/98
params:
version: ${version}
data: {}
json: {}
#问答详情页--问题详情
question_v1:
method: GET
url: /hybrid/question_v1/210502
params:
data: {}
json: {}
isLogin: 1
#问答详情页--回答列表
question_new_answer_list:
method: GET
url: /hybrid/question/new_answer_list/_data
params:
question_id: ${question_id}
data: {}
json: {}
isLogin: 1
import path_setting
from in_common.base_request import BaseRequest
class im_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.CONVERSATION_DETAIL_CONFIG)
def conversation_detail(self, current_city_id, begin_msg_id, conversation_type, end_msg_id,referrer):
self.params["current_city_id"] = current_city_id
self.params["begin_msg_id"] = begin_msg_id
self.params["conversation_type"] = conversation_type
self.params["end_msg_id"] = end_msg_id
self.params["referrer"] = referrer
return self.api_send(self.data["conversation_detail"])
def auto_msg(self, trace_id, conversation_id):
self.params["trace_id"] = trace_id
self.params["conversation_id"] = conversation_id
return self.api_send(self.data["auto_msg"])
def send_msg(self, conversation_id, is_system, referrer, referrer_id, msg_type, content, extra):
self.params["conversation_id"] = conversation_id
self.params["is_system"] = is_system
self.params["referrer"] = referrer
self.params["referrer_id"] = referrer_id
self.params["msg_type"] = msg_type
self.params["content"] = content
self.params["extra"] = extra
return self.api_send(self.data["send_msg"])
if __name__ == '__main__':
print(im_request().conversation_detail("beijing", 0, 4, 0, "message_home"))
print("第二个接口")
print(im_request().auto_msg("2021/04/22/1722/70a1791606d5",368))
print("send_msg")
print(im_request().send_msg("368", 0, "message_home", "", 0, "您好,我想咨询一下", {}))
conversation_detail:
method: get
url: /api/im/conversation/detail
params:
current_city_id: ${current_city_id}
begin_msg_id: ${begin_msg_id}
conversation_type: ${conversation_type}
end_msg_id: ${begin_msg_id}
referrer: ${referrer}
data: {}
json: {}
isLogin: 1 #需要登录的接口
auto_msg:
method: post
url: /api/im/auto_msg
params:
trace_id: ${trace_id}
data:
conversation_id: ${conversation_id}
json: {}
isLogin: 1 #需要登录的接口
send_msg:
method: post
url: /api/im/send_msg
params: {}
data:
conversation_id: ${conversation_id}
is_system: ${is_system}
referrer: ${referrer}
referrer_id: ${referrer_id}
msg_type: ${msg_type}
content: ${content}
extra: ${extra}
json: {}
isLogin: 1 #需要登录的接口
\ No newline at end of file
This diff is collapsed.
content_v7:
method : get
url : /api/janus/search/v7/content
params :
query: ${query}
device_id: ${device_id}
current_city_id: ${current_city_id}
version: ${version}
is_first: ${is_first}
tab_type: ${tab_type}
offset: ${offset}
data: {}
json: {}
hospital_search:
method: get
url: /api/janus/search/hospital_search
params:
query: ${query}
device_id: ${device_id}
hospital_id: ${hospital_id}
current_city_id: ${current_city_id}
version: ${version}
offset: ${offset}
size : ${size}
data: { }
json: { }
#购物车-猜你喜欢
mine_guess_you_like:
method: get
url: /api/janus/product/mine_guess_you_like
params: {}
data: {}
json: {}
isLogin: 1
#商祥页-详情
product_detail:
method: get
url: /api/janus/product/detail
params:
service_id: ${service_id}
service_item_id: ${service_item_id}
version: ${version}
data: {}
json: {}
#商祥页-sku信息
sku_info:
method: get
url: /api/janus/product/detail/sku_info
params:
service_id: ${service_id}
service_item_id: ${service_item_id}
data: {}
json: {}
#商祥页-美券列表-我的美券点击-744版本及以后-新接口
product_coupon_my_list:
method: get
url: /api/janus/product/coupon/my_list
params:
start_num: ${start_num}
tab_id: ${tab_id}
data: {}
json: {}
isLogin: 1
#品类聚合页面商品列表的
tag_service:
method: GET
url: /api/janus/product/tag_service
params:
size: ${size}
tag_ids: ${tag_ids}
offset: ${offset}
tag_id: ${tag_id}
version: ${version}
device_id: ${device_id}
data: { }
json: { }
#品类聚合页标签和专场
polymer:
method: GET
url: /api/janus/product/polymer
params:
version: ${version}
category_polymer_id: ${category_polymer_id}
device_id: ${device_id}
data: { }
json: { }
#医生医院sug列表
keyword_tip:
method: GET
url: /api/janus/search/keyword/tip
params:
query: ${query}
lat: ${lat}
lng: ${lng}
version: ${version}
data: {}
json: {}
#次卡-确认订单
beauty_card_order_confirm:
method: post
url: /api/janus/beauty_card/order/confirm
params: {}
data:
sku_id: ${sku_id}
number: ${number}
bctraceid: ""
use_bc_coupon: ${use_bc_coupon}
bc_coupon_id: ${bc_coupon_id}
json: {}
isLogin: 1
#次卡-确认订单页面-修改手机号
beauty_card_update_phone:
method: post
url: /api/janus/beauty_card/update_phone
params: {}
data:
authorize_phone: ${authorize_phone}
authorize_phone_type: ${authorize_phone_type}
vfc_code: ${vfc_code}
json: {}
isLogin: 1
#次卡商详页
beauty_card_detail:
method: GET
url: /api/janus/beauty_card/detail
params:
spu_id: ${spu_id}
sku_id: ${sku_id}
welfareId: ${welfareId}
version: ${version}
current_city_id: ${current_city_id}
lat: ${lat}
lng: ${lng}
data: { }
json: { }
#次卡商详页-适应机构列表
service_hospital:
method: GET
url: /api/janus/beauty_card/service_hospital
params:
offset: ${offset}
sku_id: ${sku_id}
size: ${size}
version: ${version}
current_city_id: ${current_city_id}
lat: ${lat}
lng: ${lng}
data: { }
json: { }
#次卡-提交订单
beauty_card_order_submit:
method: post
url: /api/janus/beauty_card/order/submit
params: {}
data:
phone: ${phone}
sku_id: ${sku_id}
number: ${number}
is_doctor_see: ${is_doctor_see}
gain_coupon_id: ${gain_coupon_id}
deduction_price: ${deduction_price}
json: {}
isLogin: 1
#次卡-支付平台
beauty_card_payment_method:
method: get
url: /api/janus/beauty_card/payment_method
params:
payment_id: ${payment_id}
data: {}
json: {}
isLogin: 1
#次卡-微信支付
beauty_card_prepay_wechat:
method: post
url: /api/janus/beauty_card/prepay/wechat
params: {}
data:
payment_id: ${payment_id}
json: {}
isLogin: 1
#次卡-支付宝支付
beauty_card_prepay_alipay:
method: post
url: /api/janus/beauty_card/prepay/alipay
params: {}
data:
is_huabei: ${is_huabei}
payment_id: ${payment_id}
json: {}
isLogin: 1
##次卡-支付宝支付-花呗分期
#beauty_card_prepay_alipay_huabei:
# method: post
# url: /api/janus/beauty_card/prepay/alipay
# params: {}
# data:
# huabei_period: ${huabei_period}
# is_huabei: ${is_huabei}
# payment_id: ${payment_id}
# json: {}
# isLogin: 1
#次卡-订单详情
beauty_card_payment_detail:
method: get
url: /api/janus/beauty_card/payment/detail
params:
payment_id: ${payment_id}
data: {}
json: {}
isLogin: 1
#次卡-取消订单
beauty_card_payment_delete:
method: post
url: /api/janus/beauty_card/payment/delete
params: {}
data:
payment_id: ${payment_id}
json: {}
isLogin: 1
#次卡-申请退款
beauty_card_refund_info:
method: get
url: /api/janus/beauty_card/refund/info
params:
order_id: ${order_id}
data: {}
json: {}
isLogin: 1
#次卡-提交退款申请
beauty_card_refund_submit:
method: post
url: /api/janus/beauty_card/refund/submit
params: {}
data:
order_id: ${order_id}
reason_id: ${reason_id}
reason_text: ${reason_text}
reason_type: ${reason_type}
json: {}
isLogin: 1
#新版本我的美券
coupon_my_list:
method: get
url: /api/janus/product/coupon/my_list
params:
start_num: ${start_num}
tab_id: ${tab_id}
isLogin: 1
#次卡-订单详情(未使用 和 部分使用 和 已使用)
beauty_card_order_detail:
method: get
url: /api/janus/beauty_card/order/detail
params:
order_id: ${order_id}
data: {}
json: {}
isLogin: 1
#直播-点击【设置封面】
page_rules:
method: GET
url: /api/janus/sales_lead/page_rules
params:
version: ${version}
current_city_id: ${current_city_id}
page_name: ${page_name}
data: {}
json: {}
isLogin: 1
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class living_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.LIVEYAML_CONFIG)
#获取弹幕
def danmu_v2(self,channel_id,msg_id,user_id=""):
self.params["channel_id"] = channel_id
self.params["msg_id"] = msg_id
self.params["user_id"] = user_id
return self.api_send(self.data["danmu_v2"])
#主播开播
def pushlive_info(self,title,cover_url,notice,tag_id,clarity,device_type):
self.params["title"] = title
self.params["cover_url"] = cover_url
self.params["notice"] = notice
self.params["tag_id"] = tag_id
self.params["clarity"] = clarity
self.params["device_type"] = device_type
return self.api_send(self.data["pushlive_info"])
if __name__ == '__main__':
(living_request().danmu_v2("739", "1"))
(living_request().pushlive_info("小冤家", "2021/04/22/1003/cef471cff5e6", "", "1", "1", "1"))
\ No newline at end of file
#获取弹幕
danmu_v2:
method: get
url: /api/live/danmu_v2
params:
channel_id: ${channel_id}
msg_id: ${msg_id}
user_id: ${user_id}
data: {}
json: {}
#主播开播
pushlive_info:
method: get
url: /api/live/push_live_info
params:
title: ${title}
cover_url: ${cover_url}
notice: ${notice}
tag_id: ${tag_id}
clarity: ${clarity}
device_type: ${device_type}
data: {}
json: {}
isLogin: 1
import path_setting
from in_common.base_request import BaseRequest
class my_conversation_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.MY_CONVERSATION_CONFIG)
def my_conversation(self,current_city_id,start_num,count,):
self.params["current_city_id"] = current_city_id
self.params["start_num"] = start_num
self.params["count"] = count
return self.api_send(self.data["my_conversation"])
if __name__ == '__main__':
print(my_conversation_request().my_conversation("beijing", "0", 10))
\ No newline at end of file
my_conversation:
method: get
url: /api/my_conversation/
params:
current_city_id: ${current_city_id}
start_num: ${start_num}
count: 10
data: {}
json: {}
isLogin: 1 #需要登录的接口
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class notification_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.UNREAD_CONFIG)
def unread(self,uqid,trace_id,):
self.params["uqid"] = uqid
self.params["trace_id"] = trace_id
return self.api_send(self.data["unread"])
def readall(self,uqid,trace_id,ua):
self.params["uqid"] = uqid
self.params["trace_id"] = trace_id
self.params["ua"] = ua
return self.api_send(self.data["readall"])
if __name__ == '__main__':
#print(notification_request().unread("1B519701-A4F5-453E-9D99-140B5AF697A0", "2021/04/22/1722/46cf97b999b0"))
print(notification_request().readall("1B519701-A4F5-453E-9D99-140B5AF697A0", "2021/05/19/1526/19fcd4c4be47","Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"))
#未读消息数
unread:
method: get
url: /api/notification/unread
params:
uqid: ${uqid}
trace_id: ${trace_id}
data: {}
json: {}
isLogin: 1 #需要登录的接口
#标记为已读
readall:
method: post
url: /api/notification/readall
params:
uqid: ${uqid}
trace_id: ${trace_id}
ua: ${ua}
data: {}
json: {}
isLogin: 1 #需要登录的接口
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class oneimage_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.ONEIMAGE_SHARE_V4_CONFIG)
# 测颜值结果页
def share_v4(self,version,face_id):
self.params["version"] = version
self.params["face_id"] = face_id
return self.api_send(self.data["share_v4"])
# 测颜值结果页,根据五官推荐美购接口
def recomend_services(self,version,business_tags_names):
self.params["version"] = version
self.params["business_tags_names"] = business_tags_names
return self.api_send(self.data["recomend_services"])
if __name__ == '__main__':
print(oneimage_request().share_v4("7.42.2", "27320150"))
business_tags_names = '[[],[],["玻尿酸垫下巴","自体脂肪垫下巴","硅胶垫下巴","膨体垫下巴"],["半永久纹眉","植眉"],["玻尿酸丰唇","胶原蛋白填充丰唇","自体脂肪丰唇"],[],["开内眼角"],["射频提升","热拉提","热拉提plus","热玛吉","超声提升"],["热玛吉"],[],["注射瘦脸","激光溶脂瘦脸","取颊脂垫瘦脸","光纤溶脂瘦脸","下颌角整形"]]'
print(oneimage_request().recomend_services("7.42.2", business_tags_names))
\ No newline at end of file
#测肤结果页
share_v4:
method: post
url: /api/one_image/share/v4
params:
version: ${version}
data:
face_id: ${face_id}
json: {}
#测肤结果根据五官推荐美购
recomend_services:
method: get
url: /api/one_image/recomend/services
params:
version: ${version}
business_tags_names: ${business_tags_names}
json: {}
import path_setting
from in_common.base_request import BaseRequest
class orders_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.ORDERS_MY_V2_CONFIG)
# 我的订单列表
def my_v2(self,start_num,status,version):
self.params["start_num"] = start_num
self.params["status"] = status
self.params["version"] = version
return self.api_send(self.data["my_v2"])
#我的订单-各状态订单数量
def my_status(self):
return self.api_send(self.data["my_status"])
if __name__ == '__main__':
print(orders_request().my_v2(0,1,"7.44.0"))
#打印我的订单-各状态订单数量接口返回
print(orders_request().my_status())
my_v2:
method: get
url: /api/orders/my/v2
params:
start_num: ${start_num}
status: ${status}
version: ${version}
isLogin: 1
#我的订单-各状态订单数量
my_status:
method: get
url: /api/orders/my/status
params: {}
data: {}
json: {}
isLogin: 1
import path_setting
from in_common.base_request import BaseRequest
class pay_request(BaseRequest):
def __init__(self):
self.wechat_pay = self.api_load(path_setting.WECHAT_PAY)
def wechat_prepay(self, settlement_id):
self.params["settlement_id"] = settlement_id
return self.api_send(self.wechat_pay["wechat_prepay"])
def alipay_prepay(self, settlement_id, version,is_huabei,huabei_period):
self.params["settlement_id"] = settlement_id
self.params["version"] = version
self.params["is_huabei"] = is_huabei
self.params["huabei_period"] = huabei_period
return self.api_send(self.wechat_pay["alipay_prepay"])
def jump(self,settlement_id):
self.params["settlement_id"] = settlement_id
return self.api_send(self.wechat_pay["jump"])
if __name__ == '__main__':
# print(settlement_request().preview_v1("beijing", "599428", 1, 1, 1, "true", 0))
print(pay_request().wechat_prepay(522139664651))
\ No newline at end of file
wechat_prepay:
method: post
url: /pay/wechat/prepay
params:
current_city_id: "beijing"
version: 7.44.0
data:
settlement_id: ${settlement_id}
isLogin: 1
alipay_prepay:
method: post
url: /pay/alipay/prepay
params:
current_city_id: "beijing"
version: 7.44.0
data:
settlement_id: ${settlement_id}
version: ${version}
is_huabei: ${is_huabei}
huabei_period: ${huabei_period}
isLogin: 1
jump:
method: post
url: /pay/jump
params:
current_city_id: "beijing"
version: 7.44.0
data:
settlement_id: ${settlement_id}
isLogin: 1
#推荐内容
personal_recommends:
method: get
url: /api/personal/recommends/v1
params:
current_city_id: ${current_city_id}
id: ${id}
from_type: ${from_type}
data: {}
json: {}
isLogin: 0 #需要登录添加这个字段,值为1 0是不需要登录的情况,如不需要登录,可以不添加这个字段
#查看日记本相册页面
#album:
# method: get
# url: /hybrid/diary/album/17586198/_data
# params:
# data: {}
# json: {}
# isLogin: 1 #需要登录添加这个字段,值为1 0是不需要登录的情况,如不需要登录,可以不添加这个字段
import path_setting
from in_common.base_request import BaseRequest
class personal_recommends_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.PERSONAL_RECOMMENDS_CONFIG)
def personal_recommends(self, current_city_id, id, from_type):
self.params["current_city_id"] = current_city_id
self.params["id"] = id
self.params["from_type"] = from_type
return self.api_send(self.data["personal_recommends"])
import path_setting
from in_common.base_request import BaseRequest
class private_conversation_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.PRIVATE_CONVERSATION_CONFIG)
def private_conversation(self, content, target_uid, referrer,referrer_id, is_system, quick_consultation_id, diary_id, from_live):
self.params["content"] = content
self.params["target_uid"] = target_uid
self.params["referrer"] = referrer
self.params["referrer_id"] = referrer_id
self.params["is_system"] = is_system
self.params["quick_consultation_id"] = quick_consultation_id
self.params["diary_id"] = diary_id
self.params["from_live"] = from_live
return self.api_send(self.data["private_conversation"])
if __name__ == '__main__':
print(private_conversation_request().private_conversation("你好", "35874935", "message_home", "", 0, "", "", ""))
\ No newline at end of file
private_conversation:
method: post
url: /api/private_conversation/
params: {}
data:
content: ${content}
target_uid: ${target_uid}
referrer: ${referrer}
referrer_id: ${referrer_id}
is_system: ${is_system}
quick_consultation_id: ${quick_consultation_id}
diary_id: ${diary_id}
from_live: ${from_live}
json: {}
isLogin: 1 #需要登录的接口
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class qa_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.QA_CONFIG)
# print(self.replyanswer)
# 帖子收藏
def favor(self, answer_id):
self.params["answer_id"] = answer_id
return self.api_send(self.data["favor"])
# 帖子取消收藏
def cancelfavor(self, answer_id):
self.params["answer_id"] = answer_id
return self.api_send(self.data["cancelfavor"])
#问题收藏
favor:
method: post
url: /api/qa/favor
params:
data:
answer_id: ${answer_id}
json: {}
isLogin: 1 #需要登录添加这个字段,值为1 0是不需要登录的情况,如不需要登录,可以不添加这个字段
#问题取消收藏
cancelfavor:
method: post
url: /api/qa/favor/cancel
params:
data:
answer_id: ${answer_id}
json: {}
isLogin: 1 #需要登录添加这个字段,值为1 0是不需要登录的情况,如不需要登录,可以不添加这个字段
import path_setting
from in_common.base_request import BaseRequest
class question_request(BaseRequest):
def __init__(self):
self.replyanswer = self.api_load(path_setting.QUESTION_CONFIG)
# print(self.replyanswer)
# 回答详情页- 一/二级评论
def reply_answer(self, current_city_id, answer_id, content, user_id=""):
self.params["current_city_id"] = current_city_id
self.params["answer_id"] = answer_id
self.params["content"] = content
self.params["user_id"] = user_id
return self.api_send(self.replyanswer["reply_answer"])
#回答详情页- 一/二级评论
reply_answer:
method: post
url: /api/question/reply_answer
params:
current_city_id: ${current_city_id}
data:
answer_id: ${answer_id}
content: ${content}
user_id: ${user_id}
json: {}
isLogin: 1
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class scan_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.SCAN_DIARY_CARDS_CONFIG)
# 测颜值底部feed流
def scan_diary_cards(self, current_city_id, page,count, feature_results, feed_type):
self.params["current_city_id"] = current_city_id
self.params["page"] = page
self.params["count"] = count
self.params["feature_results"] = feature_results
self.params["feed_type"] = feed_type
return self.api_send(self.data["scan_diary_cards"])
if __name__ == '__main__':
print(scan_request().scan_diary_cards("beijing",1,10,'["细凤眼","眼距过宽","双眼皮","一字眉","流畅","厚唇","宽鼻翼","重度眼袋","尖下巴","无法令纹","娃娃脸",""]',1))
scan_diary_cards:
method: get
url: /api/scan/diary_cards
params:
current_city_id: ${current_city_id}
page: ${page}
count: ${count}
feature_results: ${feature_results}
feed_type: ${feed_type}
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class search_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.KEYWORDS_CONFIG)
#品类聚合页面医生tab列表
self.data = self.api_load(path_setting.HOSPITAL_CONFIG)
self.data = self.api_load(path_setting.KEYWORDS_CONFIG) #keywords路径
self.data = self.api_load(path_setting.CONTENTV6_CONFIG) #content_v6路径
self.data = self.api_load(path_setting.HOT_CONFIG) # hot路径
#搜索首页-热门搜索模块(点击搜索框即调接口)
def keywords(self,current_city_id,search_tab):
self.params["current_city_id"] = current_city_id
self.params["search_tab"] = search_tab
return self.api_send(self.data["keywords"])
#搜索结果页-医生/医院tab
def content_v6(self, query, device_id, current_city_id, version, is_first, tab_type, offset, size):
#搜索词
self.params['query'] = query
#设备号
self.params['device_id'] = device_id
#当前城市
self.params['current_city_id'] = current_city_id
#APP版本
self.params['version'] = version
#是否为第一次请求
self.params['is_first'] = is_first
#类型
self.params['tab_type'] = tab_type
#请求的页数 0,10,20
self.params['offset'] = offset
# 请求的size
self.params['size'] = size
return self.api_send(self.data["content_v6"])
# 搜索首页-更美热门榜模块(点击搜索框即调接口)
def hot(self, version, device_id = '97B6764B-2135-4761-9911-701C38CBC272'):
self.params["version"] = version
return self.api_send(self.data["hot"])
# 品类聚合页面医生tab列表
def hospital(self, cp_id, tag_id, q, count, device_id):
self.params["cp_id"] = cp_id
self.params["tag_id"] = tag_id
self.params["q"] = q
self.params["count"] = count
self.params["device_id"] = device_id
return self.api_send(self.data["hospital"])
if __name__ == '__main__':
# 打印购物车-猜你喜欢列表接口返回
print(search_request().hospital(82, [], "眼部整形", 10, "869378034450718"))
#搜索首页-热门搜索模块(点击搜索框即调接口)
keywords:
method: get
#接口地址
url: /api/search/keywords
#列出所有定义函数时的参数
params:
current_city_id: ${current_city_id}
search_tab: ${search_tab}
data: {}
json: {}
#搜索结果页-医生/医院tab
content_v6:
method: get
#接口地址
url: /api/search/v6/content
#列出所有定义函数时的参数
params:
query: ${query}
device_id: ${device_id}
current_city_id: ${current_city_id}
version: ${version}
is_first: ${is_first}
tab_type: ${tab_type}
offset: ${offset}
size: ${size}
data: {}
json: {}
# 搜索首页-更美热门榜模块(点击搜索框即调接口)
hot:
method: get
#接口地址
url: /api/search/hot
#列出所有定义函数时的参数
params:
version: ${version}
#品类聚合页面医生tab列表
hospital:
method: get
url: /api/search/v2/hospital
params:
cp_id: ${cp_id}
tag_id: ${tag_id}
q: ${q}
count: ${count}
device_id: ${device_id}
data: {}
json: {}
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class service_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.HOME_V5_CONFIG) #/all_backend_api/service_request.yaml
def home_v5(self):
return self.api_send(self.data["home_v5"])
#商祥页-收藏
def service_favor(self):
return self.api_send(self.data["service_favor"])
if __name__ == '__main__':
print(service_request().home_v5())
#打印商祥页-收藏接口返回
print(service_request().service_favor())
\ No newline at end of file
home_v5:
method: get
url: /api/service/home/v5
params: {}
data: {}
json: {}
#商祥页-收藏
service_favor:
method: post
url: /api/service/favor/5857263/
params: {}
data: {}
json: {}
isLogin: 1
\ No newline at end of file
import path_setting
from in_common.base_request import BaseRequest
class services_request(BaseRequest):
def __init__(self):
self.data = self.api_load(path_setting.SERVICES_CONFIG)
#商祥页-分享
def share_data(self, p_id, u_id):
self.params["p_id"] = p_id
self.params["u_id"] = u_id
return self.api_send(self.data["share_data"])
if __name__ == '__main__':
#打印商祥页-分享接口返回
print(services_request().share_data("5857263", "618788"))
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment