淘宝开放平台文档表格转peewee格式

懒得手写

  1. // ==UserScript==
  2. // @name 淘宝开放平台文档表格转peewee格式
  3. // @namespace https://gf.qytechs.cn/zh-CN/users/177458-bd777
  4. // @version 0.3
  5. // @description 懒得手写
  6. // @author windeng
  7. // @match https://open.taobao.com/api.htm*
  8. // @icon https://www.google.com/s2/favicons?domain=taobao.com
  9. // @require https://gf.qytechs.cn/scripts/433586-simpletools/code/SimpleTools.js?version=977251
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. function toPeeweeType(type, sample, desc) {
  14. const helpText = `${desc}. eg.${sample}`.replace(/"/g, '\\"')
  15. if (type === 'Number') return `IntegerField(null=True, help_text="${helpText}")`
  16. else if (type === 'String') return `CharField(max_length=128, null=True, help_text="${helpText}")`
  17. else if (type === 'Boolean') return `BooleanField(null=True, help_text="${helpText}")`
  18. else if (type === 'Date') return `DateTimeField(null=True, help_text="${helpText}")`
  19. }
  20.  
  21. function toPeeweeRow(field, type, sample, desc) {
  22. return `${field} = ${toPeeweeType(type, sample, desc)}`
  23. }
  24.  
  25. function getHeaders(table) {
  26. let ths = table.querySelectorAll('div.header > div.header-tr > div.header-th')
  27. let resp = []
  28. for (let th of ths) {
  29. resp.push(th.innerText.trim())
  30. }
  31. return resp
  32. }
  33.  
  34. function getRows(table) {
  35. let resp = []
  36. let trs = table.querySelectorAll('div.body > div.body-tr.leaf')
  37. for (let tr of trs) {
  38. let tds = tr.querySelectorAll('div.body-td')
  39. let row = []
  40. for (let td of tds) {
  41. row.push(td.innerText.trim())
  42. }
  43. resp.push(row)
  44. }
  45. return resp
  46. }
  47.  
  48. function handleTable(table) {
  49. let headers = getHeaders(table)
  50. console.log(headers)
  51. let rows = getRows(table)
  52. console.log(rows)
  53.  
  54. let fieldIndex = headers.indexOf('名称')
  55. let typeIndex = headers.indexOf('类型')
  56. let sampleIndex = headers.indexOf('示例值')
  57. let descIndex = headers.indexOf('描述')
  58.  
  59. let msgs = []
  60. for (let row of rows) {
  61. let field = row[fieldIndex]
  62. let type = row[typeIndex]
  63. let sample = row[sampleIndex]
  64. let desc = row[descIndex]
  65. let s = toPeeweeRow(field, type, sample, desc)
  66. msgs.push(s)
  67. }
  68. console.log(msgs.join('\n'))
  69. }
  70.  
  71. function main() {
  72. let tables = document.querySelectorAll('div.open-table')
  73. for (let table of tables) {
  74. handleTable(table)
  75. }
  76. }
  77.  
  78. async function addButton() {
  79. await WaitUntil(() => {
  80. return !!document.querySelector('div.page-title')
  81. })
  82. let elem = document.createElement('a')
  83. elem.setAttribute('id', 'to-peewee')
  84. elem.innerText = '表格转peewee格式(在console里)'
  85. elem.onclick = main
  86. let p = document.querySelector('div.page-title')
  87. p.parentNode.insertBefore(elem, p.nextSibling)
  88. }
  89.  
  90. (function () {
  91. 'use strict';
  92.  
  93. // Your code here...
  94. addButton()
  95. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址