showDoc 自动创建文档分析

ShowDoc就是一个非常适合IT团队的在线文档分享工具。https://www.showdoc.cc/

为了记录或者自动化的将一些文稿 统一记录在showdoc,一个一个复制粘贴太麻烦了,于是就有了下面这份代码

以下代码可以通过 读取文件名和文件内容 当作参数传入 然后自动上传至showdoc 的指定目录下 (可以根据需要进行修改),同时获取文档对应访问的 url 保存本地文件。

前面一部分是对 showdoc 的接口分析。 同时也使用了 https://www.showdoc.cc/page/741656402509783 showdoc 自己提供的接口 但是showdoc的接口有局限

后半部分才是 python 代码

复制代码
image/webp,image/apng,image/*,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Host: z11.cnzz.com
Sec-Fetch-Dest: image
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: cross-site
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safar

# 登陆
https://www.showdoc.cc/server/index.php?s=api/user/login?username=***&password=***
username
password

1、 # 获取列表
https://www.showdoc.cc/server/index.php?s=/api/item/myList
添加head
Cookie:
PHPSESSID=vtc7sb1b9o46da0t2i4tqt8dd9; UM_distinctid=17177e7a889201-0a244e1f9bbf56-396d7507-384000-17177e7a88afcc; cookie_token=******************; think_language=zh-CN; CNZZDATA1259614235=1538324188-1586853504-https%253A%252F%252Fwww.baidu.com%252F%7C1586858909
返回
{
  "error_code": 0,
  "data": [
    {
        "item_id": "7221167581802294",
        "uid": "214595",
        "item_name": "API文档示例",
        "item_domain": "",
        "item_type": "1",
        "last_update_time": "0",
        "item_description": "API文档示例",
        "is_del": "0",
        "creator": 1
    },
    {
        "item_id": "7424650551951107",
        "uid": "214595",
        "item_name": "百乐斗 ",
        "item_domain": "bailedou",
        "item_type": "1",
        "last_update_time": "15864312590",
        "item_description": "百乐 ",
        "is_del": "0",
        "creator": 1
    }
  ]
}

2、添加项目
/*
富华爱发了
fuhualkjad
*/

https://www.showdoc.cc/server/index.php?s=/api/item/add
item_type=1&item_name=%E5%AF%8C%E15%8D%8E%E91%BA%B1B%E5%B0%86&item_description=%E5%AF%8C%E5%8D%8E%E9%BA%BB%E5%B0%86&item_domain=fuhua&password=

3、 更新项目
https://www.showdoc.cc/server/index.php?s=/api/item/update
返回:     {"error_code":0,"data":1}

3、添加页面
id=1259614235&r=&lg=zh-cn&ntime=15868158909&cnzz_eid=15138324188-1586853504-https%3A%2F%2Fwww.baidu.com%2F&showp=2560x1440&p=https%3A%2F%2Fwww.showdoc.cc%2Fitem%2Fsetting%2F765452293022659&t=ShowDoc&umuuid=17177e7a889201-0a244e1f9bbf56-396d7507-384000-17177e7a88afcc&h=1&rnd=502287534

4、生成  api key 和 token
https://www.showdoc.cc/server/index.php?s=/api/item/getKey?id=765451293022659
{"error_code":0,"data":{"id":"173679","item_id":"7654521293022659","api_key":"******************","api_token":"******************","addtime":"1586865022","last_check_time":"0"}}

5、 创建 单独的页面地址
https://www.showdoc.cc/server/index.php?s=/api/page/createSinglePage?
page_id=4093572772585676&isCreateSiglePage=true

带Cookie
返回
{"error_code":0,"data":{"unique_key":"**************","page_id":4093157273725852676}}
复制代码

 

genShowDocUrls.py

复制代码
#-*- coding:utf-8 -*-
#usr/bin/python

import io
import sys 
import getopt

reload(sys) 
sys.setdefaultencoding( "utf-8" )

import requests
import urllib

import json
import time

import pypinyin
import os.path

Domain = 'https://www.showdoc.cc/'

def login_session(username, password):
    session = requests.Session()    
    
    UserAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
    session.headers.update({'User-Agent': UserAgent})  

    data = {
        "username" : username,
        "password" : password,
    }
    res = session.post(Domain + 'server/index.php?s=api/user/login', data=data)
    if res.text.find(u'错误') != -1:  
        return None

    return session

