今天想写一个图书交易相关的程序,希望有一个通过 isbn 快速录入图书的功能。 查了好久豆瓣的 api 似乎是不开放,最后发现一个网站能满足我的使用,然后我不会用他的 api !!! 网站是: https://openlibrary.org/dev/docs/api/books
我尝试了直接去调用 api
import requests
import json
# 指定 API 的 URL
url = 'https://openlibrary.org/api/books'
# 指定要查询的 ISBN 号
isbn = '0837165245'
# 构造 API 请求的参数
params = {
'bibkeys': f'ISBN:{isbn}',
'callback': 'mycallback'
}
# 发送 API 请求
response = requests.get(url, params=params)
# 获取 API 响应中的 JSON 字符串
json_str = response.content.decode('utf-8')
print(response)
给出的是<Response [200]> 看提示应该是成功了,但是书籍相关的信息我调不出来。
已经成功的解决了我的问题,感谢@ccwhkkk 的代码帮助和启发,以及@huntagain2008 这位朋友关于作者信息提取的补充。 以下是正确可用的代码:
import requests
# 接口地址
url = 'https://openlibrary.org/api/books?bibkeys=ISBN:9787553669090&jscmd=data&format=json'
# 发送 GET 请求
response = requests.get(url)
# 获取响应数据
response_data = response.json()
# 处理响应数据
book = response_data['ISBN:9787553669090']
print (f"书名:{book ['title']}")
print (f"作者:{book ['authors'][0]['name']}")
print (f"出版日期:{book ['publish_date']}")
输出信息为:
书名:狂人日记(鲁迅小说全集)
作者:鲁迅
出版日期:????
附上一些与主题无关的话,冗长而又无聊,并且不想有人从里面找出几个字来怼我,如果你不幸看完了并且不舒服请拉黑我,谢谢。 我不是一个科班出身的人,学习java是为了能找到一份工作,另外课内也有这门课所以继续深入了一些,并打算一直学习下去,故而曾经在v2ex做了一些询问,而python也是在做数学建模时使用过的,不得不承认在一些简单的事请上用python很好用,随手想写一点小工具,或是学习api调用都是很方便的。 不曾想过如此会被人把仅有的三个帖子挖坟教训了一顿。我承认我的python基础只是学了基础的程序设计,只是用来写一些算法题,这些也可以叫基础吧,为什么我不会使用api也值得被拿出来说了好几楼呢? 一个询问技术的帖子下,你可以说我的python基础不够,可以告诉我想要读取这个api的返回值需要去学习什么,我都很欢迎,就像是下面有人提出我学的东西杂而不精,我自然承认,也在努力的深入学习。可那些说一句你好垃圾然后扬长而去时能够满足自己的优越感还是什么呢?我不理解,只是午睡前看完回复难受了许久,还是不吐不快。
另外,Chat-GPT诞生这么久了,我当然也使用过,但我也觉得认知不足就是提不出好问题,我和它聊了许久也没能得到答案,我想许多人也会先问gtp而后发帖吧,所以大可不必抖一句机灵你去问Chat-GPT快得很,那我干脆发帖说“大佬们过来帮我问问Chat-GPT吧”,这句话适用于各种在不同帖子下回复去问Chat-GPT的人。
1
childewei OP 另外还发现一个网站不错,但是一点文档都没找到
https://isbnsearch.org/isbn |
2
hlwjia 2023-04-25 00:18:11 +08:00
这不是你不会用谁家的 API 的问题
你是不是刚学 Python ? |
3
Hequndev 2023-04-25 00:25:17 +08:00 via iPhone
楼上正解,这边建议直接 gpt 或许更快解决(:
|
4
LiSrRbE2Mac 2023-04-25 00:25:54 +08:00 via Android
你 print 的是这个对象本身
你要的内容包含在这个对象的属性里…… |
5
ccwhkkk 2023-04-25 01:57:44 +08:00 1
```
import requests # 接口地址 url = 'https://openlibrary.org/api/books?bibkeys=ISBN:9787544270871&format=json' # 发送 GET 请求 response = requests.get(url) # 获取响应数据 response_data = response.json() # 处理响应数据 book = response_data['ISBN:9787544270871'] print(f"书名:{book['title']}") print(f"作者:{book['authors'][0]['name']}") print(f"出版日期:{book['publish_date']}") ``` |
6
musi 2023-04-25 08:57:00 +08:00
在上一个帖子了解到楼主“目前本人掌握的技术:除了上述的还有 python 基础”
你这可不像有 python 基础的样子。。。 |
7
pkxutao 2023-04-25 10:13:53 +08:00 1
看了下你以往的帖子。。。你应该去深入学习某项技术或语言,而不是这里搞一下那里搞一下,浮于表面,你对编程思想的理解非常非常浅,甚至我武断的认为你只是照着教程写过一些代码,自己上手就啥也不会
|
8
huntagain2008 2023-04-25 10:47:39 +08:00
我尝试了运行 python 代码但是访问不了,这个网站我访问不了。
小白我看了 GPT-4 生成的代码,它使用了函数,ifelse ,NULL 处理。比如获取图书信息对 response 做 ifelse ,200 就返回图书信息,否则输出错误信息。在解析图书信息时,用 ifelse 判断数据非空,否则显示没有收到数据。有该 ISBN 号则获取图书信息,否则找不到该 ISBN 号的图书。图书的作者可能是多个作者,所以它写的是: ```python authors = [author[‘name’] for author in book.get(‘authors’, [])] authors_str = ‘, ‘.join(authors) if authors else ‘Unknown Author’ print(f”Author(s): {authors_str}”) ``` |
9
childewei OP @ccwhkkk
我直接使用你的方法没有成功,不多多少还是有些启发,在文档里看了一会,发现调用 data 可以调出来,改了你的 url 变成`'https://openlibrary.org/api/books?bibkeys=ISBN:9787553669090&jscmd=data&format=json'`就成功了。 非常感谢! |
10
childewei OP @huntagain2008 网站我是可以访问的,获取了想要的数据到 json 只是不知道怎么提取出来(也许吧,好在现在成功了),多个作者这一点很有帮助谢谢。
|
11
childewei OP @LiSrRbE2Mac 哦是的,我忘记了给出我原本用于提取信息的代码(是一段错误的代码),不过好在问题解决了。
起先我不会从 response 里提取我想要的文件,每次都读取出一个空值,所以就把那段代码删掉了,谢谢。 |
12
huntagain2008 2023-04-25 20:34:42 +08:00
别人说的也没啥问题,用 GPT-4 生成代码比你自己写的还优秀,空的判断你就没写。如果还要讲代码安全性,可以在最后给 GPT-4 加一句:生成代码之后请检查代码的安全性并修改不安全的地方。
import requests def get_book_info(isbn): url = f'https://openlibrary.org/api/books?bibkeys=ISBN:{isbn}&jscmd=data&format=json' response = requests.get(url) if response.status_code == 200: book_data = response.json() return book_data else: print(f"Error: {response.status_code}") return None def print_book_info(book_data, isbn): if book_data: book_key = f'ISBN:{isbn}' if book_key in book_data: book = book_data[book_key] title = book.get('title', 'Unknown Title') authors = [author['name'] for author in book.get('authors', [])] authors_str = ', '.join(authors) if authors else 'Unknown Author' print(f"Title: {title}\nAuthor(s): {authors_str}\nISBN: {isbn}") else: print(f"No book data found for ISBN: {isbn}") else: print("No book data retrieved.") if __name__ == "__main__": isbn = '0837165245' book_data = get_book_info(isbn) print_book_info(book_data, isbn) """ by GPT-4 在运行此代码之前,请确保已安装 requests 库。如果尚未安装,请使用以下命令进行安装: pip install requests 运行上述程序后,您将看到给定 ISBN 号的图书信息以文本形式打印。 """ |
13
childewei OP @huntagain2008
感谢你的回复,的确 GPT 的结果是不错的,评论中有人指出 GPT-4 说作者多个情况下的解决我也作了修改并表达了感谢,不爽是只有一句你去问 gpt 吧,他会告诉你结果的这种。 我给出的代码也是有自己的习惯在里面,先写了核心部分再进行补充,所以许多应该加的都没有(我还觉得这样提问时候可以一下子看到问题关键呢哈哈哈) 另外不知道是不是我这边的缘故?你的代码都没有缩进,看起来很麻烦,需要调整一边才能使用;这个是你用 GPT 生成的代码的话,的确是我能力不够成熟,正如我在补充里面说的,我和它对话许久都没得到满意的答复。 |
14
huntagain2008 2023-04-27 08:54:47 +08:00
#13 代码没有缩进是因为 V2EX 的回复评论里就不支持 markdown 也不能缩进,GPT-4 的回复里是 markdown 做好的代码展示。我作为小白只见过一些人写代码是用辅助工具,自己没有用过。见过有人推广过网页去水印的技术,他就是用 ChatGPT 帮助写的代码,是集成在 IDE 中的。
他用的 cursor 的工具,是集成了 GPT-4 的。要 AI 的错误率低,主要还是需要 GPT-4 。 其次就是 prompt 的使用。工具在视频的 05:58 https://www.bilibili.com/video/BV1Ak4y147t6/ |
15
childewei OP @pkxutao #7 思来想去,还是想要和您请教一下何谓编程思想,该怎么理解?困扰许久,希望不吝赐教。
|