Пример #1
0
    def fetchContentBlog(self, param=None):

        aid = str(param['id'])

        url = "https://bizapi.csdn.net/blog-console-api/v3/editor/getArticle?id=" + aid + "&model_type"

        uuid = self.__createUUID()
        sign = self.__httpGetSign(uuid, url)

        headers = {
            "Host": "bizapi.csdn.net",
            "User-Agent":
            "Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0",
            "Accept": "application/json, text/plain, */*",
            "Accept-Language": "en-US,en;q=0.5",
            "Accept-Encoding": "gzip, deflate, br",
            "Referer": "https://editor.csdn.net/md/?articleId=" + aid,
            "X-Ca-Key": "203803574",
            "X-Ca-Nonce": uuid,
            "X-Ca-Signature": sign,
            "X-Ca-Signature-Headers": "x-ca-key,x-ca-nonce",
            "Origin": "https://editor.csdn.net",
            "Connection": "keep-alive",
            "TE": "Trailers",
            "Cache-Control": "max-age=0"
        }

        response = HttpRequestUtil.get(url,
                                       headers=headers,
                                       cookies=self.__cookies)
        if response.status_code != 200:
            return HttpResult.error(info="获取失败")

        return HttpResult.ok(info="获取成功", data=response.text)
Пример #2
0
    def __createArticleDraft(self, title, content):
        url = 'https://juejin.cn/content_api/v1/article_draft/create'

        # "category_id": 6809637772874219534 -- 阅读
        # "tag_id": 6809640507191328782  -- markdown
        payload = {"category_id": "6809637772874219534", "tag_ids": ["6809640507191328782"], "link_url": "",
                   "cover_image": "", "title": title,
                   "brief_content": "", "edit_type": 10, "html_content": "deprecated", "mark_content": content}

        headers = {
            'Accept': '*/*',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'en-US,en;q=0.5',
            'Connection': 'keep-alive',
            'Content-Type': 'application/json',
            'Content-Length': StringUtil.objectStringLen(payload),
            'Host': 'juejin.cn',
            'Origin': 'https://juejin.cn',
            'Referer': 'https://juejin.cn/editor/drafts/new?v=2',
            'TE': 'Trailers',
            'Cache-Control': 'max-age=0',
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0'
        }

        response = HttpRequestUtil.post(url, headers=headers, data=json.dumps(payload), cookies=self.__cookies)
        result = json.loads(response.text)
        if 0 != result['err_no']:
            return False, "草稿新建失败"

        return True, result['data']
Пример #3
0
    def fetchBlogList(self, param=None):
        """
        获取某一个分类下的文章列表
        """

        url = 'https://api.juejin.cn/content_api/v1/article/query_list'

        userInfo = self.__getUserInfo()
        if 0 != userInfo['err_no']:
            return HttpResult.error(info="获取失败")

        userId = userInfo['data']['user_id']

        payload = {"user_id": userId, "sort_type": 2, "cursor": "0"}
        headers = {
            'Accept': '*/*',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'en-US,en;q=0.5',
            'Connection': 'keep-alive',
            'Content-Length': str(len(payload)),
            'Content-Type': 'application/json',
            'Host': 'api.juejin.cn',
            'Origin': 'https://juejin.cn',
            'Referer': 'https://juejin.cn/user/' + userId + '/post',
            'TE': 'Trailers',
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0'
        }

        response = HttpRequestUtil.post(url, headers=headers, data=json.dumps(payload), cookies=self.__cookies)
        result = json.loads(response.text)
        if 0 != result['err_no']:
            return HttpResult.error(info="获取失败")

        return HttpResult.ok(info="获取成功", data=result['data'])
Пример #4
0
    def deleteBlog(self, param):
        """
        删除
        """

        url = 'https://api.juejin.cn/content_api/v1/article/delete'
        article_id = param['id']
        payload = {"article_id": article_id}
        headers = {
            'Accept': '*/*',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'en-US,en;q=0.5',
            'Connection': 'keep-alive',
            'Content-Type': 'application/json',
            'Content-Length': str(len(payload)),
            'Host': 'api.juejin.cn',
            'Origin': 'https://juejin.cn',
            'Referer': 'https://juejin.cn/user/' + article_id + '/posts',
            'TE': 'Trailers',
            'Cache-Control': 'max-age=0',
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0'
        }

        response = HttpRequestUtil.post(url, headers=headers, data=json.dumps(payload), cookies=self.__cookies)
        result = json.loads(response.text)
        if 0 != result['err_no']:
            return HttpResult.error(info="删除失败")

        return HttpResult.ok(info="删除成功")
Пример #5
0
    def publishUpdateBlog(self, param):

        # 先保存更新内容
        if not self.__saveUpdate(param):
            return HttpResult.error(info="更新发布失败")

        # 发布更新
        url = "https://www.jianshu.com/author/notes/" + str(param['id']) + "/publicize"
        headers = {
            "Host": "www.jianshu.com",
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0",
            "Accept": "application/json",
            "Accept-Language": "en-US,en;q=0.5",
            "Accept-Encoding": "gzip, deflate, br",
            "Content-Type": "application/json; charset=UTF-8",
            "Content-Length": str(2),
            "Origin": "https://www.jianshu.com",
            "Connection": "keep-alive",
            "Referer": "https://www.jianshu.com/writer",
        }

        payload = {}
        response = HttpRequestUtil.post(url, headers=headers, data=json.dumps(payload), cookies=self.__cookies)
        result = json.loads(response.text)
        if 'error' in result:
            return HttpResult.error(info=result['error'][0]['message'])

        return HttpResult.ok(info="更新发布成功", data=result)
Пример #6
0
    def fetchBlogList(self, param=None):
        url = "https://bizapi.csdn.net/blog-console-api/v1/column/getAllArticles?column_id=" + str(
            param['id'])

        uuid = self.__createUUID()
        sign = self.__httpGetSign(uuid, url)

        headers = {
            "Host": "bizapi.csdn.net",
            "User-Agent":
            "Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0",
            "Accept": "application/json, text/plain, */*",
            "Accept-Language": "en-US,en;q=0.5",
            "Accept-Encoding": "gzip, deflate, br",
            "Referer": "https://mp.csdn.net/console/column/allColumnList",
            "X-Ca-Key": "203803574",
            "X-Ca-Nonce": uuid,
            "X-Ca-Signature": sign,
            "X-Ca-Signature-Headers": "x-ca-key,x-ca-nonce",
            "Origin": "https://mp.csdn.net",
            "Connection": "keep-alive",
            "TE": "Trailers"
        }

        response = HttpRequestUtil.get(url,
                                       headers=headers,
                                       cookies=self.__cookies)
        if response.status_code != 200:
            return HttpResult.error(info="获取失败")

        result = json.loads(response.text)

        return HttpResult.ok(info="获取成功", data=result['data'])
Пример #7
0
    def publishNewBlog(self, param):
        url = "	https://bizapi.csdn.net/blog-console-api/v3/mdeditor/saveArticle"
        uuid = self.__createUUID()
        caSignStr = f"POST\n*/*\n\napplication/json\n\nx-ca-key:203803574\nx-ca-nonce:{uuid}\n/blog-console-api/v3/mdeditor/saveArticle".encode(
        )
        sign = self.__httpPostSign(caSignStr)

        payload = {
            "title": str(param['title']),
            "markdowncontent": str(param['content']),
            "content": str(param['content']),
            "readType": "public",
            "tags": "",
            "status": 0,
            "categories": str(param['cate']),
            "type": "original",
            "original_link": "",
            "authorized_status": False,
            "not_auto_saved": "1",
            "source": "pc_mdeditor"
        }
        headers = {
            "Host": "bizapi.csdn.net",
            "User-Agent":
            "Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0",
            "Accept": "*/*",
            "Accept-Language": "en-US,en;q=0.5",
            "Accept-Encoding": "gzip, deflate, br",
            "Referer": 'https://editor.csdn.net/md/',
            "X-Ca-Key": "203803574",
            "X-Ca-Nonce": uuid,
            "X-Ca-Signature": sign,
            "X-Ca-Signature-Headers": "x-ca-key,x-ca-nonce",
            "Origin": "https://editor.csdn.net",
            "Connection": "keep-alive",
            "TE": "Trailers",
            "Content-Type": "application/json",
            "Content-Length": str(len(payload))
        }

        response = HttpRequestUtil.post(url,
                                        headers=headers,
                                        data=json.dumps(payload),
                                        cookies=self.__cookies)
        if response.status_code != 200:
            return HttpResult.error(info="发布失败")

        return HttpResult.ok(info="发布成功", data=response.text)
Пример #8
0
    def deleteBlog(self, param):
        url = 'https://mp.toutiao.com/mp/agw/article/delete/'

        blog_attr = param['blog']['article_attr']

        logger.info(blog_attr)

        item_id = str(blog_attr['item_id'])
        mp_id = str(blog_attr['mp_id'])
        create_time = str(blog_attr['create_time'])
        article_type = str(blog_attr['type'])

        pgc_cell = json.loads(blog_attr['pgc_cell'])
        group_source = str(pgc_cell['group_source'])
        has_article_pgc = str(pgc_cell['has_article_pgc'])

        payload = 'item_id=' + item_id \
                  + '&pgc_id=' + item_id \
                  + '&id=' + item_id \
                  + '&article_type=' + article_type \
                  + '&group_id=' + item_id \
                  + '&source_type=0&has_article_pgc=' + has_article_pgc \
                  + '&book_id=&create_time=' + create_time \
                  + '&group_source=' + group_source \
                  + '&mp_id=' + mp_id

        headers = {
            "Host": "mp.toutiao.com",
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0",
            "Accept": "application/json, text/plain, */*",
            "Accept-Language": "en-US,en;q=0.5",
            "Accept-Encoding": "gzip, deflate",
            "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
            "Content-Length": str(len(payload)),
            "Origin": "https://mp.toutiao.com",
            "Referer": "https://mp.toutiao.com/profile_v4/graphic/articles",
            "Connection": "keep-alive",
            "TE": "Trailers"
        }

        response = HttpRequestUtil.post(url, headers=headers, data=json.dumps(payload), cookies=self.__cookies)
        if response.status_code != 200:
            return HttpResult.error(info="删除失败")

        return HttpResult.ok(info="删除成功")
Пример #9
0
    def __getUserInfo(self):
        url = 'https://api.juejin.cn/user_api/v1/user/get?aid=2608&not_self=0'
        headers = {
            'Accept': '*/*',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'en-US,en;q=0.5',
            'Connection': 'keep-alive',
            'Content-Type': 'application/json',
            'Host': 'api.juejin.cn',
            'Origin': 'https://juejin.cn',
            'Referer': 'https://juejin.cn/',
            'TE': 'Trailers',
            'Cache-Control': 'max-age=0',
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0'
        }

        response = HttpRequestUtil.get(url, headers=headers, cookies=self.__cookies)
        return json.loads(response.text)
Пример #10
0
    def fetchContentBlog(self, param=None):
        url = "https://www.jianshu.com/author/notes/" + str(param["id"]) + "/content"
        headers = {
            "Host": "www.jianshu.com",
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0",
            "Accept": "application/json",
            "Accept-Language": "en-US,en;q=0.5",
            "Cache-Control": "max-age=0",
            "Accept-Encoding": "gzip, deflate, br",
            "Content-Type": "application/json; charset=UTF-8",
            "Connection": "keep-alive",
            "Referer": "https://www.jianshu.com/writer",
        }

        response = HttpRequestUtil.get(url, headers=headers, cookies=self.__cookies)
        if response.status_code != 200:
            return HttpResult.error(info="获取失败")

        return HttpResult.ok(info="获取成功", data=response.text)
Пример #11
0
    def __fetchBlogCategoryList(self):
        headers = {
            "Host": "www.jianshu.com",
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0",
            "Accept": "application/json",
            "Accept-Language": "en-US,en;q=0.5",
            "Cache-Control": "max-age=0",
            "Accept-Encoding": "gzip, deflate, br",
            "Content-Type": "application/json; charset=UTF-8",
            "Connection": "keep-alive",
            "Referer": "https://www.jianshu.com/writer",
        }

        url = 'https://www.jianshu.com/author/notebooks'
        response = HttpRequestUtil.get(url, headers=headers, cookies=self.__cookies)
        if response.status_code != 200:
            return False, ''

        return True, response.text
Пример #12
0
    def fetchContentBlog(self, param=None):

        aid = str(param['id'])

        url = "https://mp.toutiao.com/mp/agw/article/edit?pgc_id=" + aid + "&format=json"
        headers = {
            "Host": "mp.toutiao.com",
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0",
            "Accept": "application/json, text/plain, */*",
            "Accept-Language": "en-US,en;q=0.5",
            "Accept-Encoding": "gzip, deflate",
            "Connection": "keep-alive",
            "Referer": "https://mp.toutiao.com/profile_v4/graphic/publish?pgc_id=" + aid
        }

        response = HttpRequestUtil.get(url, headers=headers, cookies=self.__cookies)
        if response.status_code != 200:
            return HttpResult.error(info="获取失败")

        return HttpResult.ok(info="获取成功", data=response.text)
Пример #13
0
    def __createDefaultNewBlog(self, cateId):
        payload = {"notebook_id": cateId, "title": TimeUtils.getNowDate(), "at_bottom": True}

        url = 'https://www.jianshu.com/author/notes'
        headers = {
            "Host": "www.jianshu.com",
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0",
            "Accept": "application/json",
            "Accept-Language": "en-US,en;q=0.5",
            "Accept-Encoding": "gzip, deflate, br",
            "Content-Type": "application/json; charset=UTF-8",
            "Content-Length": str(payload),
            "Origin": "https://www.jianshu.com",
            "Connection": "keep-alive",
            "Referer": "https://www.jianshu.com/writer",
        }
        response = HttpRequestUtil.post(url, headers=headers, data=json.dumps(payload), cookies=self.__cookies)
        if response.status_code != 200:
            return False, ''

        return True, response.text
Пример #14
0
    def deleteBlog(self, param):
        url = 'https://bizapi.csdn.net/blog-console-api/v1/article/del'

        uuid = self.__createUUID()
        uri = urlparse(url)
        caSignStr = f"POST\napplication/json, text/plain, */*\n\napplication/json\n\nx-ca-key:203803574\nx-ca-nonce:{uuid}\n{uri.path}".encode(
        )

        sign = self.__httpPostSign(caSignStr)

        payload = {"article_id": str(param['id']), "deep": "false"}
        headers = {
            "Host": "bizapi.csdn.net",
            "User-Agent":
            "Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0",
            "Accept": "application/json, text/plain, */*",
            "Accept-Language": "en-US,en;q=0.5",
            "Accept-Encoding": "gzip, deflate, br",
            "Referer": 'https://mp.csdn.net/console/article',
            "X-Ca-Key": "203803574",
            "X-Ca-Nonce": uuid,
            "X-Ca-Signature": sign,
            "X-Ca-Signature-Headers": "x-ca-key,x-ca-nonce",
            "Origin": "https://editor.csdn.net",
            "Connection": "keep-alive",
            "TE": "Trailers",
            "Cache-Control": "max-age=0",
            "Content-Type": "application/json",
            "Content-Length": str(len(payload))
        }

        response = HttpRequestUtil.post(url,
                                        headers=headers,
                                        data=json.dumps(payload),
                                        cookies=self.__cookies)
        if response.status_code != 200:
            return HttpResult.error(info="删除失败")

        return HttpResult.ok(info="删除成功", data=response.text)
Пример #15
0
    def fetchBlogList(self, param=None):
        # url = 'https://mp.toutiao.com/mp/agw/creator_center/list?type=2&status=0&start_cursor=0&end_cursor=0&size=10&mode=2&need_stat=true&page_time={"index":1,"time_stamp":0}&filter_params={"search_word":"","source":0}&app_id=1231'
        url = 'https://mp.toutiao.com/mp/agw/creator_center/list?'

        headers = {
            "Host": "mp.toutiao.com",
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0",
            "Accept": "application/json, text/plain, */*",
            "Accept-Language": "en-US,en;q=0.5",
            "Accept-Encoding": "gzip, deflate",
            "Connection": "keep-alive",
            "Referer": "https://mp.toutiao.com/profile_v4/graphic/articles"
        }

        '''
        response.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩 类型:bytes
        reponse.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码。类型:str
        '''
        response = HttpRequestUtil.get(url, headers=headers, cookies=self.__cookies)
        if response.status_code != 200:
            return HttpResult.error(info="获取失败")

        return HttpResult.ok(info="获取成功", data=response.text)
Пример #16
0
    def __saveUpdate(self, param):
        url = "https://www.jianshu.com/author/notes/" + str(param["id"])
        headers = {
            "Host": "www.jianshu.com",
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0",
            "Accept": "application/json",
            "Accept-Language": "en-US,en;q=0.5",
            "Accept-Encoding": "gzip, deflate, br",
            "Content-Type": "application/json; charset=UTF-8",
            "Content-Length": str(len(param["content"])),
            "Origin": "https://www.jianshu.com",
            "Connection": "keep-alive",
            "Referer": "https://www.jianshu.com/writer",
        }

        payload = {"id": str(param["id"]), "autosave_control": param['autosave_control'], "title": param['title'],
                   "content": param['content']}

        response = HttpRequestUtil.put(url, headers=headers, data=json.dumps(payload), cookies=self.__cookies)
        if response.status_code != 200:
            return False

        return True
Пример #17
0
    def __updateArticleDraft(self, param):
        url = 'https://juejin.cn/content_api/v1/article_draft/update'

        draft_id = param['meta']['blog']['article_info']['draft_id']
        category_id = param['meta']['blog']['category']['category_id']
        tag_ids = []
        for tag in param['meta']['blog']['tags']:
            tag_ids.append(tag['tag_id'])

        title = param['title']

        payload = {"id": draft_id, "category_id": category_id, "tag_ids": tag_ids,
                   "link_url": "", "cover_image": "", "is_gfw": 0, "title": title, "brief_content": "", "is_english": 0,
                   "is_original": 1, "edit_type": 10, "html_content": "deprecated",
                   "mark_content": param['content']}

        headers = {
            'Accept': '*/*',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'en-US,en;q=0.5',
            'Connection': 'keep-alive',
            'Content-Type': 'application/json',
            'Content-Length': str(len(str(payload))),
            'Host': 'juejin.cn',
            'Origin': 'https://juejin.cn',
            'Referer': 'https://juejin.cn/editor/drafts/' + draft_id,
            'TE': 'Trailers',
            'Cache-Control': 'max-age=0',
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0'
        }

        response = HttpRequestUtil.post(url, headers=headers, data=json.dumps(payload), cookies=self.__cookies)
        result = json.loads(response.text)
        if 0 != result['err_no']:
            return False, "草稿保存失败"

        return True, result['data']
Пример #18
0
    def deleteBlog(self, param):

        url = "https://www.jianshu.com/author/notes/" + str(param['id']) + "/soft_destroy"
        headers = {
            "Host": "www.jianshu.com",
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0",
            "Accept": "application/json",
            "Accept-Language": "en-US,en;q=0.5",
            "Accept-Encoding": "gzip, deflate, br",
            "Content-Type": "application/json; charset=UTF-8",
            "Content-Length": str(2),
            "Origin": "https://www.jianshu.com",
            "Connection": "keep-alive",
            "Referer": "https://www.jianshu.com/writer",
        }

        payload = {}

        response = HttpRequestUtil.post(url, headers=headers, data=json.dumps(payload), cookies=self.__cookies)
        if response.status_code != 200:
            return HttpResult.error(info="删除失败")

        result = json.loads(response.text)
        return HttpResult.ok(info="删除成功", data=result)