forked from Dongjiaqi/reposync
243 lines
9.6 KiB
Python
243 lines
9.6 KiB
Python
import urllib
|
||
import requests
|
||
import mysql.connector
|
||
import json
|
||
|
||
def main():
|
||
########获取gitee里的issue并且放到数据库中#######################
|
||
# 连接到MySQL数据库
|
||
conn = mysql.connector.connect(
|
||
host="localhost",
|
||
user="rtsw",
|
||
password="123456",
|
||
database="reposyncer"
|
||
)
|
||
cursor = conn.cursor()
|
||
|
||
cursor.execute('DROP TABLE IF EXISTS gitee_issue_list')
|
||
# 创建一个表
|
||
cursor.execute('''CREATE TABLE IF NOT EXISTS gitee_issue_list
|
||
(id INT AUTO_INCREMENT PRIMARY KEY, number VARCHAR(10), title VARCHAR(100), body VARCHAR(1000), state VARCHAR(15), priority INT)''')
|
||
# 你的仓库信息
|
||
owner = 'xumingyang21'
|
||
repo = 'reposyncer2'
|
||
|
||
# Gitee获取issue的API URL
|
||
url = f"https://gitee.com/api/v5/repos/{owner}/{repo}/issues"
|
||
|
||
# 构造请求头
|
||
token = 'f2be2313581c1fde50b16bf35bb655c5'
|
||
headers = {'Authorization': f'token {token}'}
|
||
|
||
# 发送POST请求 获取状态为open的issue
|
||
data = {
|
||
"access_token": token,
|
||
"owner": owner,
|
||
"repo": repo,
|
||
"state": 'all',
|
||
"sort": 'created',
|
||
"direction": 'asc'
|
||
}
|
||
|
||
# 将字典转换为查询字符串
|
||
query_string = urllib.parse.urlencode(data)
|
||
|
||
# 完整的请求 URL,包括查询字符串
|
||
full_url1 = f"{url}?{query_string}"
|
||
|
||
response = requests.get(full_url1, headers=headers, json=data)
|
||
# 打印响应
|
||
# print(response.text)
|
||
# 检查响应状态码
|
||
if response.status_code == 200:
|
||
# 注意:这里假设响应体中包含一个'number'字段作为issue的ID,但实际上Gitee可能返回不同的结构
|
||
# 你需要根据实际的响应结构来调整以下代码
|
||
issue_info = response.json()
|
||
for issue in issue_info:
|
||
print('number1:', issue['number'])
|
||
print('state1:', issue['state'])
|
||
print('title1:', issue['title'])
|
||
print('body1:', issue['body'])
|
||
cursor.execute(
|
||
'INSERT INTO gitee_issue_list (number, title, body, state, priority) VALUES (%s, %s, %s, %s, %s)',
|
||
(issue['number'], issue['title'], issue['body'], issue['state'], issue['priority']))
|
||
|
||
else:
|
||
print(f"创建issue失败12,状态码:{response.status_code},错误信息:{response.text}")
|
||
|
||
########获取gitlink里的issue并且放到数据库中#######################
|
||
# 连接到MySQL数据库
|
||
cursor.execute('DROP TABLE IF EXISTS gitlink_issue_list')
|
||
# 创建一个表
|
||
cursor.execute('''CREATE TABLE IF NOT EXISTS gitlink_issue_list
|
||
(id INT AUTO_INCREMENT PRIMARY KEY, number VARCHAR(10), subject VARCHAR(100), description VARCHAR(1000), status_name VARCHAR(15), priority_name VARCHAR(15))''')
|
||
|
||
url = "https://gitlink.org.cn/api/v1/xumingyang21/reposyncer2/issues.json?category&participant_category&keyword&author_id&milestone_id&assigner_id&status_id&sort_by&sort_direction&issue_tag_ids&page&limit&debug=admin"
|
||
|
||
payload = {}
|
||
headers = {
|
||
'Authorization': 'XtR67a232J5u1VU_8yvm7RCVfMX0XMM76m8yMAGblDY',
|
||
'User-Agent': 'Apifox/1.0.0 (https://apifox.com)'
|
||
}
|
||
|
||
response = requests.request("GET", url, headers=headers, data=payload)
|
||
data = response.json()
|
||
# print(data)
|
||
print(data['issues'])
|
||
for issue in data['issues']:
|
||
url = f"https://gitlink.org.cn/api/v1/xumingyang21/reposyncer2/issues/{issue['id']}.json"
|
||
|
||
payload = {}
|
||
|
||
access_token = 'I9uyRzjEIObdgsD8fegdQoN2d3p3cU_7_uaNGV03S_Q'
|
||
headers = {
|
||
'Authorization': f'Bearer {access_token}',
|
||
'User-Agent': 'Apifox/1.0.0 (https://apifox.com)'
|
||
}
|
||
|
||
response = requests.request("GET", url, headers=headers, data=payload)
|
||
data = response.json()
|
||
# print(response.text)
|
||
# print(data)
|
||
print(issue['id'])
|
||
print(issue['subject'])
|
||
print(data['description'])
|
||
print(issue['status_name'])
|
||
|
||
cursor.execute(
|
||
'INSERT INTO gitlink_issue_list (number, subject, description, status_name, priority_name) VALUES (%s, %s, %s, %s, %s)',
|
||
(issue['id'], issue['subject'], data['description'], issue['status_name'], issue['priority_name']))
|
||
# # 执行查询
|
||
# cursor.execute('SELECT number FROM gitlink_issue_list')
|
||
# # 获取所有结果
|
||
# results = cursor.fetchall()
|
||
# # 提取列数据到列表中
|
||
# column_data = [row[0] for row in results]
|
||
|
||
##################将gitee仓库中的issue状态更新为关闭closed###########################
|
||
cursor.execute('SELECT number FROM gitee_issue_list')
|
||
gitee_results = cursor.fetchall()
|
||
for row in gitee_results:
|
||
issue_number = row[0]
|
||
url = f'https://gitee.com/api/v5/repos/{owner}/issues/{issue_number}'
|
||
# 构造请求头
|
||
token = 'f2be2313581c1fde50b16bf35bb655c5'
|
||
headers = {'Authorization': f'token {token}'}
|
||
|
||
# 发送POST请求
|
||
data = {
|
||
"access_token": token,
|
||
"owner": owner,
|
||
"repo": repo,
|
||
"number": issue_number,
|
||
"state": 'closed',
|
||
"labels": 'wait_for_delete'
|
||
}
|
||
# 将字典转换为查询字符串
|
||
query_string = urllib.parse.urlencode(data)
|
||
|
||
# 完整的请求 URL,包括查询字符串
|
||
full_url1 = f"{url}?{query_string}"
|
||
response = requests.patch(full_url1, headers=headers, json=data)
|
||
# 打印响应
|
||
print(response.text)
|
||
# 检查响应状态码
|
||
if response.status_code == 200:
|
||
# 注意:这里假设响应体中包含一个'number'字段作为issue的ID,但实际上Gitee可能返回不同的结构
|
||
# 你需要根据实际的响应结构来调整以下代码
|
||
issue_info = response.json()
|
||
print(f'Issue created with ID: {issue_info["number"]}')
|
||
else:
|
||
print(f"更新issue状态失败,状态码:{response.status_code},错误信息:{response.text}")
|
||
|
||
##################将gitlink中的issue创建到gitee中###########################
|
||
|
||
cursor.execute('DROP TABLE IF EXISTS gitee_issue_list')
|
||
cursor.execute('''CREATE TABLE IF NOT EXISTS gitee_issue_list
|
||
(id INT AUTO_INCREMENT PRIMARY KEY, number VARCHAR(10), title VARCHAR(100), body VARCHAR(1000), state VARCHAR(15), priority INT)''')
|
||
|
||
cursor.execute('SELECT subject, description, status_name, priority_name FROM gitlink_issue_list')
|
||
|
||
gitlink_result = cursor.fetchall()
|
||
|
||
for row in gitlink_result:
|
||
# Gitee创建issue的API URL
|
||
url = f"https://gitee.com/api/v5/repos/{owner}/issues"
|
||
# 构造请求头
|
||
token = 'f2be2313581c1fde50b16bf35bb655c5'
|
||
headers = {'Authorization': f'token {token}'}
|
||
|
||
# 发送POST请求
|
||
data = {
|
||
"access_token": token,
|
||
"owner": owner,
|
||
"repo": repo,
|
||
"title": row[0],
|
||
"body": row[1]
|
||
}
|
||
response = requests.post(url, headers=headers, json=data)
|
||
issue_info = response.json()
|
||
if row[2] == '新增':
|
||
state = 'open'
|
||
if row[2] == '正在解决':
|
||
state = 'progressing'
|
||
if row[2] == '已解决':
|
||
state = 'closed'
|
||
cursor.execute(
|
||
'INSERT INTO gitee_issue_list (number, title, body, state) VALUES (%s, %s, %s, %s)',
|
||
(issue_info['number'], row[0], row[1], state))
|
||
# 打印响应
|
||
print(response.text)
|
||
# 检查响应状态码
|
||
if response.status_code == 201:
|
||
# 注意:这里假设响应体中包含一个'number'字段作为issue的ID,但实际上Gitee可能返回不同的结构
|
||
# 你需要根据实际的响应结构来调整以下代码
|
||
issue_info = response.json()
|
||
print(f'Issue created with ID: {issue_info["number"]}')
|
||
else:
|
||
print(f"创建issue失败,状态码:{response.status_code},错误信息:{response.text}")
|
||
# 提交事务
|
||
|
||
###########################更改已经创建好的issue的状态和优先级###############################
|
||
|
||
cursor.execute('SELECT number, title, body, state, priority FROM gitee_issue_list')
|
||
# Gitee更新issue的API URL
|
||
gitee_update_result = cursor.fetchall()
|
||
for row in gitee_update_result:
|
||
issue_number = row[0]
|
||
state = row[3]
|
||
url = f'https://gitee.com/api/v5/repos/{owner}/issues/{issue_number}'
|
||
# 构造请求头
|
||
token = 'f2be2313581c1fde50b16bf35bb655c5'
|
||
headers = {'Authorization': f'token {token}'}
|
||
|
||
# 发送POST请求
|
||
data = {
|
||
"access_token": token,
|
||
"owner": owner,
|
||
"repo": repo,
|
||
"number": issue_number,
|
||
"state": state
|
||
}
|
||
# 将字典转换为查询字符串
|
||
query_string = urllib.parse.urlencode(data)
|
||
|
||
# 完整的请求 URL,包括查询字符串
|
||
full_url1 = f"{url}?{query_string}"
|
||
response = requests.patch(full_url1, headers=headers, json=data)
|
||
# 打印响应
|
||
print(response.text)
|
||
# 检查响应状态码
|
||
if response.status_code == 200:
|
||
# 注意:这里假设响应体中包含一个'number'字段作为issue的ID,但实际上Gitee可能返回不同的结构
|
||
# 你需要根据实际的响应结构来调整以下代码
|
||
issue_info = response.json()
|
||
print(f'Issue created with ID: {issue_info["number"]}')
|
||
else:
|
||
print(f"创建issue失败,状态码:{response.status_code},错误信息:{response.text}")
|
||
|
||
conn.commit()
|
||
# 关闭游标和连接
|
||
cursor.close()
|
||
conn.close()
|