commit 1d4de5e3d9a6c71cd42964258fb770556ded0e9f Author: iVampireSP Date: Thu Feb 15 22:48:32 2024 +0800 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6710efa --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +images/ +./kv.db +.idea/ \ No newline at end of file diff --git a/__pycache__/kv.cpython-310.pyc b/__pycache__/kv.cpython-310.pyc new file mode 100644 index 0000000..2df295c Binary files /dev/null and b/__pycache__/kv.cpython-310.pyc differ diff --git a/__pycache__/wp.cpython-310.pyc b/__pycache__/wp.cpython-310.pyc new file mode 100644 index 0000000..0e7342a Binary files /dev/null and b/__pycache__/wp.cpython-310.pyc differ diff --git a/kv.db b/kv.db new file mode 100644 index 0000000..9de960e Binary files /dev/null and b/kv.db differ diff --git a/kv.py b/kv.py new file mode 100644 index 0000000..03dcffa --- /dev/null +++ b/kv.py @@ -0,0 +1,70 @@ +import sqlite3 + + +def create(): + conn = sqlite3.connect('kv.db') + c = conn.cursor() + + # create with index + c.execute('''CREATE TABLE IF NOT EXISTS kv (key text, value text, PRIMARY KEY(key))''') + + conn.commit() + conn.close() + + +def set(key, value): + conn = sqlite3.connect('kv.db') + c = conn.cursor() + + # check table + c.execute('''SELECT name FROM sqlite_master WHERE type='table' AND name='kv' ''') + result = c.fetchone() + if not result: + create() + + # create with index + c.execute('''INSERT OR REPLACE INTO kv (key, value) VALUES (?, ?)''', (key, value)) + + conn.commit() + conn.close() + + +def get(key): + conn = sqlite3.connect('kv.db') + c = conn.cursor() + + # check table + c.execute('''SELECT name FROM sqlite_master WHERE type='table' AND name='kv' ''') + result = c.fetchone() + if not result: + create() + + # create with index + c.execute('''SELECT value FROM kv WHERE key=?''', (key,)) + + result = c.fetchone() + + conn.commit() + conn.close() + + if result: + return result[0] + else: + return None + + +def delete(key): + conn = sqlite3.connect('kv.db') + c = conn.cursor() + + # check table + c.execute('''SELECT name FROM sqlite_master WHERE type='table' AND name='kv' ''') + result = c.fetchone() + if not result: + create() + + # create with index + c.execute('''DELETE FROM kv WHERE key=?''', (key,)) + + conn.commit() + conn.close() diff --git a/main.py b/main.py new file mode 100644 index 0000000..e39e20c --- /dev/null +++ b/main.py @@ -0,0 +1,3 @@ +import kv, wp + +print(wp.post_post('test', 'test')) \ No newline at end of file diff --git a/wp.py b/wp.py new file mode 100644 index 0000000..da59912 --- /dev/null +++ b/wp.py @@ -0,0 +1,92 @@ +import base64 +import os + +import requests, json + +wp_url = "http://192.168.81.231/wp-json/wp/v2/" + +user = "api" +passwd = "JBu7 Q2oZ rDze okev nhHo jXHM" + +get = "get" +post = "post" + + +def req(method="get", path="", params=None): + if params is None: + params = {} + url = wp_url + path + + if method == "get": + response = requests.get(url, params=params, auth=(user, passwd)) + + elif method == "post": + response = requests.post(url, data=params, auth=(user, passwd)) + + else: + raise Exception("method error") + + return response.json() + + +def get_posts(): + params = { + "per_page": 100 + } + return req(get, "posts", params) + + +# 发布 +def post_post(title, content, featured_media=None): + data = { + "title": title, + "content": content, + "status": "publish" + } + + if featured_media: + data["featured_media"] = featured_media + + return req(post, "posts", data) + + +def upload_media(filepath): + data = open(filepath, 'rb').read() + filename = os.path.basename(filepath) + + # get content type + import mimetypes + mime_type = mimetypes.guess_type(filename)[0] + if mime_type is None: + mime_type = 'image/jpg' + + res = requests.post(url=wp_url + 'media', + data=data, + headers={'Content-Type': mime_type, + 'Content-Disposition': 'attachment; filename=%s' % filename}, + auth=(user, passwd)) + # pp = pprint.PrettyPrinter(indent=4) ## print it pretty. + # pp.pprint(res.json()) #this is nice when you need it + new_dict = res.json() + new_id = new_dict.get('id') + # link = new_dict.get('guid').get("rendered") + return new_id + + +def get_post_url(post_id): + # get rendered url + res = req(get, "posts/" + str(post_id)) + + print(res) + return res['link'] + + +def get_media_url(media_id): + # get rendered url + res = req(get, "media/" + str(media_id)) + + # if exists + if res['guid']['rendered']: + return res['guid']['rendered'] + + return None \ No newline at end of file diff --git a/ys_1.py b/ys_1.py new file mode 100644 index 0000000..f6164f8 --- /dev/null +++ b/ys_1.py @@ -0,0 +1,111 @@ +# 原神公告 +import base64 + +import requests, json + +import wp + + +def api_get(page=1): + api_url = "https://bbs-api.miyoushe.com/post/wapi/getNewsList?gids=" + str(page) + "&last_id=20&page_size=20&type=2" + + headers = { + 'Host': 'bbs-api.miyoushe.com', + 'Connection': 'keep-alive', + 'Accept': 'application/json, text/plain, */*', + 'Origin': 'https://bbs.mihoyo.com', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; Redmi K30 Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.210 Mobile Safari/537.36', + 'Referer': 'https://bbs.mihoyo.com/ys/article/' + str(page), + 'Accept-Encoding': 'gzip, deflate, br', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' + } + + response = requests.get(api_url, headers=headers) + + return response.json() + + +def get_post(post_id): + api_url = "https://bbs-api.miyoushe.com/post/wapi/getPostFull?gids=2&post_id=" + str(post_id) + "&read=1" + + headers = { + 'Host': 'bbs-api.miyoushe.com', + 'Connection': 'keep-alive', + 'Accept': 'application/json, text/plain, */*', + 'Origin': 'https://bbs.mihoyo.com', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; Redmi K30 Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.210 Mobile Safari/537.36', + 'Referer': 'https://bbs.mihoyo.com/ys/article/' + str(post_id), + 'Accept-Encoding': 'gzip, deflate, br', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' + } + + response = requests.get(api_url, headers=headers) + + return response.json() + +def get(page=1): + print("正在获取第" + str(page) + "页公告") + + data = api_get(page) + + if data['data']['list']: + for i in data['data']['list']: + post = i['post'] + post_id = post['post_id'] + image_url = post['images'][0] + + # 保存图片到目录, 遵循url命名 + image = requests.get(image_url).content + path = "images/" + image_url.split("/")[-1] + + with open(path, 'wb') as f: + f.write(image) + + # 上传图片到wp + media_id = wp.upload_media(path) + + post_data = get_post(post_id) + + if post_data['data']['post']['post']['content']: + content = post_data['data']['post']['post']['content'] + + # 下载所有图片 + for i2 in post_data['data']['post']['post']['images']: + image_url = i2 + image = requests.get(image_url).content + path = "images/" + image_url.split("/")[-1] + + with open(path, 'wb') as f: + f.write(image) + + # 上传图片到wp + media_id = wp.upload_media(path) + + # 获取 WP 图片地址 + wp_image_url = wp.get_media_url(media_id) + + # 替换图片url + content = content.replace(image_url, wp_image_url) + + # 发布 + print("正在发布" + post['subject']) + + # 在 Content 里面加入原文链接 + content = content + "

原文链接:https://bbs.mihoyo.com/ys/article/" + str(post_id) + "

" + + wp.post_post(post['subject'], content, media_id) + + print("成功发布" + post['subject']) + + else: + print("没有更多公告了") + + +if __name__ == '__main__': + + # print(get_post(43547002)) + page = 1 + while True: + get(page) + page += 1 + input("按回车键获取下一页公告") \ No newline at end of file