关于 api 调用的问题

2023-04-24 23:53:30 +08:00
 childewei

需求

今天想写一个图书交易相关的程序,希望有一个通过 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]> 看提示应该是成功了,但是书籍相关的信息我调不出来。

1384 次点击
所在节点    问与答
17 条回复
childewei
2023-04-24 23:55:04 +08:00
另外还发现一个网站不错,但是一点文档都没找到
https://isbnsearch.org/isbn
hlwjia
2023-04-25 00:18:11 +08:00
这不是你不会用谁家的 API 的问题

你是不是刚学 Python ?
Hequndev
2023-04-25 00:25:17 +08:00
楼上正解,这边建议直接 gpt 或许更快解决(:
LiSrRbE2Mac
2023-04-25 00:25:54 +08:00
你 print 的是这个对象本身
你要的内容包含在这个对象的属性里……
ccwhkkk
2023-04-25 01:57:44 +08:00
```
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']}")
```
musi
2023-04-25 08:57:00 +08:00
在上一个帖子了解到楼主“目前本人掌握的技术:除了上述的还有 python 基础”
你这可不像有 python 基础的样子。。。
pkxutao
2023-04-25 10:13:53 +08:00
看了下你以往的帖子。。。你应该去深入学习某项技术或语言,而不是这里搞一下那里搞一下,浮于表面,你对编程思想的理解非常非常浅,甚至我武断的认为你只是照着教程写过一些代码,自己上手就啥也不会
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}”)
```
childewei
2023-04-25 13:53:02 +08:00
@ccwhkkk
我直接使用你的方法没有成功,不多多少还是有些启发,在文档里看了一会,发现调用 data 可以调出来,改了你的 url 变成`'https://openlibrary.org/api/books?bibkeys=ISBN:9787553669090&jscmd=data&format=json'`就成功了。
非常感谢!
childewei
2023-04-25 13:55:05 +08:00
@huntagain2008 网站我是可以访问的,获取了想要的数据到 json 只是不知道怎么提取出来(也许吧,好在现在成功了),多个作者这一点很有帮助谢谢。
childewei
2023-04-25 14:00:14 +08:00
@LiSrRbE2Mac 哦是的,我忘记了给出我原本用于提取信息的代码(是一段错误的代码),不过好在问题解决了。
起先我不会从 response 里提取我想要的文件,每次都读取出一个空值,所以就把那段代码删掉了,谢谢。
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 号的图书信息以文本形式打印。
"""
childewei
2023-04-25 23:00:34 +08:00
@huntagain2008
感谢你的回复,的确 GPT 的结果是不错的,评论中有人指出 GPT-4 说作者多个情况下的解决我也作了修改并表达了感谢,不爽是只有一句你去问 gpt 吧,他会告诉你结果的这种。
我给出的代码也是有自己的习惯在里面,先写了核心部分再进行补充,所以许多应该加的都没有(我还觉得这样提问时候可以一下子看到问题关键呢哈哈哈)
另外不知道是不是我这边的缘故?你的代码都没有缩进,看起来很麻烦,需要调整一边才能使用;这个是你用 GPT 生成的代码的话,的确是我能力不够成熟,正如我在补充里面说的,我和它对话许久都没得到满意的答复。
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/
childewei
2023-05-12 10:37:54 +08:00
@pkxutao #7 思来想去,还是想要和您请教一下何谓编程思想,该怎么理解?困扰许久,希望不吝赐教。
pkxutao
2023-05-12 11:07:07 +08:00
@childewei 对于你的情况,我简单的介绍下(实际我的理解也很浅薄),你学了这么多方向,但是对前后端的理解、数据结构的理解等是怎样的呢?就比如这个帖子的问题,你获取到的是一个对象,你想打印对象里的某个字段,那么这个“对象”->“字段”的关系,你肯定没有理解,不然不会有这个帖子,而这个“对象”->“字段”的关系,属于数据结构范畴,和哪个编程语言无关。“对象”是虚拟的,而字节流是现实存在的,那字节流又怎么转化为虚拟的“对象”呢? 就类似这些东西,你要去理解,去查找知识,这都和编程语言无关的,每个程序员都要掌握
childewei
2023-05-12 16:25:37 +08:00
@pkxutao #16 嗯我有点理解,确实因为我的专业不是正统的计算机,所以以前帖子里提到的像是我学过 c ,java 这种都属于大学课程的必修课比较浅薄了,其他的我所自学 python 更是为了完成比赛要求学习的,对于操作系统数据结构这些都没有深入的了解。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/935196

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX