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)
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']
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'])
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="删除成功")
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)
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'])
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)
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="删除成功")
def __getUserInfo(self): url = 'https://api.juejin.cn/user_api/v1/user/get?aid=2608¬_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)
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)
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
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)
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
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)
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)
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
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']
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)