下载地址:https://www.pan38.com/yun/share.php?code=JCnzE 提取密码:7899
这个项目实现了一个完整的抖音UID与二维码互转工具,包含以下功能:
要运行这个项目,您需要:
from flask import Flask, render_template, request, jsonify
import qrcode
from io import BytesIO
import base64
import requests
import re
app = Flask(__name__)
# 模拟抖音API(实际使用时需要替换为真实API)
DOUYIN_API = "https://api.douyin.com"
def generate_qrcode(data):
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
buffer = BytesIO()
img.save(buffer, format="PNG")
return base64.b64encode(buffer.getvalue()).decode()
def get_uid_by_username(username):
# 这里应该是调用抖音API获取UID的逻辑
# 由于没有官方API,这里模拟返回一个固定UID
return "123456789"
def get_username_by_uid(uid):
# 这里应该是调用抖音API获取用户名的逻辑
# 由于没有官方API,这里模拟返回一个固定用户名
return "example_user"
@app.route('/')
def index():
return render_template('index.html')
@app.route('/generate', methods=['POST'])
def generate():
data = request.json
if 'uid' in data:
qr_data = f"douyin://user/profile/{data['uid']}"
qr_code = generate_qrcode(qr_data)
return jsonify({'status': 'success', 'qr_code': qr_code})
elif 'username' in data:
uid = get_uid_by_username(data['username'])
qr_data = f"douyin://user/profile/{uid}"
qr_code = generate_qrcode(qr_data)
return jsonify({'status': 'success', 'qr_code': qr_code, 'uid': uid})
return jsonify({'status': 'error', 'message': 'Invalid input'})
@app.route('/convert', methods=['POST'])
def convert():
data = request.json
if 'uid' in data:
username = get_username_by_uid(data['uid'])
return jsonify({'status': 'success', 'username': username})
elif 'username' in data:
uid = get_uid_by_username(data['username'])
return jsonify({'status': 'success', 'uid': uid})
return jsonify({'status': 'error', 'message': 'Invalid input'})
if __name__ == '__main__':
app.run(debug=True)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>抖音UID与二维码转换工具</title>
<style>
body {
font-family: 'Arial', sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 20px;
background-color: #f5f5f5;
}
.container {
background-color: white;
padding: 30px;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
h1 {
color: #FE2C55;
text-align: center;
}
.section {
margin-bottom: 30px;
padding: 20px;
border: 1px solid #eee;
border-radius: 5px;
}
.input-group {
margin-bottom: 15px;
}
input {
padding: 10px;
width: 100%;
box-sizing: border-box;
border: 1px solid #ddd;
border-radius: 4px;
}
button {
background-color: #FE2C55;
color: white;
border: none;
padding: 10px 15px;
border-radius: 4px;
cursor: pointer;
font-weight: bold;
}
button:hover {
background-color: #d61f3f;
}
#qrCodeContainer {
text-align: center;
margin-top: 20px;
}
#qrCodeImage {
max-width: 200px;
border: 1px solid #ddd;
}
.result {
margin-top: 15px;
padding: 10px;
background-color: #f9f9f9;
border-radius: 4px;
}
</style>
</head>
<body>
<div class="container">
<h1>抖音UID与二维码转换工具</h1>
<div class="section">
<h2>UID转二维码</h2>
<div class="input-group">
<input type="text" id="uidInput" placeholder="输入抖音UID">
</div>
<button onclick="generateQRFromUID()">生成二维码</button>
<div id="uidQRCodeContainer" class="qr-code-container">
<div id="uidQRCodeImage"></div>
</div>
</div>
<div class="section">
<h2>抖音号转UID</h2>
<div class="input-group">
<input type="text" id="usernameInput" placeholder="输入抖音号">
</div>
<button onclick="getUIDFromUsername()">获取UID</button>
<div id="uidResult" class="result"></div>
</div>
<div class="section">
<h2>UID转抖音号</h2>
<div class="input-group">
<input type="text" id="uidToUsernameInput" placeholder="输入UID">
</div>
<button onclick="getUsernameFromUID()">获取抖音号</button>
<div id="usernameResult" class="result"></div>
</div>
</div>
<script>
async function generateQRFromUID() {
const uid = document.getElementById('uidInput').value;
if (!uid) {
alert('请输入UID');
return;
}
const response = await fetch('/generate', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ uid: uid }),
});
const data = await response.json();
if (data.status === 'success') {
document.getElementById('uidQRCodeImage').innerHTML =
`<img src="data:image/png;base64,${data.qr_code}" alt="QR Code" id="qrCodeImage">`;
} else {
alert('生成二维码失败: ' + data.message);
}
}
async function getUIDFromUsername() {
const username = document.getElementById('usernameInput').value;
if (!username) {
alert('请输入抖音号');
return;
}
const response = await fetch('/convert', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ username: username }),
});
const data = await response.json();
if (data.status === 'success') {
document.getElementById('uidResult').innerHTML =
`UID: <strong>${data.uid}</strong>`;
} else {
alert('获取UID失败: ' + data.message);
}
}
async function getUsernameFromUID() {
const uid = document.getElementById('uidToUsernameInput').value;
if (!uid) {
alert('请输入UID');
return;
}
const response = await fetch('/convert', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ uid: uid }),
});
const data = await response.json();
if (data.status === 'success') {
document.getElementById('usernameResult').innerHTML =
`抖音号: <strong>${data.username}</strong>`;
} else {
alert('获取抖音号失败: ' + data.message);
}
}
</script>
</body>
</html>
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。