GitHub Action commited on
Commit ·
28f91f7
1
Parent(s): af8360f
Sync from GitHub with Git LFS
Browse files
scripts/publish_to_blogger.py
CHANGED
|
@@ -3,7 +3,7 @@ import json
|
|
| 3 |
import hashlib
|
| 4 |
import time
|
| 5 |
import re
|
| 6 |
-
import
|
| 7 |
from pathlib import Path
|
| 8 |
|
| 9 |
import markdown2
|
|
@@ -26,7 +26,6 @@ def convert_md_links(md_text: str) -> str:
|
|
| 26 |
text = match.group(1)
|
| 27 |
link = match.group(2)
|
| 28 |
|
| 29 |
-
# если это абсолютный URL или не .md — оставляем как есть
|
| 30 |
if link.startswith("http://") or link.startswith("https://") or not link.endswith(".md"):
|
| 31 |
return match.group(0)
|
| 32 |
|
|
@@ -53,20 +52,18 @@ def file_hash(path):
|
|
| 53 |
return hashlib.md5(Path(path).read_bytes()).hexdigest()
|
| 54 |
|
| 55 |
|
| 56 |
-
def main():
|
| 57 |
-
# Загружаем токен.json
|
| 58 |
creds = None
|
| 59 |
if os.path.exists(TOKEN_FILE):
|
| 60 |
creds = Credentials.from_authorized_user_file(TOKEN_FILE, ["https://www.googleapis.com/auth/blogger"])
|
| 61 |
|
| 62 |
-
# Если токен просрочен, обновим
|
| 63 |
if creds and creds.expired and creds.refresh_token:
|
| 64 |
creds.refresh(Request())
|
| 65 |
with open(TOKEN_FILE, "w") as token_file:
|
| 66 |
token_file.write(creds.to_json())
|
| 67 |
|
| 68 |
service = build("blogger", "v3", credentials=creds)
|
| 69 |
-
|
| 70 |
published = load_published()
|
| 71 |
|
| 72 |
md_files = list(Path("docs").rglob("*.md"))
|
|
@@ -74,10 +71,10 @@ def main():
|
|
| 74 |
name = md_file.stem
|
| 75 |
h = file_hash(md_file)
|
| 76 |
|
| 77 |
-
if name in published and published[name]["hash"] == h:
|
| 78 |
continue # ничего не изменилось
|
| 79 |
|
| 80 |
-
print(f"📝 Новый или изменённый пост: {name}")
|
| 81 |
|
| 82 |
md_text = md_file.read_text(encoding="utf-8")
|
| 83 |
md_text = convert_md_links(md_text)
|
|
@@ -112,4 +109,8 @@ def main():
|
|
| 112 |
|
| 113 |
|
| 114 |
if __name__ == "__main__":
|
| 115 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
import hashlib
|
| 4 |
import time
|
| 5 |
import re
|
| 6 |
+
import argparse
|
| 7 |
from pathlib import Path
|
| 8 |
|
| 9 |
import markdown2
|
|
|
|
| 26 |
text = match.group(1)
|
| 27 |
link = match.group(2)
|
| 28 |
|
|
|
|
| 29 |
if link.startswith("http://") or link.startswith("https://") or not link.endswith(".md"):
|
| 30 |
return match.group(0)
|
| 31 |
|
|
|
|
| 52 |
return hashlib.md5(Path(path).read_bytes()).hexdigest()
|
| 53 |
|
| 54 |
|
| 55 |
+
def main(force: bool = False):
|
| 56 |
+
# Загружаем токен.json
|
| 57 |
creds = None
|
| 58 |
if os.path.exists(TOKEN_FILE):
|
| 59 |
creds = Credentials.from_authorized_user_file(TOKEN_FILE, ["https://www.googleapis.com/auth/blogger"])
|
| 60 |
|
|
|
|
| 61 |
if creds and creds.expired and creds.refresh_token:
|
| 62 |
creds.refresh(Request())
|
| 63 |
with open(TOKEN_FILE, "w") as token_file:
|
| 64 |
token_file.write(creds.to_json())
|
| 65 |
|
| 66 |
service = build("blogger", "v3", credentials=creds)
|
|
|
|
| 67 |
published = load_published()
|
| 68 |
|
| 69 |
md_files = list(Path("docs").rglob("*.md"))
|
|
|
|
| 71 |
name = md_file.stem
|
| 72 |
h = file_hash(md_file)
|
| 73 |
|
| 74 |
+
if not force and name in published and published[name]["hash"] == h:
|
| 75 |
continue # ничего не изменилось
|
| 76 |
|
| 77 |
+
print(f"📝 {'Форс-обновление' if force else 'Новый или изменённый'} пост: {name}")
|
| 78 |
|
| 79 |
md_text = md_file.read_text(encoding="utf-8")
|
| 80 |
md_text = convert_md_links(md_text)
|
|
|
|
| 109 |
|
| 110 |
|
| 111 |
if __name__ == "__main__":
|
| 112 |
+
parser = argparse.ArgumentParser()
|
| 113 |
+
parser.add_argument("--force", action="store_true", help="Обновить все посты, даже без изменений")
|
| 114 |
+
args = parser.parse_args()
|
| 115 |
+
|
| 116 |
+
main(force=args.force)
|