From 547f72d8a9ff71f03622035a91a583fc047a852d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=B3=E7=A5=9E?= <3162475700@qq.com> Date: Sat, 27 Jul 2024 17:14:28 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=96=E5=AE=8C=E5=96=84=E6=96=87?= =?UTF-8?q?=E6=A1=A3=EF=BC=8C=E5=A2=9E=E5=8A=A0=E8=B6=85=E6=97=B6=E6=97=B6?= =?UTF-8?q?=E9=97=B4=EF=BC=8C=E7=BB=A7=E7=BB=AD=E5=B0=9D=E8=AF=95=E6=96=B0?= =?UTF-8?q?=E6=96=B9=E5=BC=8F=E8=87=AA=E9=83=A8=E7=BD=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__pycache__/get_info.cpython-311.pyc | Bin 13252 -> 13423 bytes friend_circle_lite/get_info.py | 3 +- grab.log | 6 +-- readme.md | 2 + server.py | 39 ++++++++---------- 5 files changed, 24 insertions(+), 26 deletions(-) diff --git a/friend_circle_lite/__pycache__/get_info.cpython-311.pyc b/friend_circle_lite/__pycache__/get_info.cpython-311.pyc index 11e8a805d276d2e4650058bf7857cbec4173a8c1..ad3b661de8c809724481e2977b7672e697fc4540 100644 GIT binary patch delta 998 zcmY*XO-vI(6y9lfx22^PL%_5OZTSf-5TwNz6MjlTl!F2yh=5=hc3X)2B-1U?q%j=u zpoSQE2MmHHYW#_j1Z%*c2^S7}!^Bgg7b22+!FcdsV&c3l5S;9O^WHb_eKYUPtcAA+ zZO?2r3&)0I`AI0eXbTb%-K0GpAzuunG2Y4_u^W;?d^GcyAl9-a>W7fS@2WvF<)c-P z(136fApmO**}5+VDx5io{trqBu_*iZOX^C2y zT+Pndn3#*&nZGeHzco9#IW@bv@Cdo=JualG%GTn$%?G!?y$$^6PEX zd*^4Xl0cD2mOqG_FcU+NZk_P1d3jcAL$fW6ow&>trBV6Jm%CsiO)# zid-wqc?vQDXr^{Vs}I&ak|oT{SL~0R0Arq1@|90pw+!6l8L;p9#nk+vD>XCx#4De9 zWt~@`EH6od@$CG^0x`o%@iosSCLGNe&dX07OD6IBpep8W}nmlbUA z1(+(WC*!bQ>a*&5V=f&5TUoVm1H&S|CWP1|RfN9MR;u75t=4L+FL7)&GFOp0PC z2;GPx=s^nVM!FCeE@X-diXiRYr8+-A2rlXa7rN1VCMxQM`Q|&{{mz+l4zqP`v*dZ; z@whm4!q?V{++)uIaSAMIq6V3P?Z$PoVI!I`ZQt2pqmohW`Yebe?2?W`(K{9xM%s#z zjU!ATOd_OV)2q1u^1y)4zvEw%DJ&_Kx<>bb>N`rt;i)e{=8UHAjE#ihfPbjHVOPm{ zo|WV1tj@!RKjN^hNDWct;gi2Vg6;k~S6z2G)!vX)!TVd{m?AR80V6%VA*ta|o%i@- zoc@27tHCp;8?N+pyW2`!%O!h^`#qBcQo-VwHH6jqD61_C6a~{!pqipcoja6fqo!BCE*VL22?VtU=pAQpVT`lPwKzV+e`&9aykDCp%S zP3CFN3TwKe*K2H-uS0{rIVRD=3}m+{7HL_ls&p4>8SsbuI@3s7UqqIJnXv3CGWv); zwRTtu%kU=LBzfai@0viIpvjj)^XyKxnPRPecCoBew6pn6vllHOWZ;LKC0`*Mo$Ah` zpdc(TXcA;;V?EkWB8QM;YbIaOs#L_#fiQ!bs9n^t*@L%Y0dEH7X_VVqGt}}bF6}t% zjZKg`T#hB()~7L*R^VA|SXg27o$)PJvNMB{$dW8PPn;kT=t_o29(E_^g&WM`gWJg? z61FK5D#3?jADM#A)SkGtIh>7RC5m2(lT&LX{9(RJ!;2TxdPN(hH$hJ=lWp)NHPjI$ Qu8-UwI0++zaXaSx1ZUgIA^-pY diff --git a/friend_circle_lite/get_info.py b/friend_circle_lite/get_info.py index dc2a25b..b99b7ca 100644 --- a/friend_circle_lite/get_info.py +++ b/friend_circle_lite/get_info.py @@ -9,7 +9,7 @@ headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36' } -timeout = (5, 10) # 连接超时和读取超时,防止requests接受时间过长 +timeout = (10, 15) # 连接超时和读取超时,防止requests接受时间过长 def format_published_time(time_str): """ @@ -184,6 +184,7 @@ def process_friend(friend, session, count): """ name, blog_url, avatar = friend feed_type, feed_url = check_feed(blog_url, session) + print(f"========“{name}”的博客“{blog_url}”的feed类型为“{feed_type}”========") if feed_type != 'none': feed_info = parse_feed(feed_url, session, count) diff --git a/grab.log b/grab.log index 33c61ed..44079ea 100644 --- a/grab.log +++ b/grab.log @@ -1,3 +1,3 @@ -2024-07-22 10:21:56,649 - INFO - ʼץȡ... -2024-07-22 10:21:56,653 - INFO - ڴ https://blog.qyliu.top/friend.json лȡÿͻȡ 5 ƪ -2024-07-22 10:22:32,855 - INFO - ץȡɹ +2024-07-27 17:00:52,303 - INFO - ʼץȡ... +2024-07-27 17:00:52,306 - INFO - ڴ https://blog.qyliu.top/friend.json лȡÿͻȡ 5 ƪ +2024-07-27 17:01:52,138 - INFO - ץȡɹ diff --git a/readme.md b/readme.md index 4ea2ef6..b74cb7d 100644 --- a/readme.md +++ b/readme.md @@ -12,6 +12,8 @@ * 自部署添加跨域请求 * 添加`/rss.xml`,`/feed/`,`feed.xml`接口的爬取,提高兼容性 +* 修复PJAX下会多次出现模态框的问题,并且切换页面不消失 +* 修复模态框宽度问题,添加日历图标以更加美观 ### 2024-07-25 diff --git a/server.py b/server.py index 093a870..37ffa08 100644 --- a/server.py +++ b/server.py @@ -1,30 +1,17 @@ from fastapi import FastAPI from fastapi.responses import JSONResponse, HTMLResponse -from fastapi.middleware.cors import CORSMiddleware -from apscheduler.schedulers.asyncio import AsyncIOScheduler -from threading import Lock +import schedule +import time import logging import os -import json import random +from threading import Lock, Thread from friend_circle_lite.get_info import fetch_and_process_data, sort_articles_by_time from friend_circle_lite.get_conf import load_config app = FastAPI() -app.add_middleware( - CORSMiddleware, - allow_origins=["*"], # 允许的域 - allow_credentials=True, - allow_methods=["*"], - allow_headers=["*"], -) - -# 配置APScheduler -scheduler = AsyncIOScheduler() -scheduler.start() - # 配置日志记录 log_file = "grab.log" logging.basicConfig(filename=log_file, level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') @@ -58,9 +45,6 @@ def fetch_articles(): except Exception as e: logging.error(f"抓取文章时出错: {e}") -# 每四个小时抓取一次文章 -scheduler.add_job(fetch_articles, 'interval', hours=4) - @app.get("/", response_class=HTMLResponse) async def root(): html_content = """ @@ -74,7 +58,7 @@ async def root():

这是一个轻量版友链朋友圈,有两种部署方式,其中自部署使用 fastAPI,还有 github action 部署方式,可以很方便的从友链中获取文章并展示到前端。

@@ -101,13 +85,24 @@ async def get_random_article(): else: return JSONResponse(content={"error": "No articles available"}, status_code=404) -if __name__ == '__main__': - import uvicorn +def schedule_tasks(): + schedule.every(4).hours.do(fetch_articles) + while True: + schedule.run_pending() + time.sleep(1) +if __name__ == '__main__': # 清空日志文件 if os.path.exists(log_file): with open(log_file, 'w'): pass fetch_articles() # 启动时立即抓取一次 + + # 启动调度任务线程 + task_thread = Thread(target=schedule_tasks) + task_thread.start() + + # 启动FastAPI应用 + import uvicorn uvicorn.run(app, host='0.0.0.0', port=1223)