书籍管理DIY

SUN Yu
SUN Yu
Aug 29, 2017 · 6 min read

写在前面

以下所有内容基于iOS作成。

其实事情非常简单,一是最近买书略多觉得有必要规整一下;二来之前有过同一本书买两次的事故。所以就想能不能像书局一样,把所有书通过手机扫描条形码的形式来录入,然后在电脑端集中管理。

手机扫描条形码录入并不困难,问题是iOS上同时支持中日英文书籍检索的App简直是凤毛麟角。

APP篇

英文类
Goodreads背靠亚马逊好乘凉,英文书籍检索加社交阅读。可惜只要踏出英文书领域半步,都分分钟被教做人。

日文类
因为日本人有阅读习惯的较多又喜欢系统化,所以总体上在书籍管理App的开发上面做的相当不错。只不过基本和英文类存在同样的问题,出了国门就被虐成渣。

中文类
中文市场有不少选择,其中对中日英文支持最好的应该是晒书房。更难能可贵的是一些台湾和日本新近出版的书籍皆有对应。是枝裕和在2016年出版的新书《映画を撮りながら考えたこと》竟然都可以做到自动识别,着实让我惊喜不已。之所以弃用则是因为一大部分日文的专业类书籍不能被识别。所以没有特殊需求的人可以结束本文的阅读,直接跳去下载页面了。

正谓,山穷水尽疑无路,柳暗花明又一村:
利用Workflow和Evernote管理书籍,

上面提到原Po的主要思路是通过各大公司开放的API来获取图书信息,然后将图书信息导入到笔记类软件,实现来自诸客户端的管理需求。引用金星老师的台词就是:完美!

为了实现这一目的,首先需要在手机上安装Workflow,2015 Apple Design Awards 受赏作,可以通过定制的方式来缩短工作流程提高效率。

接下来是查找图书类网站提供的API。

API篇

中文类
建议直接使用《利用Workflow和Evernote管理书籍》中的workflow:ISBN存书, 或者利用豆瓣图书API

日文类
最好用的自然是国立国会图书馆NDL,相当于我们的国图。简单说,没有在NDL找不到的日文书就是了。但是NDL的问题在于提供的检索结果页面是以xml格式输出,而workflow似乎只支持json格式。

英文类
印象中Goodreads有提供API。

普适类
首先不得不提到就是卖书产业的龙头老大亚马逊图书的API了。毕竟我大部分的书都是在中亚和日亚上买的,理论上不应该存在图书信息不全的情况。另外,被墙的可能性较低。但没有选择亚马逊的原因在于,抛开使用亚马逊API需要提前申请Product Advertising API,Access Key ID,Secret Access Key三件套手续繁杂之外,它和上文中提到的国立国会图书馆一样,只支持xml格式的输出。想要实行电脑端书籍管理的朋友可以一试。

谷歌图书的API提供了json格式的输出结果,可以匹配workflow。不需要申请API Key就可以使用,虽然每天会有查询数不超过100条的限制。但是它的问题在于:第一,必须会科学上网!!!;第二,谷歌图书的API查询结果几乎不包含出版社信息;第三,谷歌图书偶尔会出现图书已经收录但是API查询结果为空的情况。很多人在StackOverflow上提到了这一情况,但是现在貌似还没有得到解决。至于谷歌图书和亚马逊图书收录的数量方面,日本网友做了一个比较,可以参考。

综上所述,权衡利弊,最后还是决定使用谷歌图书的API。

如何定制Workflow

首先,既然是定制,肯定要给自己的藏书清单起一个独一无二的名字。在图中显示Title Search和Note Title位置进行修改并保证前后一致。

当然,也可以自定义将书目信息存储在苹果自带的备忘录里面,暂时不支持Onenote。

其次,书目信息获取网址变更为
https://www.googleapis.com/books/v1/volumes?q=isbn:<你设计的变量>
(当然了,你也可以沿用我现有的设置)

下面还有一些具体的变量定义,基本只是在原Po的设置上进行了微调。可以直接使用,不再赘述。

至此,大功告成。。。

才怪!如果这么容易实现的话,那这篇文章还有什么存在的价值…

完成上述修改之后,出现了程序可以正常运行,但是无法获取图书信息的问题。

以《知识分子的背叛》一书为例,网页显示的代码

{
"kind": "books#volumes",
"totalItems": 1,
"items": [
{
"kind": "books#volume",
"id": "gr08AAAACAAJ",
"etag": "yZ9KLFJ2hLw",
"selfLink": "https://www.googleapis.com/books/v1/volumes/gr08AAAACAAJ",
"volumeInfo": {
"title": "知識人の裏切り",
"authors": [
"バンダ,J."
],
"publishedDate": "1990",
"industryIdentifiers": [
{
"type": "ISBN_10",
"identifier": "4624932056"
},
{
"type": "ISBN_13",
"identifier": "9784624932053"
}
],(后略)

如上图,代码中详细显示了书名,作者和出版日期等信息,但是运行程序后却无法获取。

经过多次试错(-_-!),以及比对豆瓣API提供的格式发现,造成这一问题的原因在于:
与豆瓣API将图书信息直接提供在根目录不同,谷歌图书将图书的信息放在了一个叫volumeinfo的子目录下面(其实我也不知道目录这个词用的对不对)。所以需要在原Po的基础上添加一道工序。如下:

这回,就真的大功告成了。

我的Workflow

以及

写在后面

接下来的课题是考虑如何能把通过Kindle购买的电子书的信息也按照这种格式导出…

)
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade