reposync/issue_sync/issue_gitlink_to_gitee.py

243 lines
9.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()