|
| 1 | +# -*- coding: UTF-8 -*- |
| 2 | +import requests |
| 3 | +from http.server import BaseHTTPRequestHandler |
| 4 | +import json |
| 5 | +import re |
| 6 | +headers = { |
| 7 | + "accept": "text/html", |
| 8 | + "accept-language": "zh-CN,zh;q=0.9,en;q=0.8", |
| 9 | + "if-none-match": 'W/"ef80211272199b848c3cee5f9135b72d"', |
| 10 | + "priority": "u=1, i", |
| 11 | + "sec-ch-ua": '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"', |
| 12 | + "sec-ch-ua-mobile": "?0", |
| 13 | + "sec-ch-ua-platform": '"macOS"', |
| 14 | + "sec-fetch-dest": "empty", |
| 15 | + "sec-fetch-mode": "cors", |
| 16 | + "sec-fetch-site": "same-origin", |
| 17 | + "x-requested-with": "XMLHttpRequest" |
| 18 | +} |
| 19 | +def list_split(items, n): |
| 20 | + return [items[i:i + n] for i in range(0, len(items), n)] |
| 21 | +def getdata(name): |
| 22 | + gitpage = requests.get("https://github.com/" + name + "?action=show&controller=profiles&tab=contributions&user_id=" + name, headers=headers) |
| 23 | + # 写个正则匹配 datastr 中data-date 和 data-leve |
| 24 | + # data-level="(\d+)" |
| 25 | + pattern = r'data-date="(\d{4}-\d{2}-\d{2})" id="contribution-day-component-\d-\d{1,2}" data-level="(\d+)"' |
| 26 | + matches = re.findall(pattern, gitpage.text) |
| 27 | + # 转成map {"2024-01-28":0,"2024-02-04":0,"2024-02-11":0} |
| 28 | + datemap = {item[0]:item[1] for item in matches} |
| 29 | + # 转成list ["2024-01-28","2024-02-04","2024-02-11"] 并且日期排序 |
| 30 | + datadate = [item[0] for item in matches] |
| 31 | + datadate.sort() |
| 32 | + datalist = [] |
| 33 | + datacount=0 |
| 34 | + # 循环datadate 生成datalist |
| 35 | + for item in datadate: |
| 36 | + itemObj = {"date": item, "count": datemap[item]} |
| 37 | + datalist.append(itemObj) |
| 38 | + # datemap[item]} 是字符串 |
| 39 | + datacount+=int(datemap[item]) |
| 40 | + datalistsplit = list_split(datalist, 7) |
| 41 | + return { |
| 42 | + "total": datacount, |
| 43 | + "contributions": datalistsplit |
| 44 | + } |
| 45 | +class handler(BaseHTTPRequestHandler): |
| 46 | + def do_GET(self): |
| 47 | + path = self.path |
| 48 | + user = path.split('?')[1] |
| 49 | + data = getdata(user) |
| 50 | + self.send_response(200) |
| 51 | + self.send_header('Access-Control-Allow-Origin', '*') |
| 52 | + self.send_header('Content-type', 'application/json') |
| 53 | + self.end_headers() |
| 54 | + self.wfile.write(json.dumps(data).encode('utf-8')) |
| 55 | + return |
| 56 | + |
0 commit comments