吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2973|回复: 62
收起左侧

[Python 原创] 博看网期刊下载生成pdf【实操AI编程】

  [复制链接]
逗啊逗 发表于 2025-2-24 22:55

前言

不得不说,现在任何一个行业都不可避免的被AI所冲击,那么ai编程的可行性到底有多大,我一直在关注并学习AI编程相关的内容,随着AI的迭代发展,一个不得不面对的现实是经过调教的AI已经超过大部分初级程序员了,本着打不过就加入的原则,其实我们应该做的就是更好的利用,这里就简单的以一个例子给大家分享一下整个AI编程的过程,希望能给大家启发。

需求

博看网杂志下载生成pdf。

解析&流程

分析网站

我已经做过好几个类似的分析过程,这里仅仅为了演示AI编程过程,不再赘述,相关的接口也都放在编码流程里面,想自己研究的伙伴可以参考我的另外两篇文章《QQ阅读·机构版解析生成EPUB电子书》、《期刊网杂志解析生成PDF(完整解析流程+源码)》。

编码流程

这次全部交给AI,就一定尽可能的把流程写的足够详细。

  1. 请用户输入期刊杂志id

  2. 根据杂志id获取杂志详细信息

    1. 接口url:
      https://api.bookan.com.cn/resource/issueInfoList?instanceId=12696&resourceType=1&issueIds={id}&isDetail=1
    2. 参数解析:
      • instanceId:12696(固定)
      • resourceType:1(杂志固定为1)
      • issueIds:步骤1中输入的id
      • isDetail:1(固定)
    3. 返回的参数示例:
      {
      "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
          }
      ]
      }
  3. 根据杂志信息获取图片加密hash列表

    1. url:
      https://api.bookan.com.cn/resource/getHash?resourceType=1&resourceId={resourceId}&issueId={resourceId}&start=1&end={end}
    2. 参数解析:
      • resourceType:1(杂志固定为1)
      • resourceId:步骤2里接口返回的数据data下的resourceId
      • issueId:步骤2里接口返回的数据data下的issueId
      • start:1(固定从1开始获取)
      • end:步骤2里接口返回的数据data下的count
    3. 返回的参数示例:
      {
      "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"
          }
      ]
      }
  4. 遍历列表,下载保存所有的图片,图片地址需要拼接。

    1. 拼接格式:
      http://img1-qn.bookan.com.cn/jpage8/{resourceId}/{resourceId}-{issueId}/{hash}_big.jpg
    2. 参数解析:
      • resourceId:步骤2里接口返回的数据data下的resourceId
      • issueId:步骤2里接口返回的数据data下的issueId
      • hash:步骤3里接口返回的数据data下的hash
    3. 实际图片地址示例:
      https://img1-qn.bookan.com.cn/jpage8/6320/6320-310644109/609a22da_big.jpg
  5. 将所有的图片合并为pdf

    1. pdf名称:
      {resourceName}_{issueName}.pdf
    2. 参数解析:
      • resourceName:步骤2里接口返回的数据data下的resourceName
      • issueName:步骤2里接口返回的数据data下的issueName

AI编程与调试

因为流程写的足够清晰,其实AI编程的过程很是顺利,下面是整个过程。

这里使用的DeepSeek,直接把编码流程丢过去,很快代码就生成好了。

1.png

2.png

给我的第一版代码有问题,运行后报错:

3.png

直接把错误信息发给AI,AI也给了解决方法:

4.png

运行后再次报错:

5.png

同样把完整错误信息发给AI:

6.png

这里看到运行成功:

7.png

检查一下文件发现一切正常:

8.png

