|
逗啊逗
发表于 2025-2-24 22:55
前言
不得不说,现在任何一个行业都不可避免的被AI所冲击,那么ai编程的可行性到底有多大,我一直在关注并学习AI编程相关的内容,随着AI的迭代发展,一个不得不面对的现实是经过调教的AI已经超过大部分初级程序员了,本着打不过就加入的原则,其实我们应该做的就是更好的利用,这里就简单的以一个例子给大家分享一下整个AI编程的过程,希望能给大家启发。
需求
博看网杂志下载生成pdf。
解析&流程
分析网站
我已经做过好几个类似的分析过程,这里仅仅为了演示AI编程过程,不再赘述,相关的接口也都放在编码流程里面,想自己研究的伙伴可以参考我的另外两篇文章《QQ阅读·机构版解析生成EPUB电子书》、《期刊网杂志解析生成PDF(完整解析流程+源码)》。
编码流程
这次全部交给AI,就一定尽可能的把流程写的足够详细。
-
请用户输入期刊杂志id
-
根据杂志id获取杂志详细信息
- 接口url:
https://api.bookan.com.cn/resource/issueInfoList?instanceId=12696&resourceType=1&issueIds={id}&isDetail=1
- 参数解析:
- instanceId:12696(固定)
- resourceType:1(杂志固定为1)
- issueIds:步骤1中输入的id
- isDetail:1(固定)
- 返回的参数示例:
{
"code": 0,
"msg": "success",
"data": [
{
"resourceType": 1,
"resourceId": "6320",
"resourceName": "篮球",
"resourceCode": "82-342",
"issueId": "310644109",
"issueYear": "2025",
"issueNo": "2",
"count": "100",
"start": "2",
"price0": "25.00",
"price1": "20.00",
"toll": "10",
"sort": "0",
"title": "",
"issueadd": 0,
"issueName": "2025年2期",
"webp": "8",
"html": "0",
"jpg": "8",
"txt": "",
"pdf": "",
"show": 0,
"owner": "",
"categoryName": "",
"publish": "2025-02-01",
"issn": "1000-3460",
"ztfId": "",
"listen": 0,
"tag": "",
"tags": [],
"grade": "90",
"play": 3109,
"text": "《篮球》杂志1981年创刊,隶属于中国篮球协会和中国体育报业总社有限公司,是中国篮球协会唯一专刊、CBA唯一指定专刊、国际篮联指定交换刊物。目前,《篮球》杂志是CBA和20家CBA俱乐部的合作伙伴。创刊以来,多次获得中国篮球新闻奖,其中2022年,有两篇 文章入选中国篮球协会“年轮”展示系列活动。现出版人马冰峰是中国篮球新闻委员会会员、2022-2023赛季CBA联赛新闻监督,还是中国篮球新闻奖评委,以及2019年男篮世界杯中国男篮新闻官。",
"weight": "",
"isbn": "",
"press": "中国体育报业总社、中国篮球协会",
"htmlToll": 2,
"close_tts": 0,
"type": 1,
"source": "",
"share": 0,
"collect": 0,
"score": 0,
"thumbsUp": 0,
"notes": 0,
"popularity": "0",
"explain": "",
"explainRecommend": "《篮球》杂志1981年创刊,隶属于中国篮球协会和中国体育报业总社有限公司,是中国篮球协会唯一专刊、CBA唯一指定专刊、国际篮联指定交换刊物。目前,《篮球》杂志是CBA和20家CBA俱乐部的合作伙伴。创刊以来,多次获得中国篮球新闻奖,其中 2022年,有两篇文章入选中国篮球协会“年轮”展示系列活动。现出版人马冰峰是中国篮球新闻委员会会员、2022-2023赛季CBA联赛新闻监督,还是中国篮球新闻奖评委,以及2019年男篮世界杯中国男篮新闻官。",
"cycle": "0",
"html_ft": 0
}
]
}
-
根据杂志信息获取图片加密hash列表
- url:
https://api.bookan.com.cn/resource/getHash?resourceType=1&resourceId={resourceId}&issueId={resourceId}&start=1&end={end}
- 参数解析:
- resourceType:1(杂志固定为1)
- resourceId:步骤2里接口返回的数据data下的resourceId
- issueId:步骤2里接口返回的数据data下的issueId
- start:1(固定从1开始获取)
- end:步骤2里接口返回的数据data下的count
- 返回的参数示例:
{
"code": 0,
"msg": "success",
"data": [
{
"page": 1,
"hash": "609a22da"
},
{
"page": 2,
"hash": "a2990db4"
},
{
"page": 3,
"hash": "caf0460d"
},
{
"page": 4,
"hash": "b8a12b59"
},
...
{
"page": 97,
"hash": "b1a3795a"
},
{
"page": 98,
"hash": "b2a7b034"
},
{
"page": 99,
"hash": "dd0497cc"
},
{
"page": 100,
"hash": "737b1229"
}
]
}
-
遍历列表,下载保存所有的图片,图片地址需要拼接。
- 拼接格式:
http://img1-qn.bookan.com.cn/jpage8/{resourceId}/{resourceId}-{issueId}/{hash}_big.jpg
- 参数解析:
- resourceId:步骤2里接口返回的数据data下的resourceId
- issueId:步骤2里接口返回的数据data下的issueId
- hash:步骤3里接口返回的数据data下的hash
- 实际图片地址示例:
https://img1-qn.bookan.com.cn/jpage8/6320/6320-310644109/609a22da_big.jpg
-
将所有的图片合并为pdf
- pdf名称:
{resourceName}_{issueName}.pdf
- 参数解析:
- resourceName:步骤2里接口返回的数据data下的resourceName
- issueName:步骤2里接口返回的数据data下的issueName
AI编程与调试
因为流程写的足够清晰,其实AI编程的过程很是顺利,下面是整个过程。
这里使用的DeepSeek,直接把编码流程丢过去,很快代码就生成好了。
给我的第一版代码有问题,运行后报错:
直接把错误信息发给AI,AI也给了解决方法:
运行后再次报错:
同样把完整错误信息发给AI:
这里看到运行成功:
检查一下文件发现一切正常:
至此,AI编程与调试过程结束。
完整代码
import requests
import os
import img2pdf
import re
from typing import Dict, List
def get_journal_info(journal_id: str) -> Dict:
"""获取杂志详细信息"""
url = "https://api.bookan.com.cn/resource/issueInfoList"
params = {
"instanceId": 12696,
"resourceType": 1,
"issueIds": journal_id,
"isDetail": 1
}
response = requests.get(url, params=params)
if response.status_code != 200 or response.json().get("code") != 0:
raise Exception("获取杂志信息失败")
return response.json()["data"][0]
def get_image_hashes(resource_id: str, issue_id: str, page_count: int) -> List[Dict]:
"""获取图片hash列表"""
url = "https://api.bookan.com.cn/resource/getHash"
params = {
"resourceType": 1,
"resourceId": resource_id,
"issueId": issue_id,
"start": 1,
"end": page_count
}
response = requests.get(url, params=params)
if response.status_code != 200 or response.json().get("code") != 0:
raise Exception("获取图片hash失败")
return response.json()["data"]
def download_images(resource_id: str, issue_id: str, hashes: List[Dict], output_dir: str):
"""下载所有图片并保存到本地"""
if not os.path.exists(output_dir):
os.makedirs(output_dir)
for item in hashes:
img_url = f"http://img1-qn.bookan.com.cn/jpage8/{resource_id}/{resource_id}-{issue_id}/{item['hash']}_big.jpg"
response = requests.get(img_url)
if response.status_code == 200:
img_path = os.path.join(output_dir, f"page_{item['page']}.jpg")
with open(img_path, "wb") as f:
f.write(response.content)
else:
print(f"下载失败: 第{item['page']}页")
def create_pdf(image_dir: str, output_pdf: str):
"""将图片合并为PDF"""
images = []
for img in os.listdir(image_dir):
if re.match(r"page_\d+\.jpg", img):
images.append(os.path.join(image_dir, img))
images.sort(key=lambda x: int(re.search(r"page_(\d+)\.jpg", x).group(1)))
with open(output_pdf, "wb") as f:
f.write(img2pdf.convert(images))
def main():
journal_id = input("请输入期刊杂志ID: ").strip()
image_dir = f"temp_images_{journal_id}"
try:
journal_info = get_journal_info(journal_id)
resource_id = journal_info["resourceId"]
issue_id = journal_info["issueId"]
page_count = int(journal_info["count"])
hashes = get_image_hashes(resource_id, issue_id, page_count)
download_images(resource_id, issue_id, hashes, image_dir)
pdf_name = f"{journal_info['resourceName']}_{journal_info['issueName']}.pdf".replace("/", "_")
create_pdf(image_dir, pdf_name)
print(f"PDF生成成功: {pdf_name}")
except Exception as e:
print(f"处理过程中发生错误: {str(e)}")
finally:
if os.path.exists(image_dir):
for file in os.listdir(image_dir):
file_path = os.path.join(image_dir, file)
try:
os.remove(file_path)
except Exception as e:
print(f"无法删除文件 {file_path}: {str(e)}")
try:
os.rmdir(image_dir)
except Exception as e:
print(f"无法删除目录 {image_dir}: {str(e)}")
if __name__ == "__main__":
main()
使用方法
- 打开博看网(无需登录)。
- 点开需要下载的杂志页,获取杂志id(url中的id参数)。
- 运行程序并输入id。
注意
代码是针对出杂志类且支持高清原貌的杂志,部分仅有文本的并不支持(当然你也可以按照上面的思路自己来试一试)。
关于网站
论坛里有人分享过博看书苑app,输入机构码可以免费使用,喜欢电子刊物且没有下载需求的伙伴可以直接使用app。
最后
如果仅看编程调试阶段,完全交给AI来做,用不上10分钟就能完成,甚至都没有用到python的任何知识,这样看来,某种程度上AI已经足够升任基础编码工作,当然了,有很多前置因素,一来程序不是特别困难,二来,python的学习样本和类库都足够多,再者也是最关键的:编码流程足够清晰完整。
由此可以给我带来一些思考,AI其实最先取代的就是基础编码工作,但是换一个积极角度就是AI也可以帮助初级程序员快或者初学者,快速成为中高级程序员,其学习过程可以借鉴AI的思考方式,当然也需要学习如何使自己的编码流程足够清晰完整(这一点也可以向ai学习)。希望大家能够高效合理的使用AI技术,提升自己~
PS
查找发现并没有关于规范ai帖子的规定,姑且放到Python原创里,如果不合适,还请管理帮下忙~
|
免费评分
-
查看全部评分
|