GetListUrl='server/index.php?s=/api/item/myList'
def getList(session):
    ListAccept= "application/json, text/plain, */*"
    session.headers.update({'Accept': Accept}) 
    res_itemlist = session.get(Domain + GetListUrl)

    result = json.loads(res_itemlist.text)
    for item in result["data"]:
        print item["item_id"], item["item_name"]

def addItem(session, item_name, item_enname):
    AddItemUrl='server/index.php?s=/api/item/add'
    encode_item_name=urllib.quote_plus(item_name)
    data = {
        'item_type': 1,
        'item_name': encode_item_name,
        'item_description': encode_item_name,
        'item_domain': item_enname,
        # 'password': md5(password).hexdigest().upper()
    }
    res = session.post(Domain + AddItemUrl, data=data)
    result = json.loads(res.text)
    if result["error_code"] != 0:
        return False

    return True

def updateItem(session, item_name, item_enname, item_id):
    AddItemUrl='server/index.php?s=/api/item/add'
    encode_item_name=urllib.quote_plus(item_name)
    data = {
        'item_type': 1,
        'item_name': encode_item_name,
        'item_description': encode_item_name,
        'item_domain': item_enname,
        # 'password': md5(password).hexdigest().upper()
    }
    res = session.post(Domain + AddItemUrl, data=data)
    result = json.loads(res.text)
    if result["error_code"] != 0:
        return False

    return True

def getItemId(session, item_domain):
    res = session.get(Domain + GetListUrl)
    result = json.loads(res.text)
    if result["error_code"] == 0:
        itemid=""
        itemcompare_data = item_domain.strip().decode('utf-8') 
        for item in result["data"]:
            # print 
            # item.strip().decode('utf-8') 
            # print item["item_id"], item["item_name"], ItemName
            if item["item_domain"].strip().decode('utf-8')  == itemcompare_data:
                itemid = item["item_id"]
                print "find item[item_id] = " + item["item_id"]
                return itemid

    return ""

# api_key    是    string    api_key,认证凭证。登录showdoc,进入具体项目后,点击右上角的”项目设置”-“开放API”便可看到
# api_token    是    string    同上
# cat_name    否    string    可选参数。当页面文档处于目录下时,请传递目录名。当目录名不存在时,showdoc会自动创建此目录。需要创建多层目录的时候请用斜杆隔开,例如 “一层/二层/三层”
# page_title    是    string    页面标题。请保证其唯一。(或者,当页面处于目录下时,请保证页面标题在该目录下唯一)。当页面标题不存在时,showdoc将会创建此页面。当页面标题存在时,将用page_content更新其内容
# page_content    是    string    页面内容,可传递markdown格式的文本或者html源码
# s_number    否    number    可选,页面序号。默认是99。数字越小,该页面越靠前
def createPage(session, api_key, api_token, title, content, index, cat_name=None):
    # https://www.showdoc.cc/server/api/item/updateByApi
    CreatePageUrl= 'server/api/item/updateByApi'
    data = {
        'api_key': api_key,
        'api_token': api_token,
        'page_title': title,
        'page_content': content,
        's_number': index
    }

    if cat_name != None:
        data["cat_name"] = cat_name

    createpage_ret = session.post(Domain + CreatePageUrl, data=data)
    createpage_retj = json.loads(createpage_ret.text)
    if createpage_retj["error_code"] == 0:
        return createpage_retj["data"]["page_id"];
    else:
        return ""

def createSinglePageUrl(session, page_id):
    GetSinglePageUrl='/server/index.php?s=/api/page/createSinglePage'
    data = {
        'page_id': page_id,
        'isCreateSiglePage':"true"
    }
    createpage_ret = session.post(Domain + GetSinglePageUrl, data=data)
    createpage_retj = json.loads(createpage_ret.text)
    if createpage_retj["error_code"] == 0:
        return createpage_retj["data"]["unique_key"];
    else:
        return ""


def getApiKey(session, item_id):
    GetKeyUrl='server/index.php?s=/api/item/getKey'
    # GetSinglePageUrl='/server/index.php?s=/api/page/createSinglePage'
    data = {
        'item_id': item_id,
    }
    
    getkey_ret = session.post(Domain + GetKeyUrl, data=data)
    print getkey_ret.text

    getkey_retj = json.loads(getkey_ret.text)
    if getkey_retj["error_code"] == 0:
        return getkey_ret.text;
    else:
        print "get getApiKey failed!!!"
        return ""


