zoukankan      html  css  js  c++  java
  • 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) + "
    ")
                    f.write("页面内容网址: " + unicode(support_url) + "
    ")
                    f.write("测试文档英文: " + unicode(privacy_url_en) + "
    ")
    
                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]) + "
    ")
            if len(arr) > 1:    
                f.write("测试文档2: " + unicode(arr[1]) + "
    ")
            if len(arr) > 2:
                f.write("测试文档3: " + unicode(arr[2]) + "
    ")
    
        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:])
  • 相关阅读:
    基于springcloud框架搭建项目-Eureka篇(一)
    springcloud项目实现自定义权限注解进行接口权限验证
    基于JWT实现token验证
    前端${}失效
    String常见的方法有哪些?
    Json转化的三种方式
    字符串、bute[]数组和十六进制字符串的相互转换
    Sql Server2008温故而知新系列05:查询-基础查询和条件查询
    Sql Server2008温故而知新系列04:数据增删改查之"改"
    Sql Server2008温故而知新系列03:数据增删改查之"删"
  • 原文地址:https://www.cnblogs.com/lesten/p/12979084.html
Copyright © 2011-2022 走看看