至此,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:
            # 确保文件名格式为 page_数字.jpg
            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"""
    # 使用正则表达式匹配 page_数字.jpg 格式的文件
    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"])

        # 获取图片hash列表
        hashes = get_image_hashes(resource_id, issue_id, page_count)

        # 下载图片
        download_images(resource_id, issue_id, hashes, image_dir)

        # 生成PDF文件
        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()

使用方法

  1. 打开博看网(无需登录)。
  2. 点开需要下载的杂志页,获取杂志id(url中的id参数)。

9.png

  1. 运行程序并输入id。

注意

代码是针对出杂志类且支持高清原貌的杂志,部分仅有文本的并不支持(当然你也可以按照上面的思路自己来试一试)。

关于网站

论坛里有人分享过博看书苑app,输入机构码可以免费使用,喜欢电子刊物且没有下载需求的伙伴可以直接使用app。

最后

如果仅看编程调试阶段,完全交给AI来做,用不上10分钟就能完成,甚至都没有用到python的任何知识,这样看来,某种程度上AI已经足够升任基础编码工作,当然了,有很多前置因素,一来程序不是特别困难,二来,python的学习样本和类库都足够多,再者也是最关键的:编码流程足够清晰完整。
由此可以给我带来一些思考,AI其实最先取代的就是基础编码工作,但是换一个积极角度就是AI也可以帮助初级程序员快或者初学者,快速成为中高级程序员,其学习过程可以借鉴AI的思考方式,当然也需要学习如何使自己的编码流程足够清晰完整(这一点也可以向ai学习)。希望大家能够高效合理的使用AI技术,提升自己~

PS

查找发现并没有关于规范ai帖子的规定,姑且放到Python原创里,如果不合适,还请管理帮下忙~

免费评分

参与人数 18吾爱币 +23 热心值 +18 收起 理由
long8586 + 1 + 1 用心讨论,共获提升!
Fredyjujun + 2 + 1 感谢大佬的工具@Thanks!
nethobo + 1 + 1 谢谢@Thanks!
felix2024 + 1 谢谢@Thanks!
5721 + 1 + 1 我很赞同!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
VickZ + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
aa20221101 + 1 + 1 热心回复!
安道尔的鱼 + 1 + 1 我很赞同!
Ws1sp + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
B1GYang + 1 + 1 我很赞同!
ericshaw + 1 + 1 谢谢@Thanks!
wb20130225 + 1 + 1 谢谢@Thanks!
FitContent + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
GISerliang + 1 + 1 谢谢@Thanks!
VTKme + 1 + 1 我很赞同!
yuanjie221 + 1 + 1 用心讨论,共获提升!
Hameel + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 逗啊逗 发表于 2025-2-26 23:40
本帖最后由 逗啊逗 于 2025-3-1 23:10 编辑

BUG修复:

经@felix2024反馈,过往期刊存在无法下载的情况,排查后发现图片地址http://img1-qn.bookan.com.cn/jpage8/4286/4286-310639715/24be7689_big.jpg
其中这里的jpage8不是固定的,需要在前面的参数中获取,帖子中的代码大家自行修改,这里只更新编译后的软件。



链接: https://pan.baidu.com/s/1aY52oliaKeQWtDwC7wZIYg?pwd=xhd2
提取码: xhd2



已经编译打包,本来想发布到原创发布区,但是ai参与的作品不被允许,那就直接把软件发这里了。
链接:https://pan.baidu.com/s/1dTh3T4alY8QOF_IB1bJLWw?pwd=x5d3
提取码:x5d3
按需自取,最好给个评分支持一下~

免费评分

参与人数 1热心值 +1 收起 理由
felix2024 + 1 谢谢@Thanks!

查看全部评分

VTKme 发表于 2025-2-25 09:49
coliuer 发表于 2025-2-26 08:14
neworld1974 发表于 2025-2-24 23:44
沙发!~膜拜楼主~
a308971430 发表于 2025-2-25 00:00
蹦了,我以后不能摸鱼了。。。
hldking 发表于 2025-2-25 00:18
本帖最后由 hldking 于 2025-2-25 00:27 编辑

长知识了,AI还可以这样用,多学习下,万一以后有用到......
52wjj 发表于 2025-2-25 00:30
太强了!学习一下思路,以后用得到
alucardonly 发表于 2025-2-25 00:30
感谢分享
kldsj 发表于 2025-2-25 06:42
思路很重要
china-ray 发表于 2025-2-25 08:38
这个思路值得学习!感谢分享!
wang770150597 发表于 2025-2-25 08:52
很厉害的样子
xiaoxiaoxiaoxi 发表于 2025-2-25 08:58
学到了,楼主厉害了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-4-1 07:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表