def getAppUrls(Username, Password, ItemName, ItemEnName, PageSupportName,  PageContents, TestDocuments, TestDocumentsContent):
    session = login_session(Username,Password)
    if session == None:
        print("getAppUrls Login Failed! " + Username)
        return False

    #  获取列表。如果有 就获取id 如果没有 就创建 然后重新获取ID
    ret = addItem(session, ItemName, ItemEnName)
    if ret:
        print("createItem Failed! " + ItemName)
        return False
    else:
        print("createItem Succeed! " + ItemName)


    ItemId = getItemId(session, ItemEnName)
    if len(ItemId) == 0:
        print("Need ItemId!!!")
        return False
    else:
        print "ItemId = "+ ItemId

        privacy_url_en = ""
        privacy_url = ""
        support_url = ""

        api_result_str = getApiKey(ItemId)
        if len(api_result_str) != 0:
            api_result = json.loads(api_result_str)
            api_key = api_result["data"]["api_key"]
            api_token = api_result["data"]["api_token"]
            pageid = createPage(api_key, api_token, TestDocuments, TestDocumentsContent, 1)
            if len(pageid) == 0:
                print "创建测试文档失败!"
            else:
                privacy_key = createSinglePageUrl(pageid)
                privacy_url = "https://www.showdoc.cc/p/" + privacy_key

            en_pageid = createPage(api_key, api_token, TestDocumentsEn, TestDocumentsContentEn, 2)
            if len(en_pageid) == 0:
                print "创建测试文档英文版失败!"
            else:
                privacy_key_en = createSinglePageUrl(en_pageid)
                privacy_url_en = "https://www.showdoc.cc/p/" + privacy_key_en

            support_pageid = createPage(api_key, api_token, PageSupportName, PageContents, 3)
            if len(support_pageid) == 0:
                print "创建页面内容失败!"
            else:
                support_key = createSinglePageUrl(support_pageid)
                support_url = "https://www.showdoc.cc/p/" + support_key

            with io.open(ItemName + ".txt","w",encoding='utf-8') as f:
                f.write("测试文档网址: " + unicode(privacy_url) + "\n")
                f.write("页面内容网址: " + unicode(support_url) + "\n")
                f.write("测试文档英文: " + unicode(privacy_url_en) + "\n")

            return True
        else:
            print "Get API Failed!"
            return False

def getAppUrlsInAProj(Username, Password, ProjectName, ProjectEnName, DateDirName, ItemName, PageSupportName,  PageContents, TestDocuments, TestDocumentsContent, TestDocumentsEn, TestDocumentsContentEn):
    session = login_session(Username,Password)
    if session == None:
        print("getAppUrlsInAProj Login Failed! " + Username)
        return False

    #  获取列表。如果有 就获取id 如果没有 就创建 然后重新获取ID
    ItemId = getItemId(session, ProjectEnName)
    if len(ItemId) == 0:
        ret = addItem(session, ProjectName, ProjectEnName)
        if not ret:
            print("createItem Failed! " + ItemName)
            return False
        else:
            print("createItem Succeed! " + ItemName)

        ItemId = getItemId(session, ProjectEnName)

    if len(ItemId) == 0:
        print("Need ItemId!!!")
        return False
    else:
        print "ItemId = "+ ItemId

        privacy_url_en = ""
        privacy_url = ""
        support_url = ""

        api_result_str = getApiKey(session, ItemId)
        if len(api_result_str) != 0:
            api_result = json.loads(api_result_str)
            api_key = api_result["data"]["api_key"]
            api_token = api_result["data"]["api_token"]
            pageid = createPage(session, api_key, api_token, TestDocuments, TestDocumentsContent, 1, DateDirName +"/" + ItemName + "/")
            if len(pageid) == 0:
                print "创建测试文档失败!"
            else:
                privacy_key = createSinglePageUrl(session, pageid)
                privacy_url = "https://www.showdoc.cc/p/" + privacy_key

            en_pageid = createPage(session, api_key, api_token, TestDocumentsEn, TestDocumentsContentEn, 2, DateDirName +"/" + ItemName + "/")
            if len(en_pageid) == 0:
                print "创建测试文档英文版失败!"
            else:
                privacy_key_en = createSinglePageUrl(session, en_pageid)
                privacy_url_en = "https://www.showdoc.cc/p/" + privacy_key_en

            support_pageid = createPage(session, api_key, api_token, PageSupportName, PageContents, 3, DateDirName +"/" + ItemName + "/")
            if len(support_pageid) == 0:
                print "创建页面内容失败!"
            else:
                support_key = createSinglePageUrl(session, support_pageid)
                support_url = "https://www.showdoc.cc/p/" + support_key

            return [privacy_url, privacy_url_en, support_url]
        else:
            print "Get API Failed!"
            return False


TestDocuments = "测试文档"
TestDocumentsContent = '''
测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档
测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档测试文档
'''


TestDocumentsEn = "Test Documents"
TestDocumentsContentEn = '''
Test DocumentsTest DocumentsTest DocumentsTest DocumentsTest DocumentsTest DocumentsTest DocumentsTest DocumentsTest DocumentsTest DocumentsTest DocumentsTest DocumentsTest DocumentsTest DocumentsTest Documents
Test DocumentsTest DocumentsTest DocumentsTest Documents
Test DocumentsTest DocumentsTest DocumentsTest DocumentsTest DocumentsTest DocumentsTest Documents
Test DocumentsTest DocumentsTest DocumentsTest DocumentsTest Documents
'''

ProjectName=u"项目支持资料"
ProjectEnName = "xiangmuzhichiziliao"

Username = "*********"
Password = "*********"


def genDocuments(name, fpath):
    if (len(name) == 0):
        print("genDocuments Failed! Need Item name. " + ItemName)
        sys.exit(2)

    if (len(fpath) == 0):
        print("genDocuments Failed! Need fpath name. " + ItemName)
        sys.exit(2)

    ItemName = ""
    ItemEnName = ""
    PageContents = ""

    if fpath[-1] == "/":
        fpath=fpath[0:-1]

    with io.open(os.path.join(fpath, "描述.txt"),"r",encoding='utf-8') as f:
        PageContents = f.read()
        # print PageContents
        f.close()

    ItemName = name
    PageSupportName = ItemName + "页面内容"
    ItemEnName = pinyin(unicode(ItemName))

    DateDirName = str(time.strftime('%Y%m%d',time.localtime(time.time())))
    arr = getAppUrlsInAProj(Username, Password, ProjectName, ProjectEnName, DateDirName, ItemName, PageSupportName,  PageContents, TestDocuments, TestDocumentsContent, TestDocumentsEn, TestDocumentsContentEn)
    
    if not arr:
        arr = []

    with io.open(os.path.join(os.path.dirname(fpath), ItemName + ".txt") ,"w",encoding='utf-8') as f:
        if len(arr) > 0:
            f.write("测试文档1: " + unicode(arr[0]) + "\n")
        if len(arr) > 1:    
            f.write("测试文档2: " + unicode(arr[1]) + "\n")
        if len(arr) > 2:
            f.write("测试文档3: " + unicode(arr[2]) + "\n")

    print("genDocuments Succeed!  Item name. " + ItemName)

from pypinyin import pinyin
def main(argv):
    ItemName = ""
    ItemPath = ""

    try:
        opts, args = getopt.getopt(argv,"hi:p:",["ifile=","ofile="])
    except getopt.GetoptError:
        print 'genDocuments.py -ipath <PageContentsFile> -iname <ProjectName>'
        sys.exit(2)
    
    for opt, arg in opts:
        if opt == '-h':
            print 'genDocuments.py --ipath <PageContentsFile> --iname <ProjectName>'
            sys.exit()
        elif opt in ("-p", "--ipath"):
            ItemPath = arg
            
        elif opt in ("-i", "--iname"):
            ItemName = arg

    genDocuments(ItemName, ItemPath)

if __name__=='__main__':
    #ItemName = "阿里觉得浪费1234"
    #ItemEnName = pinyin(ItemName)
    #PageSupportName = ItemName + ""
    #PageContents = "发啦快就收到了饭卡结束两地分居阿里觉得失联飞机卡里的世界"
    #getAppUrls(Username, Password, ItemName, ItemEnName, PageSupportName,  PageContents, TestDocuments, TestDocumentsContent)
   main(sys.argv[1:])
复制代码

 

posted @   lesten  阅读(733)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示