| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 476 人关注过本帖
标题:如何根据ISBN去相关网站自动提取书名、作者等信息?
取消只看楼主 加入收藏
Lusir0756
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2025-2-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
如何根据ISBN去相关网站自动提取书名、作者等信息?
家里书很多很多,想一个藏书系统,多年未玩VFP了,请多指教!
2025-02-20 11:51
Lusir0756
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2025-2-20
收藏
得分:0 
没有代码呀,兄台有?

以下是引用wengjl在2025-2-20 15:05:26的发言:

书香门第啊

2025-02-21 09:54
Lusir0756
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2025-2-20
收藏(1)
得分:0 
非常感谢 sam_jiang 先生!!
很多推荐 豆瓣API,又说各种限制。
根据兄台启发,从当当入手,写了一段代码,简单且符合要求。

以下是完整代码:

*** VFP9 根据 ISBN 提取图书信息
*** getisbinfo.prg
Set Safety Off
Clear All
Clear

* 测试 ISBN 列表
LOCAL ARRAY aISBNs[7]
aISBNs[1] = "9787100207867"
aISBNs[2] = "9787010252865"
aISBNs[3] = "9787229177072"
aISBNs[4] = "9787545461312"
aISBNs[5] = "9787520712545"
aISBNs[6] = "9787308236287"
aISBNs[7] = "9787010222936"

* 主程序
FOR EACH cisbn IN aISBNs
    ProcessISBN(cisbn)
ENDFOR

PROCEDURE ProcessISBN(cISBN)
    * 构造请求URL
    LOCAL curl, ohttp, cResponse
    curl = "https://search. + cisbn + "&act=input"
   
    * 发送HTTP请求
    ohttp = CREATEOBJECT("Microsoft.XMLHTTP")
    ohttp.Open("GET", curl, .F.)
    ohttp.Send()
    cResponse = ohttp.ResponseText
   
    * 提取信息块
    LOCAL cBookInfoBlock
    cBookInfoBlock = ExtractInfoBlock(cResponse)
   
    IF EMPTY(cBookInfoBlock)
        ? "ISBN: " + cisbn + " 未找到图书信息"
        RETURN
    ENDIF
   
    * 提取图书信息
    LOCAL cBookName, cAuthor, cPublisher
    cBookName = ExtractChinese(cBookInfoBlock, AT("a title=", cBookInfoBlock))
    cAuthor = ExtractChinese(cBookInfoBlock, AT("作者", cBookInfoBlock) + 4)
    cPublisher = ExtractPublisher(cBookInfoBlock)
   
    * 合并输出结果
    ? GetFormattedInfo(cISBN, cBookName, cAuthor, cPublisher)
ENDPROC

FUNCTION ExtractInfoBlock(cResponse)
    LOCAL i AS Integer, cBlock AS String
    FOR i = 1 TO 300
        cBlock = STREXTRACT(cResponse, "<ul ", "</ul>", i)
        IF "a title" $ cBlock
            RETURN cBlock
        ENDIF
    ENDFOR
    RETURN ""
ENDFUNC

FUNCTION ExtractChinese(cStr, nStartPos)
    LOCAL cResult AS String, i AS Integer
    cResult = ""
   
    IF nStartPos < 1
        RETURN ""
    ENDIF
   
    FOR i = nStartPos TO LEN(cStr)
        IF ASC(SUBSTR(cStr, i, 1)) > 127  && 汉字
            cResult = cResult + SUBSTR(cStr, i, 2) && 取2字节
            i = i + 1
        ELSE
        IF NOT EMPTY(cResult)
            EXIT
        ENDIF
        ENDIF
    ENDFOR
    RETURN STRTRAN(cResult, "'", "") && 清理单引号
ENDFUNC

FUNCTION ExtractPublisher(cStr)
    LOCAL xx AS String, nStartPos AS Integer
    xx = IIF(AT("dd_name='出版社' title='", cStr) > 0,;
        "dd_name='出版社' title='",;
        "单品出版社' title=")
    nStartPos = AT(xx, cStr) + LEN(xx)
    RETURN ExtractChinese(cStr, nStartPos)
ENDFUNC

FUNCTION GetFormattedInfo
    LPARAMETERS cISBN, cName, cAuthor, cPub
    RETURN "ISBN: " + cISBN + CHR(13) + ;
           "图书信息: " + cName + " | " + cAuthor + " | " + cPub
ENDFUNC

实际中还需要增加一些判断,写交个差~~~~

后经 Deepseek 进行了优化整理,看起来很专业了。

再次感谢!

2025-02-27 15:57
Lusir0756
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2025-2-20
收藏
得分:0 
回复 7楼 sam_jiang
又学一函数,感谢!
2025-03-01 11:19
快速回复:如何根据ISBN去相关网站自动提取书名、作者等信息?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014263 second(s), 9